Оглавление

18.11. Проверка корректности данных.

Создание формы регистрации пользователя

 

Рассмотрим форму регистрации пользователя с проверкой корректности введенных данных (листинг 73).

 

Листинг 73. Проверка данных на стороне клиента


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
         "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 <title>Регистрация пользователя</title>
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script type="text/javascript">
<!--
function f_submit() {
   var name1 = document.getElementById("name1");
   if (name1.value=="") {
      window.alert("Введите имя");
      name1.focus();
      return false;
   }
   var fam1 = document.getElementById("fam1");
   if (fam1.value=="") {
      window.alert("Введите фамилию");
      fam1.focus();
      return false;
   }
   var age1 = document.getElementById("age1");
   var p = /^[0-9]{1,3}$/;
   if (!p.test(age1.value)) {
      window.alert("Неверный возраст");
      age1.focus();
      return false;
   }
   var mail1 = document.getElementById("mail1");
   p = /^[a-z0-9_\.\-]+@([a-z0-9\-]+\.)+[a-z]{2,6}$/i;
   if (!p.test(mail1.value)) {
      window.alert("Неверный адрес E-mail");
      mail1.focus();
      return false;
   }
   var pass1 = document.getElementById("pass1");
   var pass2 = document.getElementById("pass2");
   p = /^[a-z0-9_\.\-]{6,16}$/i;
   if (!p.test(pass1.value)) {
      window.alert("Неверный пароль");
      pass1.focus();
      return false;
   }
   else if (pass1.value != pass2.value) {
      window.alert("Пароли должны совпадать");
      pass1.focus();
      return false;
   }
   return true;
}
//-->
</script>
</head>
<body>
 <h2>Регистрация пользователя</h2>
 <form action="test.php" method="POST" name="form1" 
  onsubmit="return f_submit();">
  <div>
   Имя:<br>
   <input type="text" name="name1" id="name1"><br>
   Фамилия:<br>
   <input type="text" name="fam1" id="fam1"><br>
   Возраст:<br>
   <input type="text" name="age1" id="age1"><br>
   E-mail:<br>
   <input type="text" name="mail1" id="mail1"><br>
   Пароль:<br>
   <input type="password" name="pass1" id="pass1"><br>
   Повторите пароль:<br>
   <input type="password" name="pass2" id="pass2">
   <br><br>
   <input type="reset" value="Очистить"> 
   <input type="submit" value="Отправить">
  </div>
 </form>
</body>
</html>

 

Итак, все данные проверены. Что же происходит после отправки данных формы? Давайте рассмотрим содержимое файла test.php (листинг 74).

 

Листинг 74. Проверка данных на стороне сервера


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
         "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 <title>Результаты регистрации</title>
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<div>
<?php
if (!isset($_POST['name1'])) echo "Форма не отправлена";
else {
   // Создаем короткие имена переменных
   $name = (isset($_POST['name1'])) ? $_POST['name1'] : '';
   $fam = (isset($_POST['fam1'])) ? $_POST['fam1'] : '';
   $age = (isset($_POST['age1'])) ? (int)$_POST['age1'] : 0;
   $mail = (isset($_POST['mail1'])) ? $_POST['mail1'] : '';
   $pass1 = (isset($_POST['pass1'])) ? $_POST['pass1'] : '';
   $pass2 = (isset($_POST['pass2'])) ? $_POST['pass2'] : '';
   // Если "магические" кавычки включены, то удаляем слеши
   if (get_magic_quotes_gpc()) {
      $user = stripslashes($user);
      $fam = stripslashes($fam);
      $email = stripslashes($email);
      $pass1 = stripslashes($pass1);
      $pass2 = stripslashes($pass2);
   }
   $err = "";
   if (strlen($name)>100 || strlen($name)<2) {
      $err .= "Недопустимая длина поля 'Имя'.<br>";
   }
   if (strlen($fam)>100 || strlen($fam)<2) {
      $err .= "Недопустимая длина поля 'Фамилия'.<br>";
   }
   if (!preg_match('/^[0-9]{1,3}$/s', $age) || $age==0) {
      $err .= "Неверный возраст.<br>";
   }
   if (!preg_match('/^[a-z0-9_\.\-]+@([a-z0-9\-]+\.)+[a-z]{2,6}$/is', $mail) 
       || strlen($mail)>70) {
      $err .= "Неверный адрес E-mail.<br>";
   }
   if (!preg_match('/^[a-z0-9_\.\-]{6,16}$/is', $pass1)) {
      $err .= "Неверный пароль.<br>";
   }
   else {
      if ($pass1 != $pass2) {
         $err .= "Пароли должны совпадать.<br>";
      }
   }
   if ($err=="") { // Если ошибок нет
   // Добавляем данные в базу данных и отправляем подтверждение на E-mail
      echo "<b>Регистрация прошла успешно</b>";
   }
   else {
      echo "<span style='color: red'>При заполнении формы были допущены ";
      echo "следующие ошибки:</span><br><br>";
      echo $err;
   }
}
?>
</div>
</body>
</html>

 

Эта программа, написанная на РНР, очень напоминает программу на JavaScript. Как и в JavaScript, код программы может внедряться в HTML-документ. Только вместо открывающего тега <script> используется дескриптор <?php, а вместо закрывающего тега </script> — дескриптор ?>. Но главным отличием является то, что программа на РНР выполняется не на компьютере пользователя, а на Web-сервере.
Как видно из примера, все имена полей, заданные с помощью параметра name, доступны через переменную окружения $_post. Более того, если в файле конфигурации включена поддержка глобальных переменных, то все имена доступны как обычные переменные. Что же происходит дальше? Мы опять проверяем введенные данные... но зачем? Ведь мы уже проверили их с помощью JavaScript... Как уже говорилось ранее, любой пользователь может отключить JavaScript в настройках Web-браузера. Поэтому проверять данные нужно обязательно. Так как файл test.php выполняется не на компьютере пользователя, а на сервере, то проверка будет выполнена независимо от программного обеспечения компьютера пользователя, и отключить ее пользователь не сможет.

 

При успешной проверке данные обычно добавляются в базу данных, и отправляется письмо с подтверждением регистрации.
Что будет, если сохранить файл test.php на локальном компьютере, а затем отправить данные формы этому файлу? Вместо надписи "Регистрация прошла успешно" мы получим нечто подобное:

 

100 || strlen($name)<2) { $err .= "Недопустимая длина поля 'Имя'.
"; } if (strlen($fam)>100 || strlen($fam)<2) { $err .= "Недопустимая длина поля 'Фамилия'.
"; } if (!preg_match('/^[0-9]{1,3}$/s', $age) || $age==0) { $err .= "Неверный возраст.
"; } if (!preg_match('/^[a-z0-9_\.\-]+@([a-z0-9\-]+\.)+[a-z]{2,6}$/is', $mail) || strlen($mail)>70) { $err .= "Неверный адрес E-mail.
"; } if (!preg_match('/^[a-z0-9_\.\-]{6,16}$/is', $pass1)) { $err .= "Неверный пароль.
"; } else { if ($pass1 != $pass2) { $err .= "Пароли должны совпадать.
"; } } if ($err=="") { // Если ошибок нет // Добавляем данные в базу данных и отправляем подтверждение на E-mail echo "Регистрация прошла успешно"; } else { echo "При заполнении формы были допущены "; echo "следующие ошибки:

"; echo $err; } } ?>

 

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

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити