”;
}
#Если список значений формы непуст, сохраняем эти значения
else
{
#Подсоединяемся к базе данных
my $dbh = DBI ->
connect(«DBI:mysql:database=SalesDept;host=localhost»,
«username»,»userpassword»);
if (!$dbh)
{
print «Ошибка доступа к базе данных. Приносим свои извинения”;
die();
}
#Устанавливаем кодировку CP-1251
$dbh->do(«SET NAMES cp1251»);
#Записываем данные о клиенте в таблицу Customers (Клиенты)
#param(\'CustomerName\'), param(\'CustomerPhone\') и param(\'CustomerAddress\') –
#значения, полученные из полей формы с именами
#CustomerName, CustomerPhone и CustomerAddress
my $insert = $dbh -> do(«INSERT INTO Customers (name,phone,address)
values (?, ?, ?)»,
undef,
param(\'CustomerName\'), param(\'CustomerPhone\'), param(\'CustomerAddress\'));
if(!$insert)
{
print “Ошибка доступа к базе данных. Приносим свои извинения”;
die();
}
#Отсоединяемся от базы данных
$dbh->disconnect();
#Выводим итоговое сообщение
print «
Поздравляем! Регистрация завершена успешно
”; }
Для запуска этого приложения наберите в адресной строке браузера адрес http://localhost/cgi-bin/input.pl. На экране появится веб-форма (рис. 4.22).
Рис. 4.22.Форма ввода данных
Введите в поля формы какие-либо значения и нажмите кнопку Отправить. Для обработки введенных данных вызовется тот же самый сценарий input.pl, однако на этот раз будет выполнена вторая часть сценария, следующая после ключевого слова else (см. листинг 4.11). Эта часть сценария выполняет SQL-команду INSERT. Если команда была выполнена успешно, вы увидите на странице следующее сообщение (рис. 4.23).
Рис. 4.23.Результат сохранения данных
Если же при подключении к базе данных или при выполнении SQL-команды произошла ошибка, вы увидите на странице сообщение «Ошибка доступа к базе данных. Приносим свои извинения». Чтобы получить подробную информацию об ошибке, откройте корневую папку XAMPP, в ней – папку apache, затем папку logs. В папке logs откройте с помощью программы Блокнот файл error.log. В одной из последних строк этого файла вы найдете описание ошибки.
Если же вы используете Perl-хостинг и не имеете доступа к журналу ошибок, то в обработке ошибок вам поможет следующий подраздел.
Обработка ошибок
Вы уже знаете, что при подключении к базе данных можно задать режим обработки ошибок. Режим определяется двумя параметрами:
• PrintError. Если этому параметру присвоено значение 1, то при возникновении ошибки выводится сообщение об ошибке;
• RaiseError. Если этому параметру присвоено значение 1, то при возникновении ошибки выводится сообщение об ошибке и сценарий завершает работу.
Чтобы реализовать собственный алгоритм обработки ошибок, отключите системную обработку ошибок, присвоив обоим параметрам значение 0, например:
my $dbh = DBI -> connect(«DBI:mysql:database=SalesDept;host=localhost»,
“username”,”userpassword”,
{PrintError=>0,RaiseError=>0});
Для получения информации о возникшей ошибке предназначены методы
errstr()
и
err()
Метод errstr() возвращает описание ошибки, произошедшей при выполнении последней SQL-команды, или значение undef, если команда была выполнена успешно. Метод mysql_errno() возвращает код ошибки, произошедшей при выполнении последней SQL-команды, или undef, если команда была выполнена успешно.
Значения, возвращаемые методами errstr() и err(), не рекомендуется отображать на веб-странице, чтобы не раскрывать информацию об архитектуре приложения. Вместо этого вы можете записывать сведения об ошибке в файл или отсылать по электронной почте разработчику или администратору приложения.
Приведу пример обработки возникшей ошибки – запись ошибки в файл:
my $dbh = DBI -> connect(«DBI:mysql:database=SalesDept;host=localhost»,
«username»,»userpassword»,
{PrintError=>0,RaiseError=>0});
if(!$dbh)
{
#Формируем сообщение об ошибке
my $logmessage = localtime.”
«.DBI->err().» «.DBI->errstr().»\n»;
#Открываем log-файл
my $res = open(my $log, «>>», «mysqlerror.log»);
if(!$res)
{
print “Ошибка при открытии журнала”;
die();
};
#Записываем в файл сообщение об ошибке
print $log $logmessage;
#Закрываем файл
$res = close $log;
if(!$res)
{
print “Ошибка при закрытии журнала”;
die();
}
#Выводим сообщение об ошибке на странице
print “Ошибка доступа к базе данных.
Приносим свои извинения”;
Читать дальше
Конец ознакомительного отрывка
Купить книгу