Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CIT / LabRab04.doc
Скачиваний:
33
Добавлен:
11.02.2019
Размер:
217.6 Кб
Скачать

2.3 Создание телефонного справочника

При создании телефонного справочника необходимо создать следующие страницы:

  • cdb.php - HTML-страница с добавленным в нее php-скриптом, создающим базу данных и таблицу с полями.

  • add_rec.php - HTML-страница с добавленным в нее php-скриптом, который генерирует SQL запрос для создания в таблице новой записи.

  • find.php - HTML-страница с добавленным в нее php-скриптом, который генерирует SQL запрос для поиска в таблице записей.

Создадим HTML страницу cdb.php. В ней мы создадим нашу базу данных, не прибегая к консоли mysql или других клиентов. Этот метод удобен для удаленного размещения. Создайте файл с именем cdb.php и поместите в него код, который приведен в примере 2.2.

Пример 2.2. Страница с php-скриптом, создающим базу данных и таблицу с полями

<html>

<head>

<title>Создаем базу данных</title>

</head>

<body>

<?

mysql_connect("localhost","root");

mysql_query("CREATE DATABASE PhoneDB");

@mysql("PhoneDB", "create table MainTable(Phone text, Sname text, Street text, Home text)");

mysql_close();

echo "<br><br><div align=center><font face=Arial size=2><b>База PhoneDB была успешно создана</b></font></div>";

?>

</body>

</html>

Этот файл предназначен для создания БД PhoneDB и таблицы MainTable в ней.

В адресной строке браузера наберите адрес http://test1.ru/сdb.php и если все сделано без ошибок и произошло удачное соединение с mysql, вы увидите сообщение “База PhoneDB была успешно создана”.

Теперь более детально о том, что происходит в этом файле при его выполнении.

Команда mysql_connect(localhost); предназначена для создания связи с mysql сервером по адресу localhost. В настройках Apache Web Server сервером будет указан как раз localhost.

Команда mysql_create_db("PhoneDB"); создает в указанном соединении БД PhoneDB

Команда @mysql("PhoneDB", "create table MainTable(Phone text, Sname text, Street text, Home text)"); создает по указанному адресу, в данном случае это БД PhoneDB, таблицу с полями “ Phone text, Sname text, Street text, Home text ”. Формат всех записей текстовый.

Команда mysql_close(); закрывает текущее mysql соединение.

Далее создадим HTML страницу add_rec.php, в которой мы будем добавлять записи в нашу телефонную базу. В созданный файл поместите код, приведенный в примере 2.3.

Пример 2.3. Страница для ввода информации в справочник

<html>

<head>

<title>Добро пожаловать в БД "Телефонная книга"</title>

</head>

<body>

<?

Error_Reporting(E_ALL & ~E_NOTICE);

If($cmdPost!=""){

$strSost = 'Данные в память отправленны';

$strSQL = "insert into MainTable(Phone, Sname, Street, Home) values('".$txtPhone."'".", '".$txtSname."', "."'".$txtStreet."', '".$txtHome."')";

mysql_connect("localhost","root");

mysql_select_db("PhoneDB");

mysql_db_query("PhoneDB", $strSQL);

mysql_close();

$strSost = $strSost."<br>Адресат по фамилии <b>$txtSname</b> с номером телефона <b>$txtPhone</b>, проживающий по адресу улица <b>$txtStreet</b> дом <b>$txtHome</b>, добавлен.";

$txtPhone = '';

$txtSname = '';

$txtStreet = '';

$txtHome = '';

}

else {

$strSost = 'В памяти ничего нет';

}

If($cmdClear!=""){

$txtPhone = '';

$txtSname = '';

$txtStreet = '';

$txtHome = '';

}

?>

<div align=center><font face=Arial size=3><b>База Данных "Телефонная книга"</b></font><br>

<font face=Arial size=2>Введите данные для добавления</font><br></div>

