Форма обратной связи

Тема в разделе "PHP", создана пользователем honuryk, 6 июл 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. honuryk

    honuryk Постоялец

    Регистр.:
    13 ноя 2006
    Сообщения:
    126
    Симпатии:
    9
    Здравствуйте, есть форма обратной связи, вот застопорился на одном моменте и ничего сделать не могу!!!



    PHP:
    <?php 
    function show_form() 

    ?> 
    <form action="" method=post> 
    <div align="center"> 
                  <br />Имя*<br /> 
                  <input type="text" name="name" size="40"> 
                  <br />Контактный телефон<br /> 
                  <input type="text" name="tel" size="40"> 
                  <br />Контактный email*<br /> 
                  <input type="text" name="email" size="40"> 
                  <br />Teма<br /> 
                  <input type="text" name="title" size="40"> 
                  <br />Сообщение*<br /> 
                  <textarea rows="10" name="mess" cols="30"></textarea> 
                  <br /><input type="submit" value="Отправить" name="submit"> 
    </div> 
    </form> 
    * Помечены поля, которые необходимо заполнить 
    <? 


    function complete_mail() { 
            // $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и  substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменных $_POST['mess'], $_POST['name'], $_POST['tel'], $_POST['email'] все аналогично
            $_POST['title'] =  substr(htmlspecialchars(trim($_POST['title'])), 0, 1000); 
            $_POST['mess'] =  substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000); 
            $_POST['name'] =  substr(htmlspecialchars(trim($_POST['name'])), 0, 30); 
            $_POST['tel'] =  substr(htmlspecialchars(trim($_POST['tel'])), 0, 30); 
            $_POST['email'] =  substr(htmlspecialchars(trim($_POST['email'])), 0, 50); 
            // если не заполнено поле "Имя" - показываем ошибку 0 
            if (empty($_POST['name'])) 
                 output_err(0); 
            // если неправильно заполнено поле email - показываем ошибку 1 
            if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['email'])) 
                 output_err(1); 
            // если не заполнено поле "Сообщение" - показываем ошибку 2 
            if(empty($_POST['mess'])) 
                 output_err(2); 
            // создаем наше сообщение 
            $mess = ' 
    Имя отправителя:'.$_POST['name'].' 
    Контактный телефон:'.$_POST['tel'].' 
    Контактный email:'.$_POST['email'].' 
    '.$_POST['mess']; 
            // $to - кому отправляем 
            $to = 'test@test.ru'; 
            // $from - от кого 
            $from='test@test.ru'; 
            mail($to, $_POST['title'], $mess, "From:".$from); 
            echo 'Спасибо! Ваше письмо отправлено.'; 


    function output_err($num) 

        $err[0] = 'ОШИБКА! Не введено имя.'; 
        $err[1] = 'ОШИБКА! Неверно введен e-mail.'; 
        $err[2] = 'ОШИБКА! Не введено сообщение.'; 
        echo '<p>'.$err[$num].'</p>'; 
        show_form(); 
        exit(); 


    if (!empty($_POST['submit'])) complete_mail(); 
    else show_form(); 
    ?> 
    Собственно проблема именно в выводе ошибки при не введенном поле или двох обязательных...

    То есть если человек не вводит данные в два поля, показывается только одна ошибка, мол Вы не ввели Имя!!!!


    И еще вопрос, я создал выпадающее меню в форме

    PHP:
    <select name="name" id="name">
              <
    option selected></option>
              <
    option>1</option>
              <
    option>2</option>
              <
    option>3</option>
              <
    option>4</option>
    </
    select>
    И например когда пользователь ввел данные и нажал отправить, но выбила ошибка, как сделать что бы данные в форме не очищались...

    Для input сделал, а вот для select что-то не получается :(
     
  2. SolarWind

    SolarWind Создатель

    Регистр.:
    18 авг 2008
    Сообщения:
    42
    Симпатии:
    11
    Потому что в функции output_err, после вывода ошибки и формы, стоит exit
    Надо сначала показать все ошибки, потом вывести форму и уже потом выходить.
    А еще лучше переписать проверку на JavaScript, чтобы проверка на заполнения шла еще до нажатия кнопки "Отправить".

    можно так:
    PHP:
    <?

    $select_mem 5;
    $selects = array(1,2,3,4,5);

    echo 
    '<select>';
    foreach(
    $selects as $select) {
        if(
    $select == $select_mem) {
            echo 
    '<option value="'.$select.'" SELECTED>'.$select.'</option>';
        } else {
            echo 
    '<option value="'.$select.'">'.$select.'</option>';
        }
    }
    echo 
    '</select>';
    ?>
     
    honuryk нравится это.
  3. honuryk

    honuryk Постоялец

    Регистр.:
    13 ноя 2006
    Сообщения:
    126
    Симпатии:
    9
    можешь на примере показать, как это должно быть по 1му вопросу ?
     
  4. SolarWind

    SolarWind Создатель

    Регистр.:
    18 авг 2008
    Сообщения:
    42
    Симпатии:
    11
    вот пример, остальные поля делать по аналогии...
    пока не введешь имя, кнопку просто не даст нажать
    PHP:
    <html>
    <
    head>
    <
    script language="JavaScript">
    function 
    checkform() {
      if (
    document.regform.text.value == '') {
        
    alert("Please enter your full name!");
        
    document.regform.text.focus();
        return 
    false;
      }
      return 
    true;
    }
    </script>
    </head>
    <body>
    <form name="regform" action="http://yandex.ru/yandsearch" onsubmit="return checkform()">
    Your Full Name:
    <input type="text" name="text" value="">
    <input type="submit" value="Register">
    </form>
    </body>
    </html>
     
    honuryk нравится это.
  5. funman

    funman

    Регистр.:
    28 дек 2007
    Сообщения:
    155
    Симпатии:
    25
    вот более расширенный пример...

    PHP:
    <form action="имя_скрипта" name="Form1" onsubmit="return Filled()">
    <
    input type=text name="name">
    <
    input type=text name="email">
    <
    input type=submit value="OK"
    </form>
     
    function 
    Filled() {
    if 
    document.Form1.name.value=""  
    {
    alert ("Введите имя");
    return 
    false;
    }
    if 
    document.Form1.email.value != ""
    {
    valid_chars  ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    valid_chars += "1234567890";
    valid_chars += "-@_.";
    str=document.form1.email.value;
    valid_string true;
        for(
    i=0str.lengthi++ )
         {
           
    current_valid_char false;
           for(
    j=0valid_chars.lengthj++)
             {
               if(
    str.charAt(i) == valid_chars.charAt(j))
                 {
                   
    current_valid_char true;
                 }
             }
           if(
    current_valid_char == false)
             {
              
    valid_string false;
             }
         }
         return 
    valid_string;
       }
    else
    {
        return 
    false;
    А вообще почитайте про регулярные выражения на javascript, можно любую фильтрацию сделать.
     
    honuryk нравится это.
Статус темы:
Закрыта.