За последние 24 часа нас посетили 17968 программистов и 1653 робота. Сейчас ищут 2142 программиста ...

проверка полей формы на заполнение

Тема в разделе "PHP для новичков", создана пользователем Клюев Александр, 23 дек 2006.

  1. Клюев Александр

    Клюев Александр Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    10
    Симпатии:
    0
    Вот форма

    Код (Text):
    1.  
    2. <form name=form ACTION="http://vision.biz/forma1.php" method=post>
    3.  
    4. <TABLE BORDER=0 CELLSPACING=3 cellpadding="3">
    5.  
    6. <TR><TD align="right">Имя:</td><td><input type=text name="TOEMAIL[name]"SIZE=39></td></tr>
    7.  
    8. <TR><TD align="right">Адрес, телефон:</td> <td><input type=text name="TOEMAIL[adres]"SIZE=39></td></tr>
    9.  
    10. <TR><TD align="right">E-mail:</td><td> <input type=text name="TOEMAIL[email]"SIZE=39></td></tr>
    11.  
    12. <TR><TD valign="top">В этом поле напишите Ваш вопрос :</td><td><TEXTAREA name="TOEMAIL[zakaz]" rows=5 cols=43 WRAP></TEXTAREA></td></tr>
    13.     </table></CENTER>
    14.  
    15. <CENTER><p>
    16.     <HR WIDTH=75% ALIGN=center SIZE=1>
    17.     <p><INPUT TYPE=SUBMIT VALUE="Отправить вопрос">
    18.     <INPUT TYPE=RESET VALUE="Очистить форму"></p>
    19.     </CENTER>
    20.  
    21. </form>
    а вот скрипт forma1.php
    Код (Text):
    1.  
    2.  
    3. <?php
    4.  
    5.  
    6. $email = "xvid@inbox.ru";  
    7.  
    8.  
    9. $subj  = "привет!пришел заказ!";
    10.  
    11.  
    12. $ToEmail = $HTTP_POST_VARS['TOEMAIL'];
    13.  
    14. $headers = "Content-type: text/plain; charset=windows-1251 rn";
    15.  
    16. $msg = "форма обработана rn";
    17.  
    18. if(strlen( $HTTP_POST_VARS['TOEMAIL'])==0)  
    19. {
    20.   die("Ne vse polya zapolneny");
    21. }
    22.  
    23. foreach($ToEmail as $key=>$val) $msg .= "Поле ".htmlspecialchars($key).". Значение:  
    24. ".htmlspecialchars($val)."rn";
    25.  
    26. mail($email, $subj, $msg, $headers);  
    27.  
    28. if  ( !defined ( 'S_MOD' ) )  {
    29. echo "<meta http-equiv='refresh' content='0; url=/vopr1.htm'>";
    30. exit;
    31. }
    32. ?>
    вопрос в том,как проверить поля формы на заполнение.сколько пытаюсь не как не выходит.

    может кто то делал подобное.поделитись полезными мыслями.плиз.

    с уважением, Клюев Александр.
     
  2. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    - strlen - строковая функция, и работать она должна со строками (для массивов она, если не ошибаюсь, будет всегда возвращать число 5 - длину строки "array"); если вам нужно посчитать количество элементов массива, воспользуйтесь sizeof.
    - $HTTP_POST_VARS - уже старая конструкция (тем не менее, пока еще работает), лучше использовать $_POST.

    чтобы проверить, все ли поля заполнены, можно сделать, например, так:
    PHP:
    1. <?php
    2. $ToEmail = $_POST['TOEMAIL'];
    3. $all_fields = sizeof($_POST['TOEMAIL']);
    4. $msg = "форма обработана \r\n";
    5. $not_empty = 0;
    6. foreach ($ToEmail as $key => $val) {
    7.    $val = trim($val);
    8.    $msg .= "Поле ".htmlspecialchars($key).". Значение: ".htmlspecialchars($val)."\r\n";
    9.    if ( !empty($val) ) $not_empty++;
    10. }
    11. if ( $not_empty != $all_fields ) die("Ne vse polya zapolneny");
    12. else mail($email, $subj, $msg, $headers);
    13. ?>
     
  3. Клюев Александр

    Клюев Александр Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    10
    Симпатии:
    0
    я так понимаю вы сравниваете в этом скрипте общую длину массива
    с фактическим количеством элементов в нем.если эти две величины не равны,значит не все поля заполнены.верно?
     
  4. Клюев Александр

    Клюев Александр Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    10
    Симпатии:
    0
    а как тогда проверить каждое поле по отдельности.если для меня например важно,чтобы только отдельные поля были заполнены?
    могу я считать количество элементов массива каждого поля так например
    Код (Text):
    1.  
    2. $all_fields1 = sizeof($_POST['TOEMAIL[name1]']);
    3. $all_fields2 = sizeof($_POST['TOEMAIL[name2]']);
    4. .......
    5. $all_fieldsN = sizeof($_POST['TOEMAIL[nameN]']);
    с чем сравнивать $all_fields1, $all_fields2........ $all_fieldsN?
    что такое $not_empty, trim($val), !empty($val)?
     
  5. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Клюев Александр

    проверяйте каждое поле регулярным выражением, те, которые могут быть пропущены, задайте возможное количество символов как 0.
     
  6. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    общая длина массива - это и есть фактическое количество элементов в нем. я сравниваю это количество с количеством заполненных элементов.
    Код (Text):
    1. if ( empty($_POST['TOEMAIL']['name1']) ) die('Field "name1" is empty");
    и т.д.
    $not_empty - переменная; как можно догадаться из названия, в ней содержится количество не пустых элементов.
    про trim и empty почитайте в мануале.
     
  7. Клюев Александр

    Клюев Александр Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    10
    Симпатии:
    0
    а почему у меня на емэйл приходит


    форма обработана
    Поле name. Значение: ывфы ывфвф
    Поле adres. Значение: фвыфы 34 676
    Поле email. Значение: ыфывфы
    Поле zakaz. Значение: вфыфввфы
    ыавыаываы
    ыаваываыва
    ываываыв
    вавыапук


    а без проверки заполнения приходило так

    форма обработана
    Поле name. Значение:
    ывфы ывфвф
    Поле adres. Значение:
    фвыфы 34 676
    Поле email. Значение:
    ыфывфы
    Поле zakaz. Значение:
    вфыфввфы
    ыавыаываы
    ыаваываыва
    ываываыв
    вавыапук


    вроде бы все также осталось
    просто второй вариант лучше для восприятия!

    всем спасибо!!!
     
  8. Клюев Александр

    Клюев Александр Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    10
    Симпатии:
    0
    все спасибо сам догадался по поводу последнего вопроса
     
  9. Клюев Александр

    Клюев Александр Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    10
    Симпатии:
    0
    когда не все поля заполнены загружется страничка с сообщением:"не все поля заполнены" и ссылка"назад", которая заново загружает форму.
    вопрос:
    как сделать, чтобы те данные,которые пользователь уже внес в поля формы, заново подгрузились в форму при переходе на нее по ссылке "назад"
    ибо многих это раздражает, когда заново надо вносить всю инфу

    Заранее спасибо!
     
  10. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Клюев Александр

    это обработчик на php выдает надпись?
    если да, то выведите вывод формы в отдельную функцию, ее параметры - это переданные значения этой формы, по-умолчанию - пустое значение.

    и вызывайте в этом случае эту же функцию, только передав ей значения, которые ввел пользователь.


    либо проверяйте заполнение формы средствами javascript например еще до отправки на сервер
     
  11. Клюев Александр

    Клюев Александр Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    10
    Симпатии:
    0
    обработчик на php загружает страничку html, а в ней ссылка на форму.форма загружается заново.фактически надо как то запоминать, что вводит пользователь,чтобы в случае неполного заполнения формы заново это загрузить,если пользователь нажмет ссылку,чтобы вернуться и заполнить все поля
     
  12. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    function contact_form_gen($name="",$mail="",$zakaz=""){
    $name = @$_POST['name'];
    ...
    print("<input type='text' name='user_name' value='".$name."'>");
    }

    и в таком духе..
     
  13. Mavir

    Mavir Guest

    Небольшая поправка
    Код (Text):
    1. print('<input type="text" name="user_name" value="'.htmlspecialchars($name).'">');
     
  14. Mavir

    Mavir Guest

    А вообще оригинально передавать в функцию переменную, а потом сразу ее переопределять :)
     
  15. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Mavir

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

    Клюев Александр Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    10
    Симпатии:
    0
    как средствами php перелестнуть страницу обратно. т.е. как вручную мы нажимаем в броузере назад.вот то же самое сделать только автоматически с помощью php или скрипта?
     
  17. Mavir

    Mavir Guest

    DarkElf, это понятно. Только я бы это еще оптимизировал, чтобы не нужно было писать отдельную функция для каждого поля.
    PHP:
    1.  
    2. <?php
    3. function postData($key){
    4.    if (isset($_POST[$key])){
    5.       return htmlspecialchars($_POST[$key]);
    6.    }else{
    7.       return '';
    8.    }
    9. }
    10. ?>
    11. <input type="text" name="user_name" value="<?php echo postData('user_name'); ?>">
    12. <input type="text" name="login" value="<?php echo postData('login'); ?>">
    13.  
     
  18. taran2l

    taran2l Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    22
    Симпатии:
    0
    Адрес:
    Україна
    А якщо в користувача відключина опція використання яви (у фаєрфоксі по умовчанню вимкнено)? Це некращий спосіб.
     
  19. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    taran2l

    1) сайт - русскоязычный. будь любезен писать на русском языке или убирайся, хлопец, на *.ua . Хотя и приятно читать родной язык..

    2) а еще использование регулярок замедляет выполнение скриптов. мож их тоже уберем?
     
  20. taran2l

    taran2l Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    22
    Симпатии:
    0
    Адрес:
    Україна
    Не всі поля заповнено <a href="javascript:history.back(1)">поверніться назад</a> та заповніть їх коректно.

    Нажимаючи поверніться назад користувач буде отримувати те ж саме що нажавши назад в браузері.
     
  21. taran2l

    taran2l Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    22
    Симпатии:
    0
    Адрес:
    Україна
    Если тебе ето так важно, тогда пожалуста
     
  22. Клюев Александр

    Клюев Александр Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    10
    Симпатии:
    0
    а если скрипты у кого-то не работают.наверно на php лучше все писать?
     
  23. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    taran2l

    просто представь реакцию, если в рядах оранжевых уродцев начать говорить на русском языке. а теперь объясни, почему на вас должны реагировать иначе?
     
  24. taran2l

    taran2l Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    22
    Симпатии:
    0
    Адрес:
    Україна
    <a href="javascript:history.back(1)"> </a> 100% Роботает везде
     
  25. taran2l

    taran2l Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    22
    Симпатии:
    0
    Адрес:
    Україна
    DarkElf
    Я уже понял.
    Всем:
    Извините за инцидент - исправлюсь.