Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен / web / example1 / Введение в PHP.doc
Скачиваний:
96
Добавлен:
18.05.2015
Размер:
3 Mб
Скачать

Примеры обработки форм

Все данные, которые вы хотите получить из HTML-формы в PHP сценарий обрабатываются с помощью суперглобальных массивов $_POST или $_GET, в зависимости от указанного в атрибуте method метода передачи данных.

<?php//form5.php

if (isset($_POST['action']) && $_POST['action'] == 'submitted') {

echo '<pre>';

print_r($_POST);

echo '<a href="'. $_SERVER['PHP_SELF'] .'">Попробуйте еще раз</a>';

echo '</pre>';

} else {

?>

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

Имя: <input type="text" name="personal[name]" /><br />

Email: <input type="text" name="personal[email]" /><br />

Пиво: <br />

<select multiple name="beer[]">

<option value="аливария">аливария</option>

<option value="криница">криница</option>

<option value="речицкое">речицкое</option>

</select><br />

<input type="hidden" name="action" value="submitted" />

<input type="submit" name="submit" value="Go!" />

</form>

<?php

}

?>

После выполнения PHP получим следующую страницу HTML

<form action="/myphp/form5.php" method="post">

Имя: <input type="text" name="personal[name]" /><br />

Email: <input type="text" name="personal[email]" /><br />

Пиво: <br />

<select multiple name="beer[]">

<option value="аливария">аливария</option>

<option value="криница">криница</option>

<option value="речицкое">речицкое</option>

</select><br />

<input type="hidden" name="action" value="submitted" />

<input type="submit" name="submit" value="Go!" />

</form>

Результат:

Array

(

[personal] => Array

(

[name] => val

[email] => rom

)

[action] => submitted

[submit] => Go!

)

Попробуйте еще раз

Валидация данных в форме

Необходимые для заполнения поля

Имя, почтовый адрес и основная информация – примеры необходимых для заполненияполей. Для обозначения необходимого поля используйте звездочку (*) красного цвета.

Клиентская сторона (JavaScript)

function required(){

var first = document.forms["myForm"].elements["firstname"].value;

var last = document.forms["myForm"].elements["lastname"].value;

var email = document.forms["myForm"].elements["email"].value;

var message = document.forms["myForm"].elements["message"].value;

if(first == null || first == "" || last == null || last == ""){

alert("First and last name fields are required.");

return false;

}

else if(email == null || email == ""){

alert('An email address is required.');

return false;

}

else if(message == null || message == ""){

alert('Message feild cannot be left blank.');

return false;

}else{return true;}

}

Серверная сторона (PHP)

function required($firstname, $lastname, $email, $message){

if(empty($firstname) || empty($lastname)){

return false;

}

elese if(empty($email)){

return false;

}

elese if(empty($message)){

return false;

}else{return true;}

}

Совпадающие поля

Два самых привычных поля, требующих проверки совпадения – это поля ввода пароля и электронного адреса. Всегда необходимо дважды проверять поле пароля, потому что: 1) пользователь не видит пароль при его написании, поэтому может допустить ошибку и 2) позже мы потребуем от пользователя войти в систему (что он не сможет сделать, если запишет неверный пароль).

Однако двойная проверка поля с электронным адресом – спорный предмет. На самом деле это зависит от необходимости е-мейла на вебсайте. Для регистрации, которая требует постоянного обновления электронного адреса или системы обратной связи, требующей отклика, лучше проверить дважды, чтобы удостовериться, что е-мейл правильный. Однако для других чувствительных к е-мейлу случаев двойная проверка все же может оказаться слишком навязчивой. Для таких простых вещей, как подписка на рассылку новостей, обычно можно пропустить двойную проверку, и вместо этого «подтвердить» е-мейл другими способами, например, в форме страницы подтверждения.

Клиентская сторона (JavaScript)

function passwordmatch(form_id){

var pass1 = document.forms["form_id"].elements["password"].value;

var pass2 = document.forms["form_id"].elements["password2"].value;

if(pass1 != pass2){

alert('Passwords do not match!');

return false;

}

}

Серверная сторона (PHP)

functin passwordmatch($password1, $password2){

if($password1 != $password2){

return false;

}else{return true;}

}

Правильный формат электронной почты

Правильный формат е-мейла включает знак @, точку (.) и разрешает только определенные символы. Более того, эти символы должны располагаться в верном порядке. Ниже есть несколько отрывков кода, как для стороны клиента, так и сервера, которыми можно пользоваться для подтверждения электронной почты.

Клиентская сторона (JavaScript)

function validate(form_id,email) {

var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])

+\.([A-Za-z]{2,4})$/;

var address = document.forms["form_id"].elements["email"].value;

if(reg.test(address) == false) {

alert("Invalid Email Address");

return false;

}

}

Серверная сторона (PHP)

function isValidEmail($email){

return preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]

+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i', $email);

}

Правильный формат телефонного номера (США)

Для проверки правильности телефонного номера можно использовать регулярные выражения. Нижеприведенные фрагменты предназначены для обычного телефонного номера США, которые под другие образцы нужно будет переделать.

