Xreferat.com » Рефераты по информатике и программированию » Этапы создания веб-приложения. Основы РНР и MySQL

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

- объединение строк... Причем все служебные операции (чтение stdin и переменных среды, Url-декодирование) уже произвел сам PHP. Удобно, не так ли?

Далее. Зачем нам два файла - HTML с формой и PHP-скрипт? Вполне достаточно одного скрипта:

Листинг form_2.html

<html>

<head>

<title>Вас приветствует PHP</title>

</head>

<body>

<?

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

echo "<h1>Привет, <b>" . $_POST['name'] ."</b>! Учите меня!</h1>";

}

?>

<form method="POST">

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

<br>

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

</form>

</body>

</html>

Из тэга form убрали атрибут action - это значит, что форма отправляется "сама на себя", т.е. на текущий URL. Это называют "postback form". С помощью оператора if проверяется, использован ли для загрузки документа метод POST, и - если это так - в следующей строке выводится приветствие. В окне браузера можно увидеть:


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


2.6. HTML-формы. Массивы $_GET и $_POST


Формы являются основным способом обмена данными между web-сервером и браузером (пользователем). Формы выполняют главную функцию web – программирования: обеспечивают взаимодействие с пользователем.


2.6.1. Особенности метода отправки формы POST

Возьмем уже знакомый по первой главе пример form_2.php и внесем в него некоторые изменения:

Листинг form_3.php

<html>

<head>

<title>Вас приветствует PHP</title>

</head>

<body>

<?

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

echo '<h1>Привет, <b>' . $_POST['name'] . '</b>!</h1>';

}

?>

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

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

<br>

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

</form>

</body>

</html>

Форма, приведенная в строках 8-12 (выделено цветом), содержит два атрибута: name и okbutton:

атрибут method указывает метод отправки формы POST;

атрибут action, указывающий URL, на который отправляется форма, заполняется значением серверной переменной PHP_SELF - адресом выполняемого в данный момент скрипта.

<?=$_SERVER['PHP_SELF']?> - сокращенная форма записи для echo: <? echo $_SERVER['PHP_SELF']; ?>.

Если в поле форма name ввести, например, значение Вася, и нажать кнопку OK, то Браузер отправит после этого на сервер POST-запрос. Тело запроса имеет вид: name=Вася&okbutton=OK. PHP при этом автоматически заполнит массив $_POST:

$_POST['name'] = 'Вася'

$_POST['okbutton'] = 'OK'

В действительности, значение "Вася" отправляется браузером в urlencode-виде; для кодировки windows-1251 это значение выглядит как %C2%E0%F1%FF. Но, поскольку PHP автоматически осуществляет необходимое декодирование, мы можем "забыть" об этой особенности - пока не придется работать с HTTP-запросами вручную.

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


Так как в теле запроса указываются только имена и значения, но не типы элементов форм, PHP понятия не имеет, соответствует $_POST['name'] строке ввода, кнопке, или списку. Но эта информация нам, в общем-то, совершенно не нужна.

Поскольку знать, что написано на кнопке submit, нам необязательно, в строке можно удалить атрибут name, сократив описание кнопки до <input type="submit" value="OK"> (листинг form_4.php). В этом случае, браузер отправит POST-запрос name=Вася.

Листинг form_4.php

<html>

<head>

<title>Вас приветствует PHP</title>

</head>

<body>

<?

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

echo '<h1>Привет, <b>' . $_POST['name'] . '</b>!</h1>';

}

?>

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

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

<br>

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

</form>

</body>

</html>


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


2.6.2. Особенности метода отправки формы GET

А теперь подобные рассуждения проделаем для метода отправки формы GET:

Листинг form_5.php

<html>

<head>

<title>Вас приветствует PHP</title>

</head>

<body>

<?

if (isset($_GET['name'])) {

echo '<h1>Привет, <b>' . $_GET['name'] . '</b>!</h1>';

}

?>

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

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

<br>

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

</form>

</body>

</html>

<html>

<body>

<?

if (isset($_GET['name'])) {

echo '<h1>Привет, <b>' . $_GET['name'] . '</b></h1>!';

}

?>

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

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

<br>

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

</form>

</body>

</html>

В строке 11 можно было бы написать <form method="GET">. Но GET - метод по умолчанию.

Браузер отправляет GET-запрос, который равносилен вводу в адресной строке адреса: адрес-сайта/имя-скрипта.php?name=Вася:


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


PHP с GET-формами поступает точно так же, как и с POST-формами, с тем отличием, что заполняет массив $_GET.

Кардинальное же отличие - в строке 7. Поскольку простой ввод адреса в строке браузера является GET-запросом, проверка if ($_SERVER['REQUEST_METHOD'] == 'GET') бессмысленна: все, что в этом случае можно выяснить, что кто-то не отправил на скрипт POST-форму. Поэтому прибегают к конструкции isset(), которая возвращает true, если переменная определена (т.е. ей было присвоено значение), и false - если переменная не определена. Если форма была заполнена - как Вы уже поняли, PHP автоматически присваивает $_GET['name'] соответствующее значение.

Способ проверки с помощью 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>

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


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


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

Изменим последний пример, чтобы пользователю не нужно было повторно заполнять поля. Для этого заполним атрибуты 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>


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


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


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


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


То есть - ничего хорошего. А если бы хитрый пользователь ввел 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>


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


Повторите опыт и убедитесь, что теперь HTML-код корректен.


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


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

Запомните - функцию 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>


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


Или, например, такая ситуация: вы хотите узнать IP-адрес посетителя. Вы помните, что соответствующая переменная хранится в массиве $_SERVER, но - вот незадача - забыли, как именно переменная называется. Опять же, вызываем phpinfo(32);, ищем в табличке свой IP-адрес и находим его - в строке _SERVER["REMOTE_ADDR"]:


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


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 и скажет, что его интересуют “Яблоки”, а после этого нажмет "Отправить запрос!",


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


то в ответ вызовется email.php, который выведет на экран примерно следующее:

Привет, Вася

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

Вас интересуют Яблоки. Информацию о них мы пошлем вам на email: vasya@pupkin


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

Теперь мы должны сдержать обещание и выслать 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


После этого следует набрать: mysql>use products;

Следующий этап настройки базы данных — создание таблиц. Это делается при помощи SQL-команды CREATE TABLE:

CREATE TABLE clients

(

name VARCHAR(25),

email VARCHAR(25),

choise VARCHAR(8)

);

Таблицы базы данных созданы:


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


Можно просмотреть перечень таблиц созданной базы данных c помощью оператора SHOW.

Можно отобразить информацию о столбцах всех таблиц c помощью оператора DESCRIBE.

Для просмотра данных, сохраненных в каждой таблице, можно применить оператор SELEKT.

Все этапы создания базы данных с таблицами отражены на экране командной строки:


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


Для общения с 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_identifierID соединения, которое получено в функции 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";

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

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>";

}

?>

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

Если Вам нужна помощь с академической работой (курсовая, контрольная, диплом, реферат и т.д.), обратитесь к нашим специалистам. Более 90000 специалистов готовы Вам помочь.
Бесплатные корректировки и доработки. Бесплатная оценка стоимости работы.

Поможем написать работу на аналогичную тему

Получить выполненную работу или консультацию специалиста по вашему учебному проекту
Нужна помощь в написании работы?
Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Пишем статьи РИНЦ, ВАК, Scopus. Помогаем в публикации. Правки вносим бесплатно.

Похожие рефераты: