Такое сообщение позволяет быстро находить трудно обнаруживаемые опечатки в именах переменных, а также предупреждает о возможных "дырах" на сайте.
Можно, конечно, поместить код с isset(). прямо в форму, но получится слишком громоздко.
Разобрались? А теперь попробуйте найти ошибку в приведенном коде. Ну, не совсем ошибку, - но недочет.
Не нашли? Я подскажу. Введите, например, в поле "имя" двойную кавычку и какой-нибудь текст, например, "123. Отправьте форму, и взгляните на исходный код полученной страницы. В четвертой строке будет что-то наподобие:
ВведитеВашеимя: <input type="text" name="name" value=""123">
То есть - ничего хорошего. А если бы хитрый пользователь ввел JavaScript-код?
Для решения этой проблемы необходимо воспользоваться функцией htmlspecialchars(), которая заменит служебные символы на их HTML-представление (например, кавычку - на "):
Листинг form_7.php
<html>
<body>
<?
$name = isset($_POST['name']) ? htmlspecialchars($_POST['name']):'';
$year = isset($_POST['year']) ? htmlspecialchars($_POST['year']) : '';
if (isset($_POST['name'], $_POST['year'])) {
if ($_POST['name'] == '') {
echo 'Укажитеимя!<br>';
} else if ($_POST['year'] < 1900 || $_POST['year'] > 2004) {
echo 'Укажите год рождения! Допустимый диапазон значений: 1900..2004<br>';
} else {
echo 'Здравствуйте, ' . $name . '!<br>';
$age = 2004 - $_POST['year'];
echo 'Вам ' . $age . ' лет<br>';
}
echo '<hr>';
}
?>
<form method="post" action="<?=$_SERVER['PHP_SELF']?>">
ВведитеВашеимя: <input type="text" name="name" value="<?=$name?>">
<br>
ВведитеВашгодрождения: <input type="text" name="year" value="<?=$year?>">
<input type="submit" value="OK">
</form>
</body>
</html>
Повторите опыт и убедитесь, что теперь HTML-код корректен.
Запомните - функцию htmlspecialchars() необходимо использовать всегда, когда выводится содержимое переменной, в которой могут присутствовать спецсимволы HTML.
Функция phpinfo() - одна из важнейших в PHP. Она выводит информацию о настройках PHP, значения всевозможных конфигурационных переменных...
Почему она упоминается в главе, посвященной формам? Потому что функция phpinfo() - удобнейшее средство отладки.
Функция phpinfo(), помимо прочего, выводит значения всех $_GET, $_POST и $_SERVER - переменных.
Так что, если переменная формы "потерялась", самый простой способ обнаружить, в чем дело - воспользоваться функцией phpinfo(). Для того, чтобы функция выводила только значения переменных (и Вам не пришлось прокручивать десяток страниц), ее следует вызвать следующим образом:
phpinfo(INFO_VARIABLES);
или - что абсолютно то же самое:
phpinfo(32);
Листингform_8.php
<html>
<body>
<form method="post" action="<?=$_SERVER['PHP_SELF']?>">
ВведитеВашеимя: <input type="text" name="name">
<input type="submit" value="OK">
</form>
<?
phpinfo(32);
?>
</body>
</html>
Или, например, такая ситуация: вы хотите узнать IP-адрес посетителя. Вы помните, что соответствующая переменная хранится в массиве $_SERVER, но - вот незадача - забыли, как именно переменная называется. Опять же, вызываем phpinfo(32);, ищем в табличке свой IP-адрес и находим его - в строке _SERVER["REMOTE_ADDR"]:
MySQL – компактный многопоточный сервер баз данных. MySQL характеризуется большой скоростью, устойчивостью и легкостью в использовании.
MySQL был разработан компанией TcX для быстрой обработки очень больших баз данных. Компания утверждает, что использует MySQL с 1996 года на сервере с более чем 40 БД, которые содержат 10.000 таблиц, из которых около 500 имеют более 7 миллионов строк (24.01.2004).
MySQL является идеальным решением для малых и средних приложений. Исходники сервера компилируются на множестве платформ. Наиболее полно возможности сервера проявляются на Unix-серверах, где есть поддержка многопоточности, что дает значительный прирост производительности.
На текущий момент MySQL все еще в стадии разработки, хотя версии 3.22 и более поздние полностью работоспособны.
MySQL-сервер является бесплатным для некоммерческого использования. Для коммерческого использования необходимо приобрести лицензию, стоимость которой составляет 190 EUR.
MySQL поддерживает язык запросов SQL в стандарте ANSI 92, и кроме этого имеет множество расширений к этому стандарту, которых нет ни в одной другой СУБД.
Краткий перечень возможностей MySQL:
● Поддерживается неограниченное количество пользователей, одновременно работающих с базой данных.
● Количество строк в таблицах может достигать 50 млн.
● Быстрое выполнение команд. Возможно MySQL самый быстрый сервер из существующих серверов.
● Простая и эффективная система безопасности.
MySQL действительно очень быстрый сервер, но для достижения этого разработчикам пришлось пожертвовать некоторыми требованиями к реляционным СУБД. ВMySQLотсутствуют:
● Поддержкавложенныхзапросов, типаSELECT * FROM table1 WHERE id IN (SELECT id FROM table2).
● Не реализована поддержка транзакций. Взамен предлагается использовать LOCK/UNLOCK TABLE.
● Нет поддержки триггеров и хранимых процедур.
По словам создателей именно эти пункты дали возможность достичь высокого быстродействия. Их реализация существенно снижает скорость сервера. Эти возможности не являются критичными при создании web-приложений, что в сочетании с высоким быстродействием и малой ценой позволило серверу приобрести большую популярность.
В этом примере показано как в PHP легко обрабатывать данные с HTML – форм.
Создадим HTML файл request.html.
Листинг request.html
<HTML>
<HEAD>
<TITLE>Запросинформации</TITLE>
<BODY>
<CENTER>
Хотите больше знать о наших товарах?
<P>
<TABLE WIDTH = 400><TR><TD align = right>
<FORM ACTION="email.php" METHOD="POST">
Вашеимя:<BR> <INPUT TYPE="text" NAME="name" SIZE="20" MAXLENGTH="30">
<P>
Ваш email:<BR> <INPUT TYPE="text" NAME="email" SIZE="20" MAXLENGTH="30">
<P>
Меняинтересуют:
<SELECT NAME="preference">
<OPTION value = "Яблоки">Яблоки
<OPTION value = "Апельсины">Апельсины
</SELECT>
<P>
<INPUT TYPE="submit" VALUE="Отправитьзапрос!">
</FORM>
</TD></TR></TABLE></CENTER>
</BODY>
</HTML>
В файле request.html указано, что данные формы будут обрабатываться файлом email.php. Приведем его содержание:
Листингemail.php
<?
/* Этот скрипт получает переменные из request.html */
PRINT "<CENTER>";
PRINT "Привет, ".$_POST['name'];
PRINT "<BR><BR>";
PRINT "Спасибо за ваш интерес.<BR><BR>";
PRINT "Вас интересуют ".$_POST['preference'].",информацию о них мы пошлем вам на email: ".$_POST['email'];
PRINT "</CENTER>";
?>
Теперь, если пользователь вызовет 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
<?php
$subj = "Запрос на информацию";
$text = "Уважаемый ".$_POST['name']."!
Спасибо за ваш интерес!
Вас интересуют ".$_POST['preference']."
Мы их распространяем бесплатно.
Обратитесь в ближайший филиал нашей компании и получите ящик этого продукта.";
mail($_POST['email'], $subj, $text);
$subj = "Поступил запрос на информацию";
$text = $_POST['name']." интересовали ".$_POST['preference']." email-адрес: ".$_POST['email'];