<form action="add_rec.php" method=post>

<table border=1 align=center bordercolor=000000>

<tbody>

<tr>

<td align=center valign=middle><font face=Arial size=2><b>НОМЕР ТЕЛЕФОНА</b></font></td>

<td align=center valign=middle><font face=Arial size=2><b>ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО</b></font></td>

<td align=center valign=middle><font face=Arial size=2><b>УЛИЦА</b></font> </td>

<td align=center valign=middle><font face=Arial size=2><b>ДОМ</b></font> </td>

</tr>

<tr>

<td align=center valign=middle><input type=text name=txtPhone size=6 maxlength=6 value="<? echo $txtPhone; ?>"></td>

<td align=center valign=middle><input type=text name=txtSname size=50 maxlength=50 value="<? echo $txtSname; ?>"></td>

<td align=center valign=middle><input type=text name=txtStreet size=25 maxlength=25 value="<? echo $txtStreet; ?>"></td>

<td align=center valign=middle><input type=text name=txtHome size=3 maxlength=3 value="<? echo $txtHome; ?>"></td>

</tr>

</tbody>

</table>

<br><br>

<div align=center>

<input type=submit name=cmdPost value="Отправить">

<input type=submit name=cmdClear value="Очистить"><br><br>

<font face=Arial size=2><b>Текущее состояние:</b> <? echo $strSost; ?></font>

</div>

</form>

</body>

</html>

Этот файл предназначен для добавления записей в таблицу MainTable.

Теперь подробнее о происходящем в этом файле.

В основе скрипта лежат два условия. Первое проверяет нажата ли кнопка Отправить.

If($cmdPost!=""){} Второе проверяет нажата ли кнопка Отчистить If($cmdClear!=""){}

При выполнении первого условия:

- Формируется переменная для создания SQL запроса, в котором содержатся значения переменных полей в HTML странице

$strSQL = "insert into MainTable(Phone, Sname, Street, Home) values('".$txtPhone."'".", '".$txtSname."', "."'".$txtStreet."', '".$txtHome."')";

- Открывается mySQL соеденение с сервером localhost

mysql_connect(localhost);

- Выбирается БД PhoneDB

mysql_select_db("PhoneDB");

- Формируется SQL запрос, где в качестве параметров идут ИМЯ БД, СТРОКА С SQL ЗАПРОСОМ

mysql_db_query("PhoneDB", $strSQL);

- Закрывается текущее mySQL соеденение

mysql_close();

- Для дополнительного уточнения, формируется переменная, в которой отображаются данные, переданные в таблицу

$strSost = $strSost."<br>Адресат по фамилии <b>$txtSname</b> с номером телефона <b>$txtPhone</b>, проживающий по адресу улица <b>$txtStreet</b> дом <b>$txtHome</b>, добавлен.";

- Для удобства работы также обнуляются значения переменных

$txtPhone = '';

$txtSname = '';

$txtStreet = '';

$txtHome = '';

В листинге страницы встречаются такие строчки как <? echo $txtSname; ?>, что означает выполнение команды echo в том месте где присутствует эта строчка. Результатом этой команды будет отображение содержимого переменной $txtSname

- При выполнении второго условия. Нажата кнопка Очистить. Обнуляются значения переменных

$txtPhone = '';

$txtSname = '';

$txtStreet = '';

$txtHome = '';

- В полях Номер телефона, Фамилия Имя Отчество, Улица, Дом исчезают набранный ранее текст, так как в поле Значение присутствует скрипт, например <? echo $txtSname; ?>, что означает - в поле содержится значение этой переменной.

Теперь создадим HTML-страницу find.php. В этом файле пользователь сможет искать в базе данных информацию. Создайте find.php и поместите туда код, приведенный в примере 2.4.

Пример 2.4. Страница для поиска информации в справочнике

<HTML>

<HEAD>

<TITLE>Добро пожаловать в БД "Телефонная книга"</TITLE>

</HEAD>

<BODY>

<DIV align=center><font face=Arial size=3><B>База Данных "Телефонная книга"</B></FONT><BR>

<FONT face=Arial size=2>Введите данные для поиска</FONT><BR>

</DIV>

<FORM action="find.php" method=post>

<TABLE border=1 align=center bordercolor=000000>

<TBODY>

<TR>

<TD align=center valign=middle><FONT face=Arial size=2><B>НОМЕР ТЕЛЕФОНА</B> </FONT></TD>

<TD align=center valign=middle><FONT face=Arial size=2><B>ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО</B></FONT></TD>

<TD align=center valign=middle><FONT face=Arial size=2><B>УЛИЦА</B></FONT> </TD>

<TD align=center valign=middle><FONT face=Arial size=2><B>ДОМ</B></FONT> </TD>

</TR>

<TR>

<TD align=center valign=middle><INPUT type=text name=txtPhone size=6 maxlength=6 value=""></TD>

<TD align=center valign=middle><input type=text name=txtSname size=50 maxlength=50 value=""></TD>

<TD align=center valign=middle><input type=text name=txtStreet size=25 maxlength=25 value=""></TD>

<TD align=center valign=middle><input type=text name=txtHome size=3 maxlength=3 value=""></TD>

</TR>

</TBODY>

</TABLE>

<BR><BR>

<DIV align=center>

<INPUT type=submit name=cmdPost value="Искать">

<INPUT type=submit name=cmdClear value="Очистить"><BR><BR>

<?

Error_Reporting(E_ALL & ~E_NOTICE);

If($cmdPost!=""){

$strSQL = "select * from MainTable ";

$strSQLW ="";

If ($txtPhone!=""){

$strSQLW = $strSQLW." (Phone Like '".$txtPhone."%') ";

}

If ($txtSname!=""){

if ($strSQLW!="") {

$strSQLW=$strSQLW." and ";

}

$strSQLW = $strSQLW." (Sname Like '".$txtSname."%') ";

}

If ($txtStreet!=""){

if ($strSQLW!="") {

$strSQLW=$strSQLW." and ";

}

$strSQLW = $strSQLW." (Street Like '".$txtStreet."%') ";

}

If ($txtHome!=""){

if ($strSQLW!="") {

$strSQLW=$strSQLW." and ";

}

$strSQLW = $strSQLW." (Home like'".$txtHome."%') ";

}

If ($strSQLW!=""){

$strSQL = $strSQL." where ".$strSQLW;

}

mysql_connect(localhost);

mysql_select_db("PhoneDB");

$r=mysql_db_query("PhoneDB", $strSQL);

if (mysql_numrows($r)>0){

echo "<div align=center><font face=Arial size=2>В результате поиска найдена(ы) запись(и):</font>\n</div>";

}

else{

echo "<div align=center><font face=Arial size=2>В результате поиска запись(и) не найден(ы):</font>\n</div>";

}

for($i=0; $i<mysql_numrows($r); $i++)

{ $f=mysql_fetch_array($r);

echo "<div align=center><font face=Arial size=2><b>$f[Sname]</b> проживающий по адресу <b>$f[Street] $f[Home]</b>, номер телефона <b>$f[Phone]</b>.<br><br>\n</div>";

}

mysql_close();

$strSost = $strSQL;

$txtPhone = '';

$txtSname = '';

$txtStreet = '';

$txtHome = '';

}

else {

$strSost = 'В памяти ничего нет';

}

If($cmdClear!=""){

$txtPhone = '';

$txtSname = '';

$txtStreet = '';

$txtHome = '';

}

?>

<!--<FONT face=Arial size=2><B>Текущее состояние:</B> <?// echo $strSost; ?></FONT>-->

</DIV>

</FORM>

</BODY>

</HTML>

Скрипт в этом файле устроен точно так же, как и в предыдущем. Только существуют небольшие различия, которые мы сейчас рассмотрим. Эти различия проявляются при формировании запроса и выводе записей.

- При выполнении условия “Нажата кнопка Поиск”, начинает формироваться запрос в переменную $strSQL

- Выполняется запрос с передачей идентификатора в переменную $r

$r=mysql_db_query("PhoneDB", $strSQL);

- Для вывода полученных данных на экран используется цикл for. От переменной $i до момента когда $i<mysql_numrows($r), с увеличением $i на единицу после каждого шага. Команда mysql_numrows($r) возвращает количество столбцов в результате запроса, в данном случае в результате запроса идентификатор которого находится в переменной $r

for($i=0; $i<mysql_numrows($r); $i++)

- В самом теле цикла, формируется и выводится на экран ассоциативный массив.

{

$f=mysql_fetch_array($r);

echo "<div align=center><font face=Arial size=2>В результате поиска найдена(ы) запись(и): <b>$f[Sname]</b> проживающий по адресу <b>$f[Street] $f[Home]</b>, номер телефона <b>$f[Phone]</b>.<br><br>\n</div>";

}

Теперь, когда все страницы готовы, проверим работу справочника. Для этого добавьте значения в базу (форма add_rec.php), которые приведены в таблице 2.1.

Таблица 2.1 – Данные для проверки

123456

Иванов П.А.

Ленина

12

335676

Петров Н.И.

Победы

12

2204576

Сидоров Н.А.

Ленина

45

727756

Нечипоренко С.А.

Победы

35

Теперь проверим работу поиска (форма find.php). Введите для поиска улицу Ленина. Результат должен быть следующим:

В результате поиска найдена(ы) запись(и):

Иванов П.А. проживающий по адресу Ленина 12, номер телефона 123456.

Сидоров Н.А. проживающий по адресу Ленина 45, номер телефона 220457.

Теперь введите для поиска только номер дома 12. В поиска должен быть таким:

В результате поиска найдена(ы) запись(и):

Иванов П.А. проживающий по адресу Ленина 12, номер телефона 123456.

Петров Н.И. проживающий по адресу Победы 12, номер телефона 335676.

Далее введите в поля для поиска фамилию Петров и номер телефона 335676. Результат должен быть таким:

В результате поиска найдена(ы) запись(и):

Петров Н.И. проживающий по адресу Победы 12, номер телефона 335676.

Теперь попробуйте ввести телефон, которого нет в базе. Вы получите сообщение:

В результате поиска запись(и) не найден(ы)

Поэкспериментируйте со справочником самостоятельно, проверив правильность его работы.

По окончании лабораторной работы и демонстрации преподавателю выполните остановку сервера с помощью соответствующего ярлыка на рабочем столе.

Задание:

  • выполнить все примеры из лабораторной работы, сохраняя каждый пример в отдельном файле;

  • проверить правильность работы каждого примера;

  • показать преподавателю на компьютере все сделанные примеры, объясняя их работу;

  • оформить отчет о проделанной работе;

  • защитить лабораторную работу, ответив на вопросы преподавателя.

Содержание отчета:

  • титульный лист;

  • цель работы;

  • задание;

  • исходные тексты;

  • результаты работы;

  • выводы по работе.

Контрольные вопросы

  1. Что такое клиент-серверные технологии?

  2. Что такое серверные средства обеспечения интерактивности WEB-страниц?

  3. В чем состоит назначение языка сценариев PHP?

  4. В чем состоят преимущества PHP-технологии?

  5. Какие компоненты необходимо установить на компьютер для работы с PHP?

  6. Для чего служит тег <? ?>?

  7. Как правильно проверить файл, содержащий PHP-скрипт на локальном компьютере?

  8. Почему нельзя открывать файл, содержащий PHP-скрипт, непосредственно браузером?

Соседние файлы в папке CIT