Создание собственного PHP-скрипта для управления базой
данных
Прежде чем начать извлекать или загружать какие-либо данные,
необходимо подключиться к базе данных. Для этого существуют следующие функции:
• mysql_connect (имя_сервера,
имя_пользователя, пароль) – открывает соединение с сервером, все
параметры необязательны и зависят от настроек сервера;
• mysql_select_db (имя_базы,
указатель_на_соединение) – выбирает базу данных, указатель необязателен,
если внутри скрипта происходит работа только с одной базой данных.
Таким образом, начало нашего скрипта (опуская стандартные html-теги)
будет выглядеть следующим образом с учетом того, что пароль для пользователя
root в Денвере не определен, а сама база данных располагается на сервере
localhost:
mysql_select_db("fruit", mysql_connect("localhost",
"root"));
Ранее в разделе 2. мы уже создали базу данных и знаем все ее
поля. Исходя из этого, рассмотрим код отображения формы, которая позволит нам
как добавлять новые значения в таблицу, так и редактировать уже загруженные:
<? function display_form () { // Надпись на кнопке отправки формы по (умолчанию) $submit_msg = "Добавить"; ?> <form
method="post" action="<? echo $_SERVER['PHP_SELF']
?>"> <? if ($_REQUEST["id"]) { $sql = "SELECT
* FROM fruits WHERE id=".$_REQUEST["id"]; $tr = mysql_fetch_array(mysql_query($sql)); ?> <input
type=hidden name="id" value="<? echo $tr["id"]
?>"> <? // Надпись на кнопке отправки формы (новая) $submit_msg = "Изменить"; } // конец if ?> Название фрукта: <input type="Text"
name="name" value="<?
echo $tr["name"]; ?>"><br> Штрих-код: <input type="Text"
name="code" value="<?
echo $tr["code"] ?>"><br> Цена: <input
type="Text" name="price" value="<?
echo $tr["price"]; ?>"><br> Страна происхождения: <input type="Text"
name="country" value="<?
echo $tr["country"]; ?>"><br> <input
type="submit" name="submit" value=" echo $submit_msg; ?>"> </form> } // конец функции display_form() ?> |
В приведенном коде нам знакомы практически все конструкции за
исключением следующих:
• mysql_query(SQL-запрос,
указатель_на_базу_данных) – возвращает результат обработки базой данных
SQL-запроса;
• mysql_fetch_array(результат_SQL-запроса)
– обрабатывает результата запроса, возвращая ассоциативный массив.
В случае, если в скрипт передается уникальный идентификатор записи
id, производится получение данных этой записи в ассоциативный массив $tr,
элементы которого затем используются при формировании формы. Как мы увидим
дальше, уникальный идентификатор поступает в скрипт в двух случаях: при
изменении либо при удалении элемента. При операции изменения (до и после) данные
будут выводиться в форму, а при удалении ничего не будет выводиться, так как
вывод формы (см. следующий блок кода) идет после операции удаления и на запрос
по несуществующему к тому моменту уникальному идентификатору база выдает пустой
ответ:
if
($_REQUEST["submit"]) {change_db();} print_list(); display_form(); |
В приведенном листинге мы видим основное тело программы. В случае
отправки данных формы или удаления в скрипт передается переменная submit,
которая инициирует вызов функции
change_db(), производящей изменения в базе данных.
Функция print_list() выводит текущее содержание изучаемой нами таблицы и
формирует управляющие ссылки для операций изменения и удаления записей.
Рассмотрим функцию change_db():
<? function change_db() { /* Функция будет выполняться, только если все поля формы запол- нены или планируется удаление записи */ if (($_REQUEST['name'] &&
$_REQUEST['code'] &&
$_REQUEST['price'] &&
$_REQUEST['country'])) ||
($_REQUEST["submit"] == 'delete')){ // Введение сокращенных имен $name = $_REQUEST['name']; // для переданных данных. Если планируется // удаление, то переменные будут пустыми $code =
$_REQUEST['code']; $price =
$_REQUEST['price']; $country =
$_REQUEST['country']; if (!$_REQUEST["id"]) { // id нет только если добавляется новая запись $sql = "INSERT
INTO fruits (name, code, price, country) VALUES ('$name',
$code, $price, '$country')"; $info_msg = "Запись добавлена"; } else if ($_REQUEST["submit"]
== 'delete') { // обработка вызова на удаление $sql = "DELETE FROM fruits WHERE
id=".$_REQUEST['id']; $info_msg = "Запись N" . $_REQUEST['id']
. " удалена"; } else { // в остальных случаях подразумевается // изменение записи $sql = "UPDATE
fruits SET name='$name', code=$code, price=$price,
country='$country' WHERE
id=".$_REQUEST['id']; $info_msg = "Запись изменена"; } mysql_query($sql); echo '<p
style="background-color:#FF9999; border: red 1px
solid; padding:2px 6px;">' . $info_msg . "</p>"; } // конец перового if } // конец функции change_db() ?> |
Как можно заметить, в зависимости от входящих условий формируется
SQL-запрос и информационное сообщение, которые потом соответственно выполняются
и выводятся пользователю. И наконец, рассмотрим функцию вывода данных из
таблицы print_list():
<? function print_list(){ echo "<table border=1> <tr><th>id</th><th>code</th><th>name</th> <th>price</th><th>country</th> <th colspan=2>Редактирование</th></tr>"; $result = mysql_query("SELECT
* FROM fruits"); while ($tr = mysql_fetch_array($result))
{ printf("<tr><td>%s</td><td>%s</td><td>%s</td> <td>%s</td><td>%s</td>",
$tr['id'], $tr['code'], $tr['name'],
$tr['price'], $tr['country']); printf("<td><a
href=\"%s?id=%s\">(изменить)</a> </td>",
$_SERVER['PHP_SELF'], $tr['id']); printf("<td><a
href=\"%s?id=%s&submit=delete\"> (удалить)</a></td></tr>", $_SERVER['PHP_SELF'],
$tr["id"]); } echo "</table>"; echo '<a href="' .
$_SERVER['PHP_SELF'] . '"> Новая запись</a>'; } // конец функции print_list() ?> |
В приведенном коде первый оператор echo формирует
заголовок таблицы. Второй извлекает все данные из таблицы, а третий в цикле
формирует строки таблицы. После чего таблица закрывается и добавляется строка,
позволяющая создать новую запись (загрузить пустую форму). Здесь мы видим
интересную функцию printf(строка-шаблон, переменные), которая
выводит данные в соответствии с заранее заданным шаблоном (%s в строке
заменяется на переменную в соответствии с порядком упоминания), что позволяет
существенно упрощать описание вывода данных в HTML-документ.
Пример визуализации скрипта приведен на рис. 6.
Результат
визуализации работы скрипта управления базой данных
Если все
перечисленные выше функции будут помещены в один файл, то в итоге будет
подготовлен работоспособный скрипт.