![](/user_photo/2706_HbeT2.jpg)
PHP5_nachinayushim
.pdf![](/html/2706/356/html_7o_ZwAhYkF.IEn3/htmlconvd-YZt_5u691x1.jpg)
Ответы 693
Для этого можно отобразить приветственный экран, приглашающий ответить на некоторые предварительные вопросы, а затем вывести страницу, предлагающую сде+ лать выбор: искать работу или отправить резюме. Этап подачи резюме можно разде+ лить на два шага, так чтобы пользователи не вводили всю информацию в одну огром+ ную форму на одной странице.
После того как форма заполнена и отправлена, приложение должно сохранять информацию между запросами страниц и заполнять поля соответствующей инфор+ мацией снова, на случай если пользователь захочет вернуться и изменить введенную им информацию.
Итак, рассмотрим страницы, из которых может состоять приложение.
1.Приветственная страница с формой для ввода предварительной информации и ссылка на страницу ‘‘Поиск работы/Отправка резюме’’.
2.Страница ‘‘Поиск работы/Отправка резюме’’ с формой для ввода информации резюме (разделенной на логические блоки), а также с текстовым полем и кноп+ кой для поиска.
Рассмотрим логику соответствующей PHP+программы.
Отобразить приветственную страницу.
Запросить у пользователя предварительную информацию, например, опыт ра+ боты, уровень образования и любые другие подходящие сведения (многие ва+ кансии имеют возрастные ограничения и определенные требования, касаю+ щиеся места жительства; все эти требования можно получить от заказчика).
Сохранить предварительную информацию или сообщить пользователю о том, что он не подходит ни на одну вакансию. Из+за недостатка устройств долговре+ менного хранения данных (в реальных приложениях такого недостатка нет) придется сохранять данные в скрытых полях формы.
В зависимости от того, каким квалификационным требованиям удовлетворяет пользователь, отобразить соответствующую форму для отправки резюме и по+ исковую форму.
После отправки каждой части резюме сохранить данные в скрытых полях фор+ мы и предоставить пользователю навигационную ссылку, позволяющую при желании вызвать форму для редактирования ранее введенной информации.
Создать функцию поиска, отображающую на основании введенных пользовате+ лем поисковых фраз перечень работ со ссылками. Эта функция будет зависеть от выборки списка работ из базы данных или файла, но можно предположить, что эта информация будет доступна в форме массива, поэтому все, что требует+ ся сделать, это выполнить поиск по массиву с помощью цикла for или foreach и найти ключевое слово в массиве, используя PHP+функцию substr() для со+ поставления введенных поисковых фраз с ключевыми словами.
Наконец, если пользователь успешно ввел резюме и претендует на определен+ ную работу, то приложение отображает страницу с благодарностью.
Сравнительно простое приложение с описанным здесь процессом можно полно+ стью реализовать в одном файле, используя простые HTML+формы и Web+страницы, оператор switch для каждого случая отправки форм и скрытые поля форм для хра+ нения данных между запросами.
![](/html/2706/356/html_7o_ZwAhYkF.IEn3/htmlconvd-YZt_5u692x1.jpg)
![](/html/2706/356/html_7o_ZwAhYkF.IEn3/htmlconvd-YZt_5u693x1.jpg)
Ответы 695
Решение
Это решение предполагает использование HTML+тегов в PHP. Начать можно с создания Web+формы: пользователь вводит предопределенное количество имен по+ лей и типов полей, а затем приложение определяет количество переменных, в кото+ рых будут содержаться HTML+теги для этих имен и типов полей. После того как поль+ зователь отправляет форму, на основании веденных им данных генерируется другая форма. Оператор switch..case можно поместить внутри функции, полностью ге+ нерирующей новую форму, и выбирать с его помощью HTML+код для генерации име+ ни поля и типа поля внутри предопределенной HTML+формы.
Также необходимо предусмотреть возможность запрашивать у пользователя допол+ нительную информацию, если выбран выпадающий список (тег <select>), поскольку для работы этих тегов внутри них должны присутствовать также теги <option>.
Ниже приведен пример, демонстрирующий создание функции для формирования HTML+тегов на странице:
//функция для формирования HTML-тегов function createTags($field_name,$field_type)
{
global $option_text01,$option_text02,$option_text03; global $option_value01,$option_value02,$option_value03; switch ($field_type) {
case "text";
$next_field = "<tr><td>$field_name:</td><td><input type='$field_type' name='$field_name'></td></tr>";
break; case "radio";
$next_field = "<tr><td>$field_name:</td><td><input type='$field_type' name='$field_name'></td></tr>";
break;
case "checkbox";
$next_field = "<tr><td>$field_name:</td><td><input type='$field_type' name='$field_name'></td></tr>";
break; case "hidden";
$next_field = "<tr><td>$field_name:</td><td><input type='$field_type' name='$field_name'></td></tr>";
break;
case "textarea";
$next_field = "<tr><td>$field_name:</td><td><textarea cols='40' name='$field_name'></textarea></td></tr>";
break; case "select";
$next_field = "<tr><td>$field_name:</td><td> <select name='$field_name'>"
."<option value='$option_value01'>$option_text01</option>"
."<option value='$option_value02'>$option_text02</option>"
."<option value='$option_value03'>$option_text03</option>"
."</select></td></tr>";
break;
default;
break;
}
return $next_field;
}
![](/html/2706/356/html_7o_ZwAhYkF.IEn3/htmlconvd-YZt_5u694x1.jpg)
![](/html/2706/356/html_7o_ZwAhYkF.IEn3/htmlconvd-YZt_5u695x1.jpg)
Ответы 697
//определяем изменяемый элемент $element_to_change = $_POST[element_to_change]; $change_value = $_POST[change_value];
if ($element_to_change == 0) { $first_xml_string->program[0]->price = $change_value;
} elseif ($element_to_change == 1) { $first_xml_string->program[1]->price = $change_value;
}
Недостаток этого кода состоит в том, что индексные номера элементов должны быть жестко запрограммированы. Кроме того, этот код не позволяет сохранять ре+ зультирующий XML+документ обратно в файл.
Глава 11
Упражнение 1
Создайте список подходящих дескрипторов для каждого столбца в таблице.
Совет: помните о том, что ресторанам ежедневно приходится иметь дело с множеством отдельных заказов (счетов):
Имя |
Иденти- |
Иденти- |
Ресторан Пароль Фамилия Всего |
||||
фикатор |
фикатор |
||||||
|
заказа |
пользователя |
|
|
|
($) |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
David |
2 |
1 |
Nandos |
12345 |
Mercer |
21.45 |
davidm@ |
|
|
|
|
|
|
|
contechst.com |
David |
4 |
1 |
Mimos |
12345 |
Mercer |
20.95 |
davidm@ |
|
|
|
|
|
|
|
contechst.com |
Nic |
3 |
2 |
St Elmos |
23212 |
Malan |
15.45 |
therot@ |
|
|
|
|
|
|
|
doggiestouch.co.za |
Brian |
5 |
4 |
Spur |
32123 |
Reid |
22.00 |
pads@ |
|
|
|
|
|
|
|
doggiestouch.co.za |
Darren |
1 |
3 |
Home |
43212 |
Ebbs |
11.85 |
Bacardi@ |
|
|
|
|
|
|
|
doggiestouch.co.za |
|
|
|
|
|
|
|
|
Решение
Ниже приведен список подходящих дескрипторов полей:
VARCHAR(30)
MEDIUMINT(7)
MEDIUMINT(7)
VARCHAR(30)
VARCHAR(20)
VARCHAR(50)
FLOAT(7)
VARCHAR(60)
Упражнение 2
Администратор сайта решил создать страницу, на которой пользователи смогут просматривать свои предыдущие заказы и итоговые суммы. Используя принципы
![](/html/2706/356/html_7o_ZwAhYkF.IEn3/htmlconvd-YZt_5u696x1.jpg)
![](/html/2706/356/html_7o_ZwAhYkF.IEn3/htmlconvd-YZt_5u697x1.jpg)
![](/html/2706/356/html_7o_ZwAhYkF.IEn3/htmlconvd-YZt_5u698x1.jpg)
700 Приложение А
$dbuserpassword = 'phppass'; $default_dbname = 'sample_db'; $max_menu_items = 10; $MYSQL_ERRNO = ''; $MYSQL_ERROR = '';
function db_connect($dbname=") {
global $dbhost, $dbusername, $dbuserpassword, $default_dbname; global $MYSQL_ERRNO, $MYSQL_ERROR;
$link_id = mysql_connect($dbhost, $dbusername, $dbuserpassword); if(!$link_id) {
$MYSQL_ERRNO = 0;
$MYSQL_ERROR = "Не удалось подключиться к узлу $dbhost."; return 0;
}
else if(empty($dbname) && !mysql_select_db($default_dbname)) { $MYSQL_ERRNO = mysql_errno();
$MYSQL_ERROR = mysql_error(); return 0;
}
else if(!empty($dbname) && !mysql_select_db($dbname)) { $MYSQL_ERRNO = mysql_errno();
$MYSQL_ERROR = mysql_error(); return 0;
}
else return $link_id;
}
function sql_error() {
global $MYSQL_ERRNO, $MYSQL_ERROR; if(empty($MYSQL_ERROR)) {
$MYSQL_ERRNO = mysql_errno(); $MYSQL_ERROR = mysql_error();
}
return "$MYSQL_ERRNO: $MYSQL_ERROR";
}
?>
Takeaway.php:
<?php
include_once "./common_db.inc";
function login_form() { global $PHP_SELF;
?>
<HTML>
<HEAD>
<TITLE>Вход в систему</TITLE> </HEAD>
<BODY>
<FORM METHOD="GET" ACTION="<?php echo $PHP_SELF ?>"> <INPUT TYPE="HIDDEN" NAME="action" VALUE="register">
<DIV ALIGN="CENTER"><CENTER>
<H2>Добро пожаловать в компанию "Быстрая доставка"!</H2> <H3>Пожалуйста, зарегистрируйтесь.</H3>
<TABLE BORDER="1" WIDTH="400" CELLPADDING="2"> <TR>
<TH WIDTH="25%" ALIGN="RIGHT" NOWRAP>Имя</TH> <TD WIDTH="82%" NOWRAP>
<INPUT TYPE="Input" NAME="userfirstname" SIZE="30"> </TD>
</TR>
![](/html/2706/356/html_7o_ZwAhYkF.IEn3/htmlconvd-YZt_5u699x1.jpg)
Ответы 701
<TR>
<TH WIDTH="25%" ALIGN="RIGHT" NOWRAP>Фамилия</TH> <TD WIDTH="82%" NOWRAP>
<INPUT TYPE="Input" NAME="userlastname" SIZE="30"> </TD>
</TR>
<TR>
<TH WIDTH="25%" ALIGN="RIGHT" NOWRAP>Пароль</TH> <TD WIDTH="82%" NOWRAP>
<INPUT TYPE="PASSWORD" NAME="userpassword" SIZE="30"> </TD>
</TR>
<TR>
<TH WIDTH="25%" ALIGN="RIGHT" NOWRAP>Email</TH> <TD WIDTH="82%" NOWRAP>
<INPUT TYPE="Input" NAME="useremail" SIZE="30"> </TD>
</TR>
<TR>
<TD WIDTH="100%" COLSPAN="2" ALIGN="CENTER" NOWRAP> <INPUT TYPE="SUBMIT" NAME="Submit">
</TD>
</TR>
</TABLE>
</CENTER></DIV>
</FORM>
</BODY>
</HTML>
<?
}
function register_user() { global $default_dbname;
$PHP_SELF = $_SERVER['PHP_SELF'];
$link_id = db_connect($default_dbname); $query = "INSERT INTO Customer
VALUES(",'$_GET[userfirstname]','$_GET[userlastname]', $_GET[userpassword], '$_GET[useremail]')";
$result = mysql_query($query);
if(!$result) {
Echo "Пожалуйста, перейдите на главную страницу и зарегистрируйтесь.";
?>
<FORM method="GET" action="<?php echo $PHP_SELF ?>"> <INPUT type="submit" value="На главную">
</FORM>
<?php
exit;
}
return $result;
}
function get_userid(){ global $default_dbname;
$link_id = db_connect($default_dbname);
$query = "SELECT User_ID from Customer WHERE Password = |
'$_GET[userpassword]'"; |
$result = mysql_query($query); $result_array = mysql_fetch_row($result); $userid = $result_array[0];
if(!$userid) $userid = ""; return $userid;
}
![](/html/2706/356/html_7o_ZwAhYkF.IEn3/htmlconvd-YZt_5u700x1.jpg)
702 Приложение А
function order_menu(){
$PHP_SELF = $_SERVER['PHP_SELF'];
?>
<HTML> <HEAD><TITLE>Рестораны</TITLE></HEAD>
<BODY>
<DIV ALIGN="CENTER"><CENTER>
<H2>Добро пожаловать в "Nandos", <?php echo $_GET['userfirstname']; ?>!</H2> </CENTER></DIV>
<FORM method="GET" action="<?php echo $PHP_SELF ?>">
<INPUT |
TYPE="HIDDEN" NAME="action" VALUE="order"> |
Крылышки: |
$1.50 |
<INPUT name="Choice1" type="checkbox" value="1.50"> |
|
<BR> |
|
Гамбургер: |
$3.00 |
<INPUT name="Choice2" type="checkbox" value="3.00">
<BR>
Безалкогольный напиток: $0.75
<INPUT name="Choice3" type="checkbox" value="0.75"> <BR>
<BR>
<INPUT type="submit" value="Заказать"> </FORM>
</BODY>
</HTML>
<?php
}
function place_order(){
global $default_dbname, $max_menu_items; $PHP_SELF = $_SERVER['PHP_SELF']; $link_id = db_connect($default_dbname); $total = 0;
for ($counter = 1; $counter <= 10; $counter ++)
{
$a = "Choice" . "$counter"; if (isset($_GET[$a])){ $total += $_GET[$a];
}
}
$query = "INSERT INTO Orders VALUES (", '$_SESSION[userid]', 'Nandos', $total)";
$result = mysql_query($query);
if(!$result) die ("Заказ не принят. Попробуйте еще раз.");
else {
//В реальной системе здесь должен быть выполнен переход на
//страницу подтверждения, простое обновление страницы
//приводит к дублированию заказа.
echo "Ваш заказ принят и будет выполнен в течение часа. Общая стоимость заказа: \$$total";
?>
<FORM method="GET" action="<?php echo $PHP_SELF ?>"> <INPUT type="submit" value="На главную">
</FORM>
<?php
}
}
function customer_session(){ $_SESSION['useremail'] = $_GET['useremail'];