| Создание собственного 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.
Результат
визуализации работы скрипта управления базой данных
Если все
перечисленные выше функции будут помещены в один файл, то в итоге будет
подготовлен работоспособный скрипт.
| |