Виктор Гольцман - MySQL 5.0. Библиотека программиста стр 37.

Шрифт
Фон

В этом подразделе вы узнаете, как создать PHP-приложение для ввода данных в базу. Такие приложения обычно состоят из двух взаимосвязанных страниц. Первая страница представляет собой веб-форму, в которую пользователь может ввести данные. Вторая – собственно PHP-сценарий, обрабатывающий эти данные.

В качестве примера рассмотрим форму саморегистрации нового клиента, где клиент указывает свое имя, телефон и адрес. Создадим в папке htdocs корневой папки XAMPP файл input.php, содержащий следующий код (листинг 4.7).

Листинг 4.7. Форма ввода данных

<html>

<head>

<title>Работа с MySQL</title>

</head>

<body>

<h1>Пожалуйста, заполните следующие поля:</h1>

<!– Создаем форму для ввода данных –>

<!– Обрабатывать введенные данные будет сценарий save.php –>

<form method="post" action="save.php">

<table>

<!– Создаем поле для ввода имени заказчика –>

<tr>

<td>Ваше имя:</td>

<td><input type="text" name="CustomerName" value=""></td>

</tr>

<!– Создаем поле для ввода телефона заказчика –>

<tr>

<td>Телефон:</td>

<td><input type="text" name="CustomerPhone" value="(495)"></td>

</tr>

<!– Создаем поле для ввода адреса заказчика –>

<tr>

<td>Адрес:</td>

<td><input type="text" name="CustomerAddress" value=""></td>

</tr>

</table>

<br>

<!– Создаем кнопку для подтверждения данных –>

<input type="submit" value="Отправить">

</form>

</body>

</html>

На рис. 4.13 показана веб-страница, сгенерированная этим кодом.

Виктор Гольцман - MySQL 5.0. Библиотека программиста

Рис. 4.13. Форма ввода данных

Создавая эту форму, я указал, что при ее подтверждении (то есть при нажатии кнопки Отправить) введенные пользователем значения полей будут переданы в сценарий save.php по методу POST. В сценарии save.php мы будем использовать уже известные нам PHP-функции:

• функции подключения к серверу MySQL и выбора базы данных, которые мы рассматривали в подразделе "Подготовительные действия";

• функцию mysql_query(), которая обеспечивает выполнение SQL-команды на сервере MySQL. Если SQL-команда не предполагает получение данных из базы (такими командами являются, например, команды INSERT, UPDATE, DELETE), то функция возвращает значение TRUE в случае успешного выполнения команды и значение FALSE в случае ошибки;

• функции обработки ошибок, о которых вы узнали в подразделе "Обработка ошибок".

Итак, создадим в папке htdocs корневой папки XAMPP файл save.php, содержащий следующий код (листинг 4.8).

Листинг 4.8. Сохранение данных в базе

<html>

<head>

<title>Работа с MySQL</title>

</head>

<body>

<?php

//Отключаем вывод системных сообщений об ошибках

error_reporting(0);

//Получаем данные из формы input.php

$phone=$_POST["CustomerPhone"];

//Если номер телефона не введен, то связаться с клиентом невозможно.

//Предлагаем клиенту вернуться к заполнению формы

if(empty($phone) or ($phone == "(495)"))

{

print "<h3>Пожалуйста, введите номер телефона</h3>";

print "<input type=\'button\' value=\'Вернуться к редактированию данных\'

onClick=\'history.go(-1)\'";

}

//Если номер телефона введен, продолжаем обработку данных

else

{

//Получаем из формы имя и адрес клиента

$name=$_POST["CustomerName"];

$address=$_POST["CustomerAddress"];

//Соединяемся с сервером MySQL

$connection = mysql_connect("localhost","username","userpassword");

if(!$connection) die("Ошибка доступа к базе данных.

Приносим свои извинения");

//Выбираем базу данных SalesDept (Отдел продаж)

//В случае ошибки формируем сообщение, записываем его в файл

//и отправляем по электронной почте

if(!mysql_select_db("SalesDept"))

{

$err_message=date("Y.m.d H:i:s")."

".mysql_errno()." ".mysql_error()."\r\n";

error_log($err_message,3,"/mysqlerror.log");

error_log($err_message,1,"admin@somedomain.ru");

die("Ошибка доступа к базе данных. Приносим свои извинения");

}

//Устанавливаем кодировку CP-1251

mysql_query("SET NAMES cp1251");

//Записываем данные о заказчике в таблицу Customers (Клиенты)

$qresult = mysql_query("INSERT INTO Customers (name,phone,address)

VALUES

(\'".$name."\',\'".$phone."\',\'".$address."\')");

//Проверяем результат выполнения команды; в случае ошибки формируем //

сообщение, записываем его в файл и отправляем по электронной почте

if(!$qresult)

{

$err_message=date("Y.m.d H:i:s")."

".mysql_errno()." ".mysql_error()."\r\n";

error_log($err_message,3,"/mysqlerror.log");

error_log($err_message,1,"admin@somedomain.ru");

die("Ошибка при сохранении данных. Приносим свои извинения");

}

print "<h3>Поздравляем! Регистрация завершена успешно</h3>";

}

?>

</body>

</html>

Если, например, в форме были введены значения полей Иванов, 157400 и Москва, а/я 255, то вызов функции

$qresult = mysql_query("INSERT INTO Customers

(name,phone,address)

VALUES

(\'".$name."\',\'".$phone."\',\'".$address."\')");

после подстановки значений переменных $name, $phone и $address будет выглядеть следующим образом:

$qresult = mysql_query("INSERT INTO Customers

(name,phone,address)

VALUES

(\'Иванов\',\'157400\',\'Москва, а/я 225\')");

Если команда INSERT была выполнена успешно, то сценарий save.php выведет на странице соответствующее сообщение (рис. 4.14).

Виктор Гольцман - MySQL 5.0. Библиотека программиста

Рис. 4.14. Результат сохранения данных

Мы почти завершили создание приложения, которое записывает информацию в базу данных. Однако нужно сделать важное дополнение, связанное с некорректным сохранением значений, содержащих спецсимволы. Предположим, например, что пользователь вводит на веб-странице в поле Ваше имя значение д\'Артаньян. Тогда вызов PHP-функции

mysql_query("INSERT INTO Customers (name,phone,address)

VALUES

(\'".$name."\',\'".$phone."\',\'".$address."\')");

приведет к попытке выполнения некорректной SQL-команды

INSERT INTO Customers

(name,phone,address)

VALUES (\'д\'Артаньян\',\'Телефон\',\'Адрес\');

В результате произойдет ошибка и сохранить в базе введенные пользователем данные не удастся. Избежать этой ошибки можно с помощью функции

mysql_real_escape_string("<Строка>"[, <Указатель на соединение>]);

Функция mysql_real_escape_string() экранирует строку, полученную в качестве аргумента, то есть перед каждым специальным символом в этой строке (например, перед одинарной кавычкой) помещает обратную косую черту. Например, если в качестве аргумента передана строка д\'Артаньян, то функция возвращает значение д\\'Артаньян. Таким образом, при вызове PHP-функции

mysql_query("INSERT INTO Customers (name,phone,address)

VALUES

(\'".mysql_real_escape_string($name)."\',

\'".mysql_real_escape_string($phone)."\',

\'".mysql_real_escape_string($address)."\')");

будет выполнена корректная SQL-команда

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке

Скачать книгу

Если нет возможности читать онлайн, скачайте книгу файлом для электронной книжки и читайте офлайн.

fb2.zip txt txt.zip rtf.zip a4.pdf a6.pdf mobi.prc epub