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

Европа - быстрые серверы на дисках NVMe от $5 / Русский датацентр от 199руб

Тема в разделе "ИЗБРАННОЕ", создана пользователем StUV, 2 дек 2003.

  1. StUV

    StUV Rotaredom

    Сообщения:
    2.103
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    пример обработки формы

    как принимать, обрабатывать и выводить форму.

    вот пример обработки формы на примере формы для гостевой книги (без вывода оной, только заполнение)
    который я считаю более-менее идеальным
    PHP:
    <? 
    if (
    $_SERVER['REQUEST_METHOD']=='POST') { 
      
    //обрабатываем полученные переменные. 
      
    foreach($_POST as $key => $value) { 
        
    //сначала делаем обработку, которая не испортит данные, 
        //если их придется выводить в форму снова, при ошибке 
        
    $value=trim($value); // убираем пробелы в начале и в конце переменной. 
        
    if (get_magic_quotes_gpc()) $value stripslashes($value); //убираем слеши, если надо 
        
    $value=htmlspecialchars($value,ENT_QUOTES); //заменяем служебные символы HTML на эквиваленты 
        
    $_POST[$key]=$value//все изменения записываем в массив $_POST 
        //дальше делаем изменения, которые пойдут только в файл, 
        //а в форму их выводить не нужно. 
        
    $value=str_replace("\r","",$value); // заменяем все переводы строк 
        
    $value=str_replace("\n","<br>",$value); //на <br> 
        
    $msg[$key]=$value//и присваиваем новые значения элементам массива $msg. 
      

      
    //дальше делаем разнообразные проверки. Они здесь для 
      //примера, вы можете добавлять, какие захотите 
      //главное то, что при любых ошибках переменная $err становится не пустой. 
      //то есть, она одновременно является и флагом ошибки и 
      //содержит все сообщения об ошибках. 
      
    $err=''
      if (!
    $name$err.="Вы забыли написать свое имя<br>"
      if (!
    $notes$err.="Вы забыли написать сам отзыв!<br>"
      if (
    strlen($name) > 30$err.="Длина имени не может превышать 30 символов<br>"
      if (
    strlen($notes) > 1000$err.="Длина отзыва не может превышать 1000 символов<br>"
      if (
    strlen($email) > 50$err.="емейл длинноват...<br>"
      if (
    preg_match("/[0-9a-zA-Zа-яА-ЯЁё]{30,}/",$notes,$matches)) { 
        
    $err.="В отзыве присутствует слишком длинное слово ".$matches[0].". Cократите или разбейте его, пожалуйста."
      } 
      
    $email_ok=eregi("^([_\.0-9a-z-]+@)([0-9a-z][0-9a-z-]+\.)+([a-z]{2,4})$"$email); 
      if (!
    $email_ok && $email$err.="Ошибка в емейле. Если не хотите, то просто не пишите!<br>"
      
    //если ошибок нет, то пишем в файл 
      
    if (!$err) { 
        
    $s=$msg['name']."|".$msg['email']."|".$msg['notes']."|".time()."\n"
        
    $fp=fopen("gbook.txt","a"); 
        
    fwrite($fp,$s); 
        
    fclose($fp); 
        
    //после записи перенаправляем браузер на страницу, 
        //которая отображает сообщения 
        
    Header("Location: ".$_SERVER['PHP_SELF']); 
        
    //и обязательно завершаем работу скрипта 
        
    exit; 
      } 
      
    //если у нас были ошибки при заполнении формы, то в файл 
      //ничего не запишется, скрипт не завершится, а выведется 
      //форма, с заполненными полями и сообщения об ошибках 
    } else { 
      
    //если это не пост, то присваиваем переменным, выводимым 
      //в форме пустую строку 
      
    $_POST['name'] = $_POST['email'] = $_POST['notes'] =''

    ?> 
    <html> 
    <head></head> 
    <body> 
    <? if ($err) echo '<font color=red><b>'.$err.'</b></font>'; ?> 
    <form action="<? echo $_SERVER['PHP_SELF'] ?>" method="POST"><br> 
    Name: <input type="text" name="name" value="<? echo $_POST['name'] ?>"><br> 
    Email: <input type="text" name="email" value="<? echo $_POST['email'] ?>"><br> 
    Notes: <textarea rows="3" cols="30" name="notes"><? echo $_POST['notes'] ?></textarea><br> 
    <input type="submit" name="submit"> 
    </form> 
    </body> 
    </html> 
    Как это работает?
    При заходе на страницу выводится форма для заполнения.
    после того, как человек заполнит форму и нажмет кнопку Послать, данные отсылаются тому же самому скрипту. скрипт определяет, что это ПОСТ, и начинает его обрабатывать.
    проверяет все поля, и если все ОК, то записывает в файл.
    Дальше, чтобы избежать повторной посылки данных, мы заставляем браузер запросить страницу, но уже без посылки данных формы.
    Еще про это можно почитать здесь
    http://tony2001.phpclub.net/faq/other.location.html

    после такого запроса надо всегда ставить команду exit;
    Если же проверка выявила ошибки, то скрипт продолжает выполняться, то есть форма выводится снова, но перед ней выводятся сообщения об ошибках, а сама форма заполнена тем, что вводил пользователь.

    мда...
    в результате всех поправок и добавлений, которые щедро несли всякие доброхоты, а я весело включал в скрипт, он стал совершенно нечитаемым...
    вот его краткая схема.
    PHP:
    if ($_SERVER['REQUEST_METHOD']=='POST') { 
      foreach(
    $_POST as $key => $value) { 
        
    //пробегая по массиву ПОСТ обрабатываем полученные переменные. 
      

      
    //дальше проверяем поля формы 
      
    if (!$err) { 
        
    //записываем и перенаправляем 
        
    Header("Location: ".$_SERVER['PHP_SELF']); 
        exit; 
      } 

    //выводим форму.
    То есть, собственно ТО, ЧТО Я И ХОТЕЛ СКАЗАТЬ.
    еще раз повторяю.
    Это не пример ГОСТЕВОЙ КНИГИ. это не пример реальной гостевой книги.
    Это пример работы с формой. простой работы с формой. как выводить, как обрабатывать.