дшей при выполнении последней SQL-команды (или 0, если команда была выполнена успешно).
Значения, возвращаемые функциями mysql_error() и mysql_errno(), как и системные сообщения об ошибках, нежелательно отображать на веб-странице, чтобы не раскрывать информацию об архитектуре приложения. Вместо этого рекомендуется записывать сведения об ошибке в файл или отсылать по электронной почте разработчику или администратору приложения.
Чтобы отключить вывод системных сообщений об ошибках, добавьте в код приложения вызов функцииerror_reporting(0)
В случае возникновения ошибки сформируем собственное сообщение, содержащее дату и время, номер и описание ошибки. Записать это сообщение в log-файл или отправлять по электронной почте позволяет функция
error_log(«<Текст сообщения>», <Тип сообщения>,»<Адрес доставки>»)
Дополните сценарий output.php обработкой ошибок (листинг 4.6). Листинг 4.6. Обработка ошибок
Список товаров
//Отключаем вывод системных сообщений об ошибках error_reporting(0); //Соединяемся с сервером 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»); //Получаем список товаров $qresult = mysql_query(«SELECT * FROM Products»); //Проверяем результат выполнения запроса; в случае ошибки формируем // сообщение, записываем его в файл и отправляем по электронной почте 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(“Ошибка доступа к базе данных. Приносим свои извинения”); } //Очередную строку из результата запроса (информацию о товаре) // записываем в ассоциативный массив $product while ($product=mysql_fetch_assoc($qresult)) { //выводим элементы массива $product с именами description (наименование), // details (описание) и price (цена) print «\n } ?>Наименование Описание Цена \n»; {$product[«description»]} {$product[«details»]} {$product[«price»]}
Если при выполнении запроса произойдет ошибка, например окажется, что таблица Products (Товары) была удалена, то сообщение вида 2008.06.15 14:22:53 1146 Table \'salesdept.products\' doesn\'t exist будет записано в файл mysqlerror.log, находящийся в папке htdocs корневой папки XAMPP, и отправлено на адрес admin@somedomain.ru (тип сообщения 3 соответствует записи в файл, тип 1 – отправке по электронной почте). На веб-странице при этом отобразится нейтральное сообщение: «Ошибка доступа к базе данных. Приносим свои извинения».
Итак, мы завершили создание приложения, которое получает информацию из базы данных. В следующем подразделе мы рассмотрим обратный пример – приложение, которое записывает в базу данные, введенные пользователем на вебстранице.
Ввод данных в базу
В этом подразделе вы узнаете, как создать PHP-приложение для ввода данных в базу. Такие приложения обычно состоят из двух взаимосвязанных страниц. Первая страница представляет собой веб-форму, в которую пользователь может ввести данные. Вторая – собственно PHP-сценарий, обрабатывающий эти данные.
В качестве примера рассмотрим форму саморегистрации нового клиента, где клиент указывает свое имя, телефон и адрес. Создадим в папке htdocs корневой папки XAMPP файл input.php, содержащий следующий код (листинг 4.7).
Листинг 4.7. Форма ввода данныхПожалуйста, заполните следующие поля:
Ваше имя: Телефон: Адрес:
На рис. 4.13 показана веб-страница, сгенерированная этим кодом. Рис. 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. Сохранение данных в базе//Отключаем вывод системных сообщений об ошибках
error_reporting(0);
//Получаем данные из формы input.php
$phone=$_POST[«CustomerPhone»];
//Если номер телефона не введен, то связаться с клиентом невозможно.
//Предлагаем клиенту вернуться к заполнению формы
if(empty($phone) or ($phone == «(495)»))
{
print “Пожалуйста, введите номер телефона
”;
print “
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»);