Смекни!
smekni.com

Этапы создания веб-приложения. Основы РНР и MySQL (стр. 5 из 6)

Такое сообщение позволяет быстро находить трудно обнаруживаемые опечатки в именах переменных, а также предупреждает о возможных "дырах" на сайте.

Можно, конечно, поместить код с isset(). прямо в форму, но получится слишком громоздко.

Разобрались? А теперь попробуйте найти ошибку в приведенном коде. Ну, не совсем ошибку, - но недочет.

2.7. Функция htmlspecialchars()

Не нашли? Я подскажу. Введите, например, в поле "имя" двойную кавычку и какой-нибудь текст, например, "123. Отправьте форму, и взгляните на исходный код полученной страницы. В четвертой строке будет что-то наподобие:

ВведитеВашеимя: <input type="text" name="name" value=""123">


То есть - ничего хорошего. А если бы хитрый пользователь ввел JavaScript-код?

Для решения этой проблемы необходимо воспользоваться функцией htmlspecialchars(), которая заменит служебные символы на их HTML-представление (например, кавычку - на &quot;):

Листинг 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.

2.8. Применение функции phpinfo() для отладки

Функция 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"]:


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>

<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'];