формируем //

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

if(!$qresult)

{

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

«.mysql_errno().» «.mysql_error().» »;

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

error_log($err_message,1,»[email protected]»);

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).

Рис. 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-команда

INSERT INTO Customers

(name,phone,address)

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

Кроме того, в ряде случаев функция mysql_real_escape_string() позволяет обезопасить PHP-приложение от SQL-инъекций, то есть предотвратить выполнение SQL-команд, которые недобросовестный пользователь может ввести в текстовые поля на веб- странице.

Исправим сценарий save.php, добавив вызов функции mysql_real_escape_string() (листинг 4.9).

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

<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().» »;

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

error_log($err_message,1,»[email protected]»);

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

}

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

mysql_query(«SET NAMES cp1251»);

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

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

VALUES

('».mysql_real_escape_string($name).»',

'».mysql_real_escape_string($phone).»',

'».mysql_real_escape_string($address).»')»);

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

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

if(!$qresult)

{

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

«.mysql_errno().» «.mysql_error().» »;

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

error_log($err_message,1,»[email protected]»);

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

}

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

}

?>

</body>

</html>

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

Итоги

В разделе 4.1 «Интерфейс с PHP» вы познакомились с примерами PHP-приложений, использующих базу данных MySQL. Все они имеют сходную структуру:

• подключение к серверу MySQL;

• выбор базы данных;

• установка кодировки;

• выполнение SQL-команды (ввод, изменение или получение

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату