на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Этапы создания веб-приложения. Основы РНР и MySQL
пособ проверки с помощью isset() - универсальный, его можно было бы использовать и для POST-формы. Более того, он предпочтительнее, так как позволяет выяснить, какие именно поля формы заполнены.

Во многих старых книгах и статьях утверждается, что:

1. Данные как из GET, так и из POST-форм попадают непосредственно в переменные (в нашем случае - $name), причем POST-данные приоритетнее, т.е. "затирают" GET-данные;

2. Данные GET и POST-форм хранятся соответственно в массивах $HTTP_GET_VARS и $HTTP_POST_VARS.

Эта информация устарела. Запомните этот момент, чтобы не попасть впросак со старыми скриптами или книгами.

Немного более сложный пример.

Листинг form_6.php

<html>

<body>

<?

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 'Здравствуйте, ' . $_POST['name'] . '!<br>';

$age = 2004 - $_POST['year'];

echo 'Вам ' . $age . ' лет<br>';

}

echo '<hr>';

}

?>

<form method="post" action="<?=$_SERVER['PHP_SELF']?>">

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

<br>

Введите Ваш год рождения: <input type="text" name="year">

<input type="submit" value="OK">

</form>

</body>

</html>

Никаких новых приемов здесь не используется. Разберитесь, выполните код, попробуйте модифицировать...

Изменим последний пример, чтобы пользователю не нужно было повторно заполнять поля. Для этого заполним атрибуты value элементов формы только что введенными значениями.

Листинг form_7.php

<html>

<body>

<?

$name = isset($_POST['name']) ? $_POST['name'] : '';

$year = isset($_POST['year']) ? $_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 'Здравствуйте, ' . $_POST['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>

Несколько непонятными могут оказаться строки 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 и не написать:

Введите Ваше имя: <input type="text" name="name" value="<?=$_POST['name']?>"><br>

Введите Ваш год рождения: <input type="text" name="year" value="<?=$_POST['year']?>">

Дело в том, что, если эти POST-переменные не определены (а так и будет, если форму еще не заполнили), то PHP выдаст предупреждения об использовании неинициализированных переменных (причем, вполне обоснованно).

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

Можно, конечно, поместить код с 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'];

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.

int mysql_connect(string hostname, string username, string password);

Параметры функции:

Hostname - имя хоста, на котором находится база данных.

Username - имя пользователя.

Password - пароль пользователя.

Функция возвращает параметр типа int, который больше 0, если соединение прошло успешно, и равен 0 в противном случае.

2. Выбрать базу данных для работы.

int mysql_select_db(string database_name, int link_identifier);

Параметры функции:

Database_name - имя базы данных.

link_identifier - ID соединения, которое получено в функции mysql_connect. (параметр необязательный, если он не указывается, то используется ID от последнего вызова mysql_connect)

Функция возвращает значение true или false

3. Функция выполняет запрос к базе данных.

int mysql_query(string query, int link_identifier);

Параметры функции:

Query - строка, содержащая запрос

link_identifier - см. предыдущую функцию.

Функция возвращает ID результата или 0, если произошла ошибка.

4. Функция закрывает соединение с MySQL.

int mysql_close(int link_identifier);

Параметры функции:

link_identifier - см. выше.

Функция возвращает значение true или false

Теперь файл email.php будет иметь следующий вид:

Листинг email_1.php

<?

/* Этот скрипт получает переменные из request.html */

/* Переменные для соединения с базой данных */

$hostname = "localhost";

$username = "myusername";

$password = "mypassword";

$dbName = "products";

/* Таблица MySQL, в которой хранятся данные */

$userstable = "clients";

/* email администратора */

$adminaddress = "administration@me.com";

/* создать соединение */

mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");

/* выбрать базу данных. Если произойдет ошибка - вывести ее */

mysql_select_db($dbName) or die(mysql_error());

echo "<CENTER>";

echo "Привет, ".$_POST['name'];

echo "<BR><BR>";

echo "Спасибо за ваш интерес.<BR><BR>";

echo "Вас интересуют ".$_POST['preference'].". Информацию о них мы пошлем вам на email: ".$_POST['email'];

echo "</CENTER>";

/* Отправляем email-ы */

$subj = "Запрос на информацию";

$text = "Уважаемый ".$_POST['name']."!

Спасибо за ваш интерес!

Вас интересуют ".$_POST['preference']."

Мы их распространяем бесплатно.

Обратитесь в ближайший филиал нашей компании и получите ящик этого продукта.";

mail($_POST['email'], $subj, $text);

$subj="Поступил запрос на информацию";

$text = $_POST['name']." интересовали ".$_POST['preference']." email-адрес: ".$_POST['email'];

mail($adminaddress, $subj, $text);

/* составить запрос для вставки информации о клиенте в таблицу */

$query = "INSERT INTO $userstable VALUES('$name','$email', '$preference')";

/* Выполнить запрос. Если произойдет ошибка - вывести ее. */

mysql_query($query) or die(mysql_error());

echo "Информация о вас занесена в базу данных.";

/* Закрыть соединение */

mysql_close();

?>

Вот так можно работать с базой данных в PHP. Теперь кроме письменных уведомлений, информация о клиенте и его интересах будет заноситься в таблицу MySQL.

3.2.3. Получение (извлечение) данных из базы данных MySQL

После занесения данных, нас иногда будет интересовать вопрос: так кого же из наших клиентов интересует товар “Яблоки”

Напишем скрипт apple.php.

Листинг apple.php

<?

/* Скрипт показывает клиентов, которые яблоки любят больше чем апельсины */

/* Переменные для соединения с базой данных */

$hostname = "localhost";

$username = "myusername";

$password = "mypassword";

$dbName = "products";

/* Таблица MySQL, в которой хранятся данные */

$userstable = "clients";

/* создать соединение */

mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");

/* выбрать базу данных. Если произойдет ошибка - вывести ее */

mysql_select_db($dbName) or die(mysql_error());

/* составить запрос, который выберет всех клиентов - яблочников */

$query = "SELECT * FROM $userstable WHERE choise = 'Яблоки'";

/* Выполнить запрос. Если произойдет ошибка - вывести ее. */

$res = mysql_query($query) or die(mysql_error());

/* Как много нашлось таких */

$number = mysql_num_rows($res);

/* Напечатать всех в красивом виде*/

If ($number == 0) {

echo "<CENTER><P>Любителей яблок нет</CENTER>";

} else {

echo "<CENTER><P>Количество любителей яблок: $number<BR><BR>";

/* Получать по одной строке из таблицы в массив $row, пока строки не кончатся */

while ($row=mysql_fetch_array($res)) {

echo "Клиент ".$row['name']." любит Яблоки.<BR>";

echo "Его Email: ".$row['email'];

echo "<BR><BR>";

}

echo "</CENTER>";

}

?>

Вот и все, продукт практически готов.

Страницы: 1, 2, 3, 4



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.