Для тех, кто хочет быстро научиться веб-программированию на языках PHP и mySQL, привожу кратчайший код работы части интернет-магазина и описание необходимых PHP-функций
1. Введение
2. Создание базы данных
3. Создание таблиц в базе данных
4. Создание вспомогательных функций и файлов
5. Вставка данных в базу данных
6. Редактирование данных в базе данных
7. Удаление данных из базы данных
8. Заключение
1. Введение
Вся работа с СУБД mySQL сводится к оперированию запросами к таблицам данных в базе данных. Данные можно заносить в базу, извлекать из базы, изменять их, и удалять из базы. Запросы к БД могут быть довольно гибкими и сложными, но умение делать
такие запросы приходит с опытом, мы же в нашем нижерасмотренном примере ограничимся простыми запросами, которых, кстати, вам может оказаться вполне достаточно в большинстве случаев и в реальном программировании. Заметьте, кстати, что даже запросы, выполняющие одну и ту же задачу, можно написать по-разному.
Типы данных столбцов таблиц БД
В полях таблиц можно хранить следующие типы данных:
1. Числовые типы:
int — целые числа,
float — числа с плавающей запятой (знаковые либо беззнаковые)
2. Типы даты и времени, например
date или time (используются для записи в БД данных о времени)
3. Строковые типы:
char — короткие строки,
varchar — длинные строки,
TEXT — большие тексты
4. Бинарные типы
BLOB (это любые данные, вплоть до медиа-файлов).
Основные операции, проводимые с БД (типы запросов):
1. Создание баз данных: может выполняться оператором
create database и другими срособами (способ создания через phphmyadmin будет рассмотрен далее в нашем примере).
2. Создание таблиц баз данных: выполняется оператором create table имя_таблицы
(будет рассмотрено в нашем примере).
3. Извлечение данных из базы данных: производятся с помощью оператора select со вспомогательными параметрами. Извлечение данных можно разделить на следующие типы:
а)Извлечение данных по определённому критерию (будет рассмотрено в нашем примере);
б)Извлечение данных из нескольких таблиц, можно разделить на виды:
— простое объединение двух таблиц
— объединение трёх и более таблиц
— поиск несоответствующих строк (левостороннее объединение)
— использование других имён таблиц (псевдонимов)
в) Извлечение данных в определённом порядке, можно разделить на виды:
— группировка и агрегирование данных
— выбор возвращаемых строк
4. Вставка данных в базу данных: выполняется оператором insert
(в основном будет рассмотрено в нашем примере).
5. Обновление записей в базе данных: выполняется оператором update
(в основном будет рассмотрено в нашем примере).
6. Изменение таблиц после создания: выполняется оператором alter table имя_таблицы
7. Удаление записей из базы данных: выполняется оператором delete
(в основном будет рассмотрено в нашем примере).
8. Удаление таблиц: выполняется оператором
drop table имя_таблицы
9. Удаление целой базы данных: выполняется оператором
drop database имя_базы
ВСЕ эти операции можно выполнять через WEB с помощью утилиты phpmyAdmin, и МНОГИЕ — через WEB с помощью стандартных функций доступа к mySQL языка РНР. Все функции языка РНР для доступа к mySQL имеют вид mysql_functionname().
Более подробные сведения об использовании операторов и типов данных ищите в специальных справочниках.
Сначала нам нужно создать базу данных и в этой базе таблицу для данных.
Предположим, нам нужно создать книжный магазин с возможностью добавления, удаления и редактирования отдельных книг.
Подразумеваем, что на вашем компьютере уже установлен Денвер.
2. Создаём базу данных с помощью утилиты phpmyAdmin.
На реальном хостинге вам, скорее всего, будет разрешён именно такой способ создания.
Для создания БД делаем следующее:
1)Запускаем Денвер щелчком по его ярлычку на рабочем столе.
2)Запускаем броузер и в его строке набираем путь http://localhost/index.html На открывшейся странице переходим к её низу и среди
утилит выбираем Заведение новых БД и пользователей MySQL (http://localhost/Tools/addmuser/index.php) и вводим в поля данные:
— самое верхнее поле трогать не будем и оставим его пустым.
— в следующие два поля вводим имя базы и логин:
shop
— в последние два поля вводим пароль для подключения к базе:
my_shop
3) щелкаем на кнопке Создать БД и пользователя. База создана.
3. Создание таблиц в базе данных.
Теперь нужно создать таблицу книг. Для создания таблицы опять переходим в Утилиты и выбираем phpMyAdmin — администрирование СУБД MySQL
В левой части открывшегося окна выбираем только что созданную нами БД с именем
shop
Щёлкаем на вкладке SQL, в открывшемся поле вводим нижеследующий текст и щёлкаем на кнопке Пошёл
create table books
(
id char(13) not null primary key, title char(40), author char(40), description char (200)
)
Что в переводе на русский язык означает: Создать таблицу с именем books со следующими столбцами:
— столбец с именем id, типом данных которого будет строка длиной не более 13-ти символов (char(13)). Этот столбец будет первичным ключом (primary key), т.е. сервер mySQL для ускорения поиска по таблицам будет данный столбец индексировать. Под индексацией понимается регулярный программный просмотр столбца с запоминанием его данных в памяти машины. not null означает то, что поля этого столбца (под полем понимается ячейка, находящаяся на пересечении строки и столбца) не могут быть пустыми.
Это очень важное поле — оно содержит уникальный идентификатор для каждой книги, по которому можно отыскивать любую информацию, касающуюся данной книги.
— остальные столбцы: наименование книги, автор, описание — с одинаковым (строковым) типом данных и разными длинами данных.
4. Создание вспомогательных функций и файлов
Теперь немного отвлечёмся и создадим три очень важных для нас служебных файла.Эти файлы будут подключаться по мере необходимости на каждой
нашей страничке и избавят нас от необходимости перегружать код лишней информацией.
1. файл shop_fns.php. Здесь находятся универсальные функции, которые можно использовать не только при работе с разделом Книг, но и с любым другим разделом, который вы захотите в будущем создать в нашей, уже созданной базе shop.
Вот его код:
<?php
/* следующие две функции отвечают за стандартное html-форматирование страницы: */
function heading($title,$h)
{
echo "<html><head><META http-equiv='Content-Type content=text/html'; charset='utf-8'>
<title>$title</title><h2>$h</head><body>";
}
function footer()
{
echo "</body></html>";
}
/* подключаемся к серверу БД и к нужной БД, используя две основные стандартные функции РНР mysql_connect() и mysql_select_db(): */
function db_connect(){
$dbhost="localhost";
$dbuser="shop";
$dbpass="my_shop";
$dbname="shop";
$db=mysql_connect($dbhost,$dbuser,$dbpass);//подключаемся к серверу БД с использованием имени сервера БД, имени и пароля пользователя
if(!$db)
{
echo "Не удалось соединиться с сервером БД. Повторите попытку через несколько минут.";
exit;
}
/*подключаемся к БД с именем shop*/
else @mysql_select_db($dbname);
}
function filled_out($form_vars){
/*проверяем, заполнены ли все поля*/
foreach ($form_vars as $key => $value)
{
if (!isset($key) || ($value == ''))
return false;
}
return true;
}
function check($value)
{
/* Обработка входящих значений для защиты от хакерских атак */
$value = htmlspecialchars(addslashes($value));
$value = str_replace("'","`",$value);
return $value;
}
/* следующая функция получает строковый массив из результата запроса к БД */
function db_result_to_array($result) {
$res_array=array();
for ($count=0; $row=@mysql_fetch_array($result); $count++) $res_array[$count]=$row;
return $res_array;//возвращаем массив
}
/* делаем запрос к БД:*/
function make_query($query){
$conn=db_connect();
$result=mysql_query($query);
if(!$result)return false;
return $result;
}
/*делаем ссылки:*/
function do_html_url($url,$val){
echo "<br><a href=$url>$val</a>";
}
?>
2. Файл books_fns.php: здесь для удобства разместим функции, присущие только разделу работы с книгами:
<?php
/* Следующая функция выводит на страницу главное меню: */
function menu(){
do_html_url("show.php","Посмотреть список книг");
/* делаем ссылки для каждого пункта меню */
do_html_url("insert_book.php","Добавить книгу в базу");
do_html_url("edit_book.php","Редактировать книгу");
do_html_url("delete_book.php","Удалить книгу из базы");
}
?>
3. Файл my_fns.php: Этот файл отвечает за подключение к скриптам нужных функций
<?php
require_once("shop_fns.php");
require_once("books_fns.php");
?>
Всё самое главное мы подготовили. Теперь займёмся непосредственно запросами к базе данных. Но для удобства работы создадим
файл с главным меню, из которого будем управлять работой:
Файл menu.php
<?php
//подключаем необходимые функции:
include ("my_fns.php",'Щёлкните по нужной ссылке');
//форматируем верх страницы:
heading('Главное меню');
menu();//выводим главное меню
footer();//форматируем низ страницы
?>
5. Вставка данных в базу данных.
Теперь в эту таблицу нам нужно занести данные об имеющихся у нас книгах. Эту задачу мы выполним уже через веб-интерфейс.
Представьте, что вы администратор вашего интернет-магазина и новые книги вы будете вносить в БД примерно таким же образом.
Для решения данной задачи создаём файл
insert_book.php :
<?php
include("my_fns.php");
heading('Внести новую книгу','Введите в поля нужные значения');
echo '<form action='insert.php" method="post">
<!--Идентификатор:->
<input type="text"name="id" value="000001">
<!--Название:->
<input type="text"name="title" value="Книга1">
<!--Автор:->
<input type="text"name="author" value="Автор1">
<!--Описание:->
<input type="text"name="description" value="Описание1">
<input type="submit" value="Внести в БД">';
do_html_url("menu.php","В меню");
footer();
?>
Пишем код для файла insert.php, который будет
принимать значения полей и обрабатывать их для записи в БД. Особое внимание здесь и далее по текстууделяйте расстановке кавычек в запросах к БД (переменной $guery)!
<?php
include("my_fns.php");
heading('Добавление книги','Результат добавления:');
do_html_url('insert_book.php','Назад');
//Проверяем, заполнены ли все поля:
if(!filled_out($_POST)) {echo "Не все поля заполнены!";exit;}
//Обрабатываем значения полей:
$id=check($_POST['id']);
$title=check($_POST['title']);
$author=check($_POST['author']);
$description=check($_POST['description']);
/*
Формируем и делаем запрос к БД:
вставить в таблицу книг в поля с именем id,title,author,description значения переменных $id, $title,$author,$description
*/
$query="insert into books (id,title,author,description) values('$id','$title','$author','$description')";
$items=make_query($query);//обработка запроса
if(!$items)echo "Ошибка вставки в таблицу БД";
/*
Выводим на страницу результат запроса с помощью стандартной функции mysql_affected_rows()
*/
else echo mysql_affected_rows()." - а книга добавлена в БД";
do_html_url("menu.php.php","В меню");
footer();
?>
Операцию по вставке данных в базу повторяете столько раз, сколько нужно.
После вставки данных можно просмотреть результат работы скрипта, перейдя в меню (файл menu.php),
а далее — по ссылке show.php (Посмотреть список книг). Зайдя сюда, мы увидим что название каждой книги является ссылкой
на файл show_book.php, показывающий описание каждой книги. Значит, эти файлы нам тоже нужно заранее подготовить.
Код файла show.php, предназначенного для просмотра списка книг в базе данных:
<?php
include("my_fns.php");
heading('Просмотр списка книг','Список книг, имеющихся в базе:');
$query="select id, title,author from books";
$items=make_query($query);
if(!$items)echo "Ошибка запроса к таблице БД";
$items_arr=db_result_to_array($items);
display_items($items_arr);
do_html_url("menu.php","В меню");
footer();
function display_items($items_arr)
{
if(!is_array($items_arr)){echo "Нет доступных наименований.";return;}
echo "<table border=1px><tbody><tr><th>id</th><th>Наименование</th><th>Автор</th></tr>";
foreach($items_arr as $row)
{
/* Помимо вывода в таблице данных книг передаём идентификатор книги в GET-запросе файлу show_book.php для просмотра описания каждой книги */
echo "<tr><td>".stripslashes($row['id'])."</td>>td><a href=show_book.php?id=".stripslashes($row['id']).">".stripslashes($row['title'])."</a></td><td>".stripslashes($row['author'])."</td></tr>";
}
echo "</tbody></table>";
}
?>
Теперь пишем код файла show_book.php, предназначенного для просмотра описания каждой отдельной книги. В этом файле все данные каждой книги достаются из базы (таблицы books) по полученному скриптом идентификатору id книги:
<?php
include("my_fns.php");
heading('Просмотр книги');
$id=$_GET['id'];
/* Вот где нам нужен идентификатор! Параметр * означает "выбрать ВСЁ" */
$query="select*from books where id=$id";
$items=make_query($query);
if(!$items)echo "Ошибка запроса к таблице БД";
$items_arr=db_result_to_array($items);
display_items($items_arr);
footer();
function display_items($items_arr)
{
if(!is_array($items_arr)){echo "Нет доступных наименований.";return;}
foreach($items_arr as $row)
{
echo "<br> Идентификатор: ".stripslashes($row['id'])."<br/>Наименование: ".stripslashes($row['title'])."<br>Автор: ".stripslashes($row['author'])."<br>Описание: ".stripslashes($row['description']);
}
}
?>
Теперь, когда в таблицу внесены книги, можно их редактировать и удалять.
6. Редактирование данных в базе данных
Для редактирования книги нам необходимо достать из базы именно её данные с тем, чтобы потом их изменить.
Для этого книгу нужно в базе сначала найти. Искать книгу мы будем по её идентификатору id.
Пишем файл edit_book.php:
<?php
include("my_fns.php");
heading('Редактирование книги','Введите id книги, подлежащей редактированию:');
?>
<form action="edit.php" method="GET">
<input type="text" name="book_id" value="000001"><br>
<input type=submit name=edit value="Редактировать"><br>
</form>
<?php
do_html_url('menu.php','В меню');
footer();
?>
Файл edit.php будет получать от файла edit_book.php id книги, подлежащей редактированию,
и на основе этого id доставать значения всех полей таблицы Книги, соответствующих данному id (другими словами — значения всех ( * ) столбцов одной строки в таблице). Вот код этого файла:
<?php
include("my_fns.php");
heading('Редактирование книги','Измените необходимые значения в полях:');
if(isset($_GET['book_id'])
{
$id=$_GET['book_id'];
/*Извлечь ВСЁ из таблицы books, что соответствует id, равному $_GET['book_id']:*/
$query="select*from books where id=$id";
$items=make_query($query);
if(!$items)echo "Ошибка извлечения из таблицы БД";
$items_arr=db_result_to_array($items);
display_items($items_arr); /* вывести значения нужных полей таблицы на страницу */
}
do_html_url("edit_book.php","Назад");
do_html_url("menu.php","В меню");
footer();
function display_items($items_arr)
{
if(!is_array($items_arr)){echo "Нет доступных наименований.";return;}
echo "<form method='post' action='edit1.php'><table><tbody>";
foreach($items_arr as $row)
{
echo "<tr><td>Идентификатор:</td><td><input type='text' name=id value=".stripslashes($row['id']).'></td></tr<td>Наименование:</td><td><input type='text' name='title' value='.stripslashes($row['title']).'></td></tr><tr><td>Автор:</td><td><input type='text' name='author' value='.stripslashes($row['author']).'></td></tr><tr><td>Описание:</td><td><input type='text' name='description'value='.stripslashes($row['description']).'></td></tr>";
}
echo "<tr><td><input type='submit' value='Редактировать'></td></tr></form></tbody></table>";
}
?>
Файл edit1.php получает от файла edit.php значения изменённых полей и записывает их в таблицу «books» БД:
<?php
include("my_fns.php");
heading('Редактирование','');
if(!filled_out($_POST)) {echo "Не все поля заполнены!";exit;}
//Проверяем полученные переменные
$id=check($_POST['id']);
$title=check($_POST['title']);
$author=check($_POST['author']);
$description=check($_POST['description']);
/*
Делаем запрос в БД: обновить таблицу books, установить значения её полей, равными значениям полученных переменных
*/
$query="update books set id='$id',title='$title',author='$author',description='$description' where id=$id";
$items=make_query($query);
if(!$items)echo "Ошибка редактирования в таблице БД";
else echo mysql_affected_rows()." - а книга отредактирована в БД";
do_html_url("edit_book.php","Назад к редактированию");
do_html_url("menu.php","В меню");
footer();
?>
7. Удаление данных из базы данных.
Файл delete_book.php принимает id книги от самого себя, удаляет нужную запись и выдаёт сообщение об удалении:
<?php
include("my_fns.php");
heading('Удаление книги','Введите id книги, подлежащей удалению:');
?>
<form action='delete_book.php' method='GET'>
<input type='text' name='book_id' value='000001'><br>
<input type='submit' value='Удалить'></form>
<?php
if(isset($_GET['book_id']))
{
$book_id=$_GET['book_id'];
$query="delete from books where id=$book_id";
$items=make_query($query);
if(!$items)echo "Ошибка вставки в таблицу БД";
else echo mysql_affected_rows()." - а книга удалена из БД";
}
do_html_url('show.php','Посмотреть список книг');
do_html_url('menu.php','В меню');
footer();
?>
8. Заключение.
Итак: при работе с СУБД mySQL и РНР в общем случае нужно сделать следующие действия:
а) Установить сединение с сервером БД, например:
$db=mysql_connect(‘hostname’,’user’,’password’);
б) Подключиться к нужной базе данных, например:
mysql_select_db(‘db_name’);
в) Построить запрос к БД, например:
$query=»select * from db_name»;
г) Выполнить этот запрос:
$result=mysql_ouery($query);
д) Получить результат запроса, например:
$row=mysql_fetch_array($result);
е) И…и всё!
Все эти функции использовались в нашем примере в файле shop_fns.php
Замечания:
1. Для полноценной работы с mySQL нам всё же не помешает практика и хороший справочник.
2. Не забудьте, что вход в административную часть нужно защитить паролем, чего не делалось в рассмотренном примере.
3. Приведенный код примера полностью работоспособен и вы можете протестировать его на своём локальном либо реальном хосте.