Клиентская сторона (JavaScript)

function validate(form_id,phone) {

var reg = /\(?\d{3}\)?[-\s.]?\d{3}[-\s.]\d{4}/x;

var phone = document.forms["form_id"].elements["phone"].value;

if(reg.test(phone) == false) {

alert('Invalid Phone Number: XXX-XXX-XXXX');

return false;

}

}

Серверная сторона (PHP)

function validatePhone($phoneNo){

return preg_match('/\(?\d{3}\)?[-\s.]?\d{3}

[-\s.]\d{4}/x', $phoneNo);

}

Правильный формат почтового индекса (США и Канада)

Следующие отрывки кода – для подтверждения почтового индекса только США и Канады, но, скорее всего, в любом случае эти форматы самые распространенные. Если нужен формат для другой страны, можно использовать похожий вариант другого типа цифр индекса или почтового адреса.

Клиентская сторона (JavaScript)

function isValidPostalCode(postalCode, countryCode) {

switch (countryCode) {

case "US":

postalCodeRegex = /^([0-9]{5})(?:[-\s]*([0-9]{4}))?$/;

break;

case "CA":

postalCodeRegex = /^([A-Z][0-9][A-Z])\s*([0-9][A-Z][0-9])$/;

break;

default:

postalCodeRegex = /^(?:[A-Z0-9]+([- ]?[A-Z0-9]+)*)?$/;

}

return postalCodeRegex.test(postalCode);

}

Серверная сторона (PHP)

function validateZipCode($postalCode, $countryCode){

switch ($countryCode){

case "US":

$countryformat = "/^([0-9]{5})(?:[-\s]*([0-9]{4}))?$/";

break;

case "CA":

$countryformat = "/^([A-Z][0-9][A-Z])\s*([0-9][A-Z][0-9])$/";

break;

default:

$countryformat = "/^(?:[A-Z0-9]+([- ]?[A-Z0-9]+)*)?$/";

}

return preg_match('$countryformat', $postalCode);

}

Что-то действительно выбираемое/подбираемое

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

Внизу приведен пример, где у пользователя в выпадающем списке есть опции, а значение, выбранное по умолчанию – "Select One" (выберите из списка). Конечно, нам не нужно, чтобы пользователь выбрал "Select One", потому что так он не даст нам никакой ценной информации. Похожие ситуации могут использоваться для кнопок выбора опций или предопределенных полей ввода.

Начало формы

Конец формы

Валидация не потребуется, если на первом месте не будет находиться опция «Выберите из списка» ("Select One"), но для того, чтобы убедиться, что пользователь что-то деятельно выбирал вместо того, чтобы пропустить эту часть формы, нам следует создать эту «пустую» опцию.

Клиентская сторона (JavaScript)

function required(){

var graphicsProgram = document.forms["myForm"].

elements["graphicsProgram"].value;

if(graphicsProgram == "Select One"){

alert("Please choose a graphics program.");

return false;

}else{return true;}

}

Серверная сторона (PHP)

function required($graphicsProgram){

if($graphicsProgram == "Select One"){

return false;

}

}else{return true;}

}

В диапазоне

Другая обычная форма валидации, заслуживающая фрагмента кода, это проверка того, находятся ли номер или дата в каком-либо диапазоне. Хороший пример тому – дата рождения, где человек не может быть младше или старше определенного возраста. Прочие образцы использования диапазона могут включать оценку доходов, подсчет расстояния или другие данные, где нужно выбрать точное число, но в каких-то пределах.

Начало формы

Birthday:

Конец формы

Другой способ работы с датами и диапазонами – постоянно использовать объект даты (как в JavaScript, так и в PHP и других языках программирования). На самом деле, это будет более верный способ все сделать, особенно если при выборе диапазона были важны точные день и месяц. Однако, чтобы сделать это решение более универсальным, мы скомпилировали нижеприведенный код.

Аналогичную технику можно применить ко многим пользовательским решениям.

Клиентская сторона (JavaScript)

function withinrange(){

var currentYear = 2010;

var birthYear = document.forms["myForm"].elements["year"].value;

var tooOld = currentYear - 100;

var tooYoung = currentYear - 13;

if(tooYoung < birthYear){

alert("You must be 13 years or older.");

return false;

}else if(tooOld > birthYear){

alert("You can't possibly be that old!");

return false;

}

else{return true;}

}

Серверная сторона (PHP)

function withinrange($birthYear){

$currentYear = 2010;

$tooOld = $currentYear - 100;

$tooYoung = $currentYear - 13;

if($tooYoung < $birthYear){

return false;

}else if($tooOld > $birthYear){

return false;

}

else{return true;}

}

Captcha

Когда все уже сказано и сделано, а форма заполнена, неплохо бы убедиться, что данные в форму вводит человек. Для избегания спам-ботов и хакерских атак всегда перед отправкой формы включайте полностью автоматизированный открытый тест Тьюринга по распознаванию людей и машин, т.н. captcha.

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