Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода ТОБД.doc
Скачиваний:
24
Добавлен:
13.04.2015
Размер:
8.25 Mб
Скачать

Задание 4. Специфика имени пользователя. Lab6_0_3.Php

В 80% случаев вышеприведенная задача усложняется на практике, надо либо расширить набор символов, что делается простым добавлением символов в символьный класс, либо ужесточаются условия. Например, ставится условие, что имя пользователя может состоять как из букв латинского алфавита, так и из цифр, но первый символ имени пользователя должен быть обязательно буквой латинского алфавита!

Дописываем регулярное выражение: ^[a-zA-Z][a-zA-Z0-9]*$

Как известно, символьный класс описывает только один символ. Наша задача как раз в том и состоит, чтобы описать один символ (первый): [a-zA-Z] тут два интервала, описывают первый символ и дают понять, что никаких цифр в первом символе проверяемой строки быть не может.

В предыдущем примере явно следовало, что регистрационное имя пользователя должно быть длинной минимум в один символ. Мы уже описали первый символ строки, но он может быть и единственным, после него может быть сколько угодно символов, либо может их вообще не быть, но регулярное выражение совпадет только тогда, когда все последующие символы будут удовлетворять условию, что они являются либо буквами латинского алфавита, либо цифрами. [a-zA-Z0-9]. Первый обязательный символ описан, остальные символы не обязательны, поэтому меняем квантификатор с '+' на '*', Ставим символы начала и конца строки: ^[a-zA-Z][a-zA-Z0-9]*$

Если в листинге программы 42-ю строку (рис. 3.53)

заменить на (файл Lab6_0_3.php):

то на ввод информации (рис. 3.58) получим следующую реакцию (рис. 3.59).

Рис. 3.58. Заполненная форма. Программа Lab6_0_3.php.

Рис. 3.59. Результат работы программы Lab6_0_3.php.

Задание 5. Специфика имени пользователя с помощью JavaScript. Lab6_0_4.Php

Пример использования JavaScript (файл Lab6_0_4.php).

Ниже (рис. 3.60) представлен HTML код самой формы:

<form onsubmit="return checkmail(this.email.value)" action="#" method="post">

<input id="email" name="email" />

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

</form>

Рис. 3.60. Код для формы Lab6_0_4.php.

И код функции на JavaScript, которая и проверяет email.

<script language="javascript" type="text/javascript">

function checkmail(value) {

reg = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;

if (!value.match(reg)) {alert("Пожалуйста, введите свой настоящий e-mail");

document.getElementById('email').value=""; return false; }

}

</script>

Рис. 3.61. Код функции на JavaScript для проверки email (Lab6_0_4.php).

В принципе, если не хотите вникать в суть дела, можете просто скопирвать код, всё будет работать). Напоминаем, что в Интернете существует огромное количество открытых кодов для проверки Email адресов и их надо использовать , а не придумывать свои коды.

Рис. 3.62. Пример Lab6_0_4.php при неправильном указании Email адреса в форме ввода.

Проверка на корректность адреса электронной почты

<?php

function check_email($email) {

if (preg_match("%^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z])+$%", $email)) {

return true;

}

return false;

}

?>

Задание 6. Проверка правильности ввода URL. Lab6_1.php.

Проверка правильности ввода URL является достаточно сложной задачей. Построить универсальное регулярное выражение, которое соответствовало всем URL, очень не просто.

При построении регулярного выражения будем исходить из того, что URL имеет следующий формат:

http://хост/путь

Простейшим вариантом проверки, не позволяющим посетителю ошибаться при наборе URL, но в то же время не предотвращающий неверный формат, является:

"#http://[^]*\.html?#i"

Данное выражение учитывает только URL расширения файла html либо htm, для обобщения на другие файлы следует расширить регулярное выражение до:

"#http://[^]*\.(html?|php|pl|cgi)#i"

Уточняя регулярное выражение, разместим за префиксом http:// регулярное выражение для хоста — [-a-z0-9_.]+. Структура пути может быть более разнообразной. Для него необходимо использовать выражение вида:

[-a-z0-9_:@&?=+,.!/~*'%$]*

Объединяя все в одно регулярное выражение, получаем следующее:

"#http://[-a-z0-9_.]+[-a-z0-9_:@&?=+,.!/~*'%$]*\.(html?|php|pl|cgi)#i"

На рис. 3.63 приведена форма с полем URL адреса.

Рис. 3.63. Пример Lab6_1.php при неправильном указании URL адреса в форме ввода.

Как видно из рис. 3.63, при таком вводе обработчик зафиксирует ошибку, которая может быть представлена рис. 3.64.

Рис. 3.64. Реакция Lab6_1.php при неправильном указании URL адреса в форме ввода на рис. 3.63.

Исходный листинг Lab6_1.php приведен ниже на рис. 3.65.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

<title>Lab6_1 Регулярные выражения</title>

</head>

<h2> Регулярные выражения для URL </h2>

<h3 align="left"><font color=RED>(файл Lab6_1.php)<font color=BLUE> </h3>

<body

TEXT=BLUE

LINK=RED

VLINK=BLUE ALINK=PINK>

<?PHP

if (!isset($_POST[Submit]))

{

//echo "Кнопку Submit=OK еще не нажимали <br>";

print("<form action=\"Lab6_1.php\" method=POST>");

print("<table> <tr><td> Ваше Имя </td>");

print("<td><input type=text name=\"FirstName\" size=20></td></tr>");

print("<tr><td>Ваша Фамилия</td>");

print("<td><input type=text name=\"LastName\" size=20></td></tr>");

print("<tr><td>URL</td>");

print("<td><input type=text name=\"Url\" size=40></td></tr></table>");

print("<input type=submit name=\"Submit\" value=\"OK\"> ");

print("<input type=reset name=\"Reset\" value=\"Cancel\">");

print("</form>");

}

else

{

$Url_adress=$_POST['Url'];

//echo "Указан адрес $Url_adress ";

if (strlen($Url_adress)<8)

{echo "Указанный адрес $Url_adress менее 8-и символов";//

exit;//завершение выполнения PHP сценария

}

//Единственным обязательным признаком в URL:

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

//Больше ничего обязательного для URL нет.

//Например, google.com или supersait.ru

if(preg_match('#^[-a-z0-9]+(\.[-a-z0-9]+)*(\.[a-z]+)(|\/|\/([a-z0-9-_\(\)!\&\#\.\/\~]+(\.[a-z0-9\_\-]+)?(\?([a-zа-я0-9-_\%]*|([a-z0-9_-]+=[a-zа-я0-9-_\%\&]*)+))?(\#[a-z0-9]*)?)?)$#i', $Url_adress))

{

// URL верен. Например, ORD.com.ru

//Внимание! Это выражение не проверяет на наличие "http://"

}

else

{

// URL НЕ верен

echo "Возможный Url Ord.com.ru или www.ord.com.ru <br>";

exit("Указанный адрес $Url_adress <font color=\"red\">НЕ верен</font><br>");

}

if(!preg_match("#http://[-a-z0-9_.]+[-a-z0-9_:@&?=+,.!/~*'%$]*\.(html?|php|pl|cgi|ru)#i", $Url_adress))

{

echo "Указанный адрес $Url_adress допустим <br>";

$Pattern="^(http://)?([^[:space:]]+)([[:alnum:]\.,?%#\-\:;&])$";

if (ereg($Pattern,$Url_adress)):

//ereg - совпадение с регулярным выражением.

//Ищет в строке Url_adress совпадения с регулярным

//выражением, данным в шаблоне pattern.

//

$Replace="<a href=\"http://\\2\\3\" target=\"_self\">\\2\\3</a>";

$Url_adress=eregi_replace($Pattern, $Replace, $Url_adress);

//Функция eregi_replace ищет регулярное выражение Pattern

//в строке Url_adress и заменяет его строкой Replace.

//функция не чувстительна к регистру

print("Ваша подача документа по URL адресу - $Url_adress - может быть осуществлена!");

//Например. Ваша подача документа по URL адресу -

// www.ord.com.ru - может быть осуществлена!

else:

print("URL не точен");

endif;

}

//exit("Неверный формат URL");

}

?>

</body>

</html>

Рис. 3.65. Листинг Lab6_1.php с проверкой URL.

Если пользователь введет правильную информацию рис. 3.66, то вывод в браузере показан на рис. 3.67.

Рис. 3.66. Форма Lab6_1.php с проверкой URL.

Рис. 3.67. Форма Lab6_1.php с проверкой URL.

Задание 7. Проверка правильности ввода из списка. Lab6_2.php.

Пусть необходимо разработать форму (рис. 3.68)

Рис. 3.68. Форма Lab6_2.php.

Для указания способа связи использован следующий список (рис. 3.69)

Рис. 3.69. Форма Lab6_2.php списком значений.

Форма выводится с помощью листинга представленного на рис. 3.70 (файл Lab6_2.php), а обработка события производится в файле Lab6_3.php (листинг программы показан на рис. 3.71).

Файле Lab6_3.php в свою очередь содержит внутренний обработчик событий представленный в файле Lab6_4.php (рис. 3.72).

Листинг программы Lab6_2.php представлен ниже.

Рис. 3.70. Листинг Lab6_2.php с списком значений.

Как указано в строке

обработчик нажатия кнопки “OK”, находится в отдельном файле с именем Lab6_3.php.

В качестве способа связи по умолчанию предлагается использовать “Телефон”.

Естественно пользователь может указать один из видов связей, что должно быть учтено в обработчике Lab6_3.php (рис. 3.71).

Рис. 3.71. Листинг обработчика Lab6_3.php.

Обратите внимание, что в листинге программы Lab6_3.php (рис. 3.71) Html код должен помещаться после PHP кода, иначе функция

будет выдавать предупреждение о присутствии информации перед PHP кодом.

Кроме того текст программы Lab6_3.php, в свою очередь содержит обработчик Lab6_4.php (листинг представлен на рис. 3.72) для возможности обработки ошибок при вводе значений в поле связи (рис. 3.73).

Рис. 3.72. Листинг обработчика Lab6_4.php.

Пусть пользователь ввел информацию в форму, показанную на рис. 3.69.

Тогда в обработчике Lab6_3.php (через глобальный массив $_POST) будут доступны переменные:

Так как значения переменных $FirstName и $LastName непусты и равны соответственно $FirstName =’Иван’, $LastName= ‘Иванов’, то будет построена форма (рис. 3.73) с помощью операторов ниже приведенных операторов (полный текст см. рис. 3.71):

и тело формы закрывается операторами

На основании указанных операторов на экран будет выведено:

Рис. 3.73. Содержание формы сгенерированное обработчиком Lab6_3.php.

Если пользователь введет в форму (рис. 3.73) информацию, показанную на рис. 3.74 и нажмет кнопку , то обработчикLab6_4.php, указанный в теле Lab6_3.php

получит информацию через $_POST, которая показана на рис. 3.75.

Рис. 3.74. Содержание формы (рис. 3.73) после указания Email.

Рис. 3.75. Результат работы обработчика (рис. 3.72) по нажатию рис. 3.74.

Рассмотрим ситуацию когда форма, показанная на рис. 3.69 остается не заполненной и сразу нажимается кнопка (рис. 3.76).

Рис. 3.76. Содержание формы без ввода информации.

В этом случае на экране получим сообщение (рис. 3.77) на основе выполнения условия .

Рис. 3.77. Содержание формы без ввода информации.

Если пользователь вернется на предыдущую страницу и укажет (рис. 3.78)

Рис. 3.78. Содержание формы c информацией.

Нажатие для содержимого рис. 3.78 приведет к результату (рис. 3.79).

Рис. 3.79. Содержание формы (файл Lab6_3.php) c информацией.