Лекция: Работа с MySQL (сохранение данных в базе данных).
Мы научились извлекать данные из базы и выводить их на странице. Теперь давай попробуем осуществить обратное действие. С PHP это не составит большого труда. Создадим простую форму:
<html>
<body>
<form method=«post» action="<?php echo $PHP_SELF?>">
First name:<input type=«Text» name=«first»><br>
Last name:<input type=«Text» name=«last»><br>
Address:<input type=«Text» name=«address»><br>
Position:<input type=«Text» name=«position»><br>
<input type=«Submit» name=«submit» value=«Enter information»>
</form>
</body>
</html>
Обратите внимание, мы опять используем переменную $PHP_SELF. Как мы уже сказали, PHP-код можно как угодно перемешивать с обычным HTML. Также обратите внимание, что название каждого элемента формы совпадает с названием поля в базе данных. Вообще-то, это не обязательно, но весьма удобно, чтобы в дальнейшем не запутаться в том, какая переменная какому полю в базе данных соответствует.
Помимо этого мы присвоили имя кнопке Submit. Это сделано для того, чтобы в коде затем проверить, есть ли переменная $submit. Таким образом, когда страница будет вызываться, мы будем узнавать, вызывается ли она в первый или во второй раз.
Следует еще раз отметить, что вовсе не обязательно писать код так, чтобы страница снова и снова вызывала саму себя. Программу можно разделить на две, три и более страниц, если угодно. Но при таком подходе, вся программа находится в одном файле, а это бывает весьма удобно.
Итак, давайте добавим код, который будет проверять, введены ли в форму данные. Пока это будет лишь простая проверка, при которой все переменные, передаваемые странице, будут выводиться на экран с помощью переменной $HTTP_POST_VARS. Эта переменная удобна в случае отладки. Если вы хотите вывести на экран вообще все переменные, используемые в странице, вызовите переменную $GLOBALS.
<html>
<body>
<?php
if ($submit) {
// process form
while (list($name, $value) = each($HTTP_POST_VARS)) {
echo "$name = $value<br>\n";
}
} else{
// display form
?>
<form method=«post» action="<?php echo $PHP_SELF?>">
First name:<input type=«Text» name=«first»><br>
Last name:<input type=«Text» name=«last»><br>
Address:<input type=«Text» name=«address»><br>
Position:<input type=«Text» name=«position»><br>
<input type=«Submit» name=«submit» value=«Enter information»>
</form>
<?php
} // end if
?>
</body>
</html>
Ну что ж, выглядит неплохо. Теперь давайте возьмем подданную через форму информацию и внесем ее в базу данных.
<html>
<body>
<?php
if ($submit) {
// process form
$db = mysql_connect(«localhost», «root»);
mysql_select_db(«mydb»,$db);
$sql = «INSERT INTO employees (first,last,address,position) VALUES
('$first','$last','$address','$position')»;
$result = mysql_query($sql);
echo «Thank you! Information entered.\n»;
} else{
// display form
?>
<form method=«post» action="<?php echo $PHP_SELF?>">
First name:<input type=«Text» name=«first»><br>
Last name:<input type=«Text» name=«last»><br>
Address:<input type=«Text» name=«address»><br>
Position:<input type=«Text» name=«position»><br>
<input type=«Submit» name=«submit» value=«Enter information»>
</form>
<?php
}
// end if
?>
</body>
</html>
Мы внесли данные в базу. Тем не менее наш код далек от идеального. Что случится, если при заполнении формы кто-то оставит пустые поля или введет текст в поле, в которое надо ввести число? Что произойдет, если в поданных данных будет ошибка? Не беспокойтесь. Сейчас мы все исправим. На протяжении всего учебника мы записывали SQL-выражение в переменную ($sql), прежде чем передать запрос в базу данных через функцию mysql_query(). Это делается на случай отладки. Если что-то пойдет не так, мы всегда сможем вывести интересующее нас SQL-выражение на экран и проверить, нет ли в нем ошибок.
Мы уже знаем, как вставлять данные в базу. Теперь давайте научимся менять записи, которые уже находятся в таблице. Редактирование данных сочетает в себе два кода. Которые мы уже проходили: извлечение данных из базы с выводом их на экран, и внесение данных через форму обратно в базу. Тем не менее программа правки данных немного отличается тем, что мы в форме должны вывести некую конкретную запись. Для начала давайте воспользуемся кодом из предыдущей главы, для вывода списка служащих на экран. Однако теперь информацию о служащих мы будет отображать в форме. Код страницы будет выглядеть так:
<html>
<body>
<?php
$db = mysql_connect(«localhost», «root»);
mysql_select_db(«mydb»,$db);
if ($id) {
// query the DB
$sql = «SELECT * FROM employees WHERE id=$id»;
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
?>
<form method=«post» action="<?php echo $PHP_SELF?>">
<input type=hidden name=«id» value="<?php echo $myrow[«id»] ?>">
First name:<input type=«Text» name=«first» value="<?php echo $myrow[«first»] ?>"><br>
Last name:<input type=«Text» name=«last» value="<?php echo $myrow[«last»] ?>"><br>
Address:<input type=«Text» name=«address» value="<?php echo $myrow[«address»] ?>"><br>
Position:<input type=«Text» name=«position» value="<?php echo $myrow[«position»] ?>"><br>
<input type=«Submit» name=«submit» value=«Enter information»>
</form>
<?php
} else {
// display list of employees
$result = mysql_query(«SELECT * FROM employees»,$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $myrow[«id»], $myrow[«first»],
$myrow[«last»]);
}
}
?>
</body>
</html>
В этой странице мы просто вывели в каждое поле формы соответствующее значение из базы данных, что было достаточно несложно. Теперь мы усложним программу. Добавим к ней возможность внесения отредактированных данных назад в базу. Опять таки мы прибегаем к помощи кнопки Submit, которой присваиваем имя, чтобы при втором проходе страницы проверить, какую часть кода нам надо выполнять. Также мы здесь используем слегка измененное SQL-выражение.
<html>
<body>
<?php
$db = mysql_connect(«localhost», «root»);
mysql_select_db(«mydb»,$db);
if ($id) {
if ($submit) {
$sql = «UPDATE employees SET first='$first',last='$last',address='$address',position='$position'
WHERE id=$id»;
$result = mysql_query($sql);
echo «Thank you! Information updated.\n»;
} else {
// query the DB
$sql = «SELECT * FROM employees WHERE id=$id»;
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
?>
<form method=«post» action="<?php echo $PHP_SELF?>">
<input type=hidden name=«id» value="<?php echo $myrow[«id»] ?>">
First name:<input type=«Text» name=«first» value="<?php echo $myrow[«first»] ?>"><br>
Last name:<input type=«Text» name=«last» value="<?php echo $myrow[«last»] ?>"><br>
Address:<input type=«Text» name=«address» value="<?php echo $myrow[«address»] ?>"><br>
Position:<input type=«Text» name=«position» value="<?php echo $myrow[«position»] ?>"><br>
<input type=«Submit» name=«submit» value=«Enter information»>
</form>
<?php
}
} else {
// display list of employees
$result = mysql_query(«SELECT * FROM employees»,$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $myrow[«id»], $myrow[«first»],
$myrow[«last»]);
}
}
?>
</body>
</html>
Теперь пришло время свести все вместе и создать одну супер-крутую PHP-страницу.
<html>
<body>
<?php
$db = mysql_connect(«localhost», «root»);
mysql_select_db(«mydb»,$db);
if ($submit) {
// here if no ID then adding else we're editing
if ($id) {
$sql = «UPDATE employees SET first='$first',last='$last',address='$address',position='$position'
WHERE id=$id»;
} else {
$sql = «INSERT INTO employees (first,last,address,position) VALUES
('$first','$last','$address','$position')»;
}
// run SQL against the DB
$result = mysql_query($sql);
echo «Record updated/edited!<p>»;
} elseif ($delete) {
// delete a record
$sql = «DELETE FROM employees WHERE id=$id»;
$result = mysql_query($sql);
echo "$sql Record deleted!<p>";
} else {
// this part happens if we don't press submit
if (!$id) {
// print the list if there is not editing
$result = mysql_query(«SELECT * FROM employees»,$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href=\"%s?id=%s\">%s %s</a> \n", $PHP_SELF, $myrow[«id»], $myrow[«first»],
$myrow[«last»]);
printf("<a href=\"%s?id=%s&delete=yes\">(DELETE)</a><br>", $PHP_SELF, $myrow[«id»]);
}
}
?>
<P>
<a href="<?php echo $PHP_SELF?>">ADD A RECORD</a>
<P>
<form method=«post» action="<?php echo $PHP_SELF?>">
<?php
if ($id)
{
// editing so select a record
$sql = «SELECT * FROM employees WHERE id=$id»;
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
$id = $myrow[«id»];
$first = $myrow[«first»];
$last = $myrow[«last»];
$address = $myrow[«address»];
$position = $myrow[«position»];
// print the id for editing
?>
<input type=hidden name=«id» value="<?php echo $id ?>">
<?php
}
?>
First name:<input type=«Text» name=«first» value="<?php echo $first ?>"><br>
Last name:<input type=«Text» name=«last» value="<?php echo $last ?>"><br>
Address:<input type=«Text» name=«address» value="<?php echo $address ?>"><br>
Position:<input type=«Text» name=«position» value="<?php echo $position ?>"><br>
<input type=«Submit» name=«submit» value=«Enter information»>
</form>
<?php
}
?>
</body>
</html>
На первый взгляд код выглядит сложным, однако это не так. Программа делится на три части. Первое if() выражение проверяет, была ли нажата кнопка Submit, и если была, проводится проверка, есть ли в поданных данных переменная $id. Если ее нет, значит происходит добавление новой записи. В противном случае мы редактируем уже существующую запись.
Далее мы проверяем, определена ли переменная $delete. Если да, мы удаляем запись. Обратите внимание, что в первом выражении if() мы проверяем переменную, которая была подана с помощью метода POST, а в данном if() выражении мы проверяем переменную, которая является частью данных отправленных с помощью метода GET.
Наконец, мы переходим к действию, которое будет выполняться по умолчанию: то есть выводим просто список служащих и форму. Здесь мы опять проверяем существование переменной $id. Если она существует, мы просим базу данных выдать сведения о выбранном служащем. В противном случае выводим пустую форму. Мы использовали циклы while() и выражения if(), а также целую гамму основных команд языка SQL — SELECT, INSERT, UPDATE, и DELETE. Наконец, мы рассмотрели, как можно передавать информацию от одной страницы к другой через URL с помощью ссылок и через формы.