49508 (597449), страница 4
Текст из файла (страница 4)
if ($_POST['name'] == '') {
echo 'Укажите имя!
';
} else if ($_POST['year'] 2004) {
echo 'Укажите год рождения! Допустимый диапазон значений: 1900..2004
';
} else {
echo 'Здравствуйте, ' . $_POST['name'] . '!
';
$age = 2004 - $_POST['year'];
echo 'Вам ' . $age . ' лет
';
}
echo '
';
}
?>
Введите Ваше имя:
Введите Ваш год рождения:
Никаких новых приемов здесь не используется. Разберитесь, выполните код, попробуйте модифицировать...
Изменим последний пример, чтобы пользователю не нужно было повторно заполнять поля. Для этого заполним атрибуты value элементов формы только что введенными значениями.
Листинг form_7.php
$name = isset($_POST['name']) ? $_POST['name'] : '';
$year = isset($_POST['year']) ? $_POST['year'] : '';
if (isset($_POST['name'], $_POST['year'])) {
if ($_POST['name'] == '') {
echo 'Укажите имя!
';
} else if ($_POST['year'] 2004) {
echo 'Укажите год рождения! Допустимый диапазон значений: 1900..2004
';
} else {
echo 'Здравствуйте, ' . $_POST['name'] . '!
';
$age = 2004 - $_POST['year'];
echo 'Вам ' . $age . ' лет
';
}
echo '
';
}
?>
Введите Ваше имя:
Введите Ваш год рождения:
Несколько непонятными могут оказаться строки 4 и 5. Все очень просто: X = A ? B : C - сокращенная запись условия if (A) X=B else X=C. Строку 4 можно было бы записать так:
if (isset($_POST['name']))
$name = $_POST['name'];
else
$name = '';
Используемая в строках 21 и 23 конструкция =$foo ?> - и того проще: это сокращение для echo $foo ?>.
Может возникнуть вопрос - почему бы не выбросить строки 4-5 и не написать:
Введите Ваше имя:
Введите Ваш год рождения:
Дело в том, что, если эти POST-переменные не определены (а так и будет, если форму еще не заполнили), то PHP выдаст предупреждения об использовании неинициализированных переменных (причем, вполне обоснованно).
Такое сообщение позволяет быстро находить трудно обнаруживаемые опечатки в именах переменных, а также предупреждает о возможных "дырах" на сайте.
Можно, конечно, поместить код с isset(). прямо в форму, но получится слишком громоздко.
Разобрались? А теперь попробуйте найти ошибку в приведенном коде. Ну, не совсем ошибку, - но недочет.
2.7. Функция htmlspecialchars()
Не нашли? Я подскажу. Введите, например, в поле "имя" двойную кавычку и какой-нибудь текст, например, "123. Отправьте форму, и взгляните на исходный код полученной страницы. В четвертой строке будет что-то наподобие:
Введите Ваше имя:
То есть - ничего хорошего. А если бы хитрый пользователь ввел JavaScript-код?
Для решения этой проблемы необходимо воспользоваться функцией htmlspecialchars(), которая заменит служебные символы на их HTML-представление (например, кавычку - на "):
Листинг form_7.php
$name = isset($_POST['name']) ? htmlspecialchars($_POST['name']):'';
$year = isset($_POST['year']) ? htmlspecialchars($_POST['year']) : '';
if (isset($_POST['name'], $_POST['year'])) {
if ($_POST['name'] == '') {
echo 'Укажите имя!
';
} else if ($_POST['year'] 2004) {
echo 'Укажите год рождения! Допустимый диапазон значений: 1900..2004
';
} else {
echo 'Здравствуйте, ' . $name . '!
';
$age = 2004 - $_POST['year'];
echo 'Вам ' . $age . ' лет
';
}
echo '
';
}
?>
Введите Ваше имя:
Введите Ваш год рождения:
Повторите опыт и убедитесь, что теперь HTML-код корректен.
Запомните - функцию htmlspecialchars() необходимо использовать всегда, когда выводится содержимое переменной, в которой могут присутствовать спецсимволы HTML.
2.8. Применение функции phpinfo() для отладки
Функция phpinfo() - одна из важнейших в PHP. Она выводит информацию о настройках PHP, значения всевозможных конфигурационных переменных...
Почему она упоминается в главе, посвященной формам? Потому что функция phpinfo() - удобнейшее средство отладки.
Функция phpinfo(), помимо прочего, выводит значения всех $_GET, $_POST и $_SERVER - переменных.
Так что, если переменная формы "потерялась", самый простой способ обнаружить, в чем дело - воспользоваться функцией phpinfo(). Для того, чтобы функция выводила только значения переменных (и Вам не пришлось прокручивать десяток страниц), ее следует вызвать следующим образом:
phpinfo(INFO_VARIABLES);
или - что абсолютно то же самое:
phpinfo(32);
Листинг form_8.php
Введите Ваше имя:
phpinfo(32);
?>
Или, например, такая ситуация: вы хотите узнать IP-адрес посетителя. Вы помните, что соответствующая переменная хранится в массиве $_SERVER, но - вот незадача - забыли, как именно переменная называется. Опять же, вызываем phpinfo(32);, ищем в табличке свой IP-адрес и находим его - в строке _SERVER["REMOTE_ADDR"]:
3. Что такое MySQL
MySQL – компактный многопоточный сервер баз данных. MySQL характеризуется большой скоростью, устойчивостью и легкостью в использовании.
MySQL был разработан компанией TcX для быстрой обработки очень больших баз данных. Компания утверждает, что использует MySQL с 1996 года на сервере с более чем 40 БД, которые содержат 10.000 таблиц, из которых около 500 имеют более 7 миллионов строк (24.01.2004).
MySQL является идеальным решением для малых и средних приложений. Исходники сервера компилируются на множестве платформ. Наиболее полно возможности сервера проявляются на Unix-серверах, где есть поддержка многопоточности, что дает значительный прирост производительности.
На текущий момент MySQL все еще в стадии разработки, хотя версии 3.22 и более поздние полностью работоспособны.
MySQL-сервер является бесплатным для некоммерческого использования. Для коммерческого использования необходимо приобрести лицензию, стоимость которой составляет 190 EUR.
3.1. Возможности MySQL
MySQL поддерживает язык запросов SQL в стандарте ANSI 92, и кроме этого имеет множество расширений к этому стандарту, которых нет ни в одной другой СУБД.
Краткий перечень возможностей MySQL:
● Поддерживается неограниченное количество пользователей, одновременно работающих с базой данных.
● Количество строк в таблицах может достигать 50 млн.
● Быстрое выполнение команд. Возможно MySQL самый быстрый сервер из существующих серверов.
● Простая и эффективная система безопасности.
MySQL действительно очень быстрый сервер, но для достижения этого разработчикам пришлось пожертвовать некоторыми требованиями к реляционным СУБД. В MySQL отсутствуют:
● Поддержка вложенных запросов, типа SELECT * FROM table1 WHERE id IN (SELECT id FROM table2).
● Не реализована поддержка транзакций. Взамен предлагается использовать LOCK/UNLOCK TABLE.
● Нет поддержки триггеров и хранимых процедур.
По словам создателей именно эти пункты дали возможность достичь высокого быстродействия. Их реализация существенно снижает скорость сервера. Эти возможности не являются критичными при создании web-приложений, что в сочетании с высоким быстродействием и малой ценой позволило серверу приобрести большую популярность.
3.2. Примеры использования PHP совместно с MySQL
3.2.1. Работа с формами
В этом примере показано как в PHP легко обрабатывать данные с HTML – форм.
Создадим HTML файл request.html.
Листинг request.html
<HTML>
Запрос информации
Хотите больше знать о наших товарах?
Ваше имя:
Ваш email:
Меня интересуют:
Яблоки
Апельсины
В файле request.html указано, что данные формы будут обрабатываться файлом email.php. Приведем его содержание:
Листинг email.php
/* Этот скрипт получает переменные из request.html */
PRINT "<CENTER>";
PRINT "Привет, ".$_POST['name'];
PRINT "
";
PRINT "Спасибо за ваш интерес.
";
PRINT "Вас интересуют ".$_POST['preference'].",информацию о них мы пошлем вам на email: ".$_POST['email'];
PRINT "";
?>
Теперь, если пользователь вызовет request.html и наберет в форме имя “Вася”, email: vasya@pupkin.com и скажет, что его интересуют “Яблоки”, а после этого нажмет "Отправить запрос!",
то в ответ вызовется email.php, который выведет на экран примерно следующее:
Привет, Вася
Спасибо за ваш интерес.
Вас интересуют Яблоки. Информацию о них мы пошлем вам на email: vasya@pupkin.com
Теперь мы должны сдержать обещание и выслать email.
Для этого в PHP есть функция MAIL.
Синтаксис функция MAIL:
void mail(string to, string subject, string message, string add_headers);
to – email адрес получателя.
subject – тема письма.
message – собственно текст сообщения.
add_headers – другие параметры заголовка письма (необязательный параметр).
Допишем в конец файла email.php следующий код:
Листинг добавочного кода для email.php
$subj = "Запрос на информацию";
$text = "Уважаемый ".$_POST['name']."!
Спасибо за ваш интерес!
Вас интересуют ".$_POST['preference']."
Мы их распространяем бесплатно.
Обратитесь в ближайший филиал нашей компании и получите ящик этого продукта.";
mail($_POST['email'], $subj, $text);
$subj = "Поступил запрос на информацию";
$text = $_POST['name']." интересовали ".$_POST['preference']." email-адрес: ".$_POST['email'];
mail($adminaddress, $subj, $text);
?>
Вот теперь пользователь будет получать письмо с более подробной информацией о наших товарах. Также письмо получит и администратор сайта.
Когда интересующихся нашими товарами станет очень много, мы захотим их как-то упорядочить и хранить информацию о них в базе данных. Об этом в следующем примере.
3.2.2. Сохранение данных в базе данных MySQL
Для начала создаем базу данных products и таблицу clients.
Чтобы создать в системе базу данных, нужно войти в систему MySQL и ввести в командной строке MySQL: mysql> create database products;
База данных создана:
После этого следует набрать: mysql>use products;
Следующий этап настройки базы данных — создание таблиц. Это делается при помощи SQL-команды CREATE TABLE:
CREATE TABLE clients
(
name VARCHAR(25),
email VARCHAR(25),
choise VARCHAR(8)
);
Таблицы базы данных созданы:
Можно просмотреть перечень таблиц созданной базы данных c помощью оператора SHOW.
Можно отобразить информацию о столбцах всех таблиц c помощью оператора DESCRIBE.
Для просмотра данных, сохраненных в каждой таблице, можно применить оператор SELEKT.
Все этапы создания базы данных с таблицами отражены на экране командной строки:
Для общения с MySQL из PHP понадобятся следующие функции:
1. Создать соединение с MySQL.