Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проверка формы обратной связи

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Не могу реализовать проверку введенных данных в форму.
Sheneman
Отправлено: 23 Июня, 2014 - 16:29:13
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




Есть простая форма:
PHP:
скопировать код в буфер обмена
  1. <form action="zakaz.php" method="post">
  2. <input  type="tel" name="tel" /></b><br>
  3. <input type="text" name="name" required="required"/>
  4. <input id="call-measurer-btn" type="image" src="http://www.site.ru/contact/1.gif"/>
  5. <?PHP $uri=$_SERVER['REQUEST_URI']; ?>
  6. <input type="hidden" name="url" value="'<?PHP echo $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; ?>'">


Обработчик:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header('Content-Type: text/html; charset=utf-8;');
  3. $tel = @ trim ($_POST['tel']);
  4. $headers .= "Content-type: text/html; charset=utf-8\r\n";
  5. $message = iconv('utf-8', 'windows-1251', $message);
  6. $headers .= "From: zayavka@site.ru \r\n";
  7. $url = $_POST['url'];
  8. $name = $_POST['name'];
  9. $from = "zayavka@site.ru";
  10. mail ("roman@sheneman.ru", "Заявка с сайта www.site.ru","Телефон: \n $tel, <br> Имя: $name,<br> URL: $url ", $headers);
  11. ?>
  12.  

Нужно проверить введенные данные в инпут "tel" и "name".
Требование к tel: цифры не менее 10 шт.
Требование к имени: Буквы не менее 2 шт.
Важный момент, нужно что бы при нажатии кнопки отправить, выходило сообщение, "данные введены не корректно" и переход на zakaz.php не осуществлялся.
 
 Top
flisk
Отправлено: 23 Июня, 2014 - 20:43:33
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Тогда вам нужен не PHP, а JavaScript. Или же переделать обработчик. Пишу оба варианта:

вариант РНР
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header('Content-Type: text/html; charset=utf-8;');
  3. $tel = @ trim ($_POST['tel']);
  4. $headers .= "Content-type: text/html; charset=utf-8\r\n";
  5. $message = iconv('utf-8', 'windows-1251', $message);
  6. $headers .= "From: zayavka@site.ru \r\n";
  7. $url = $_POST['url'];
  8. $name = $_POST['name'];
  9. $from = "zayavka@site.ru";
  10.  
  11. if ((preg_match("/(\d+){10,}/",$tel) == 0) || (preg_match("/[а-яА-Я]{2,}/",$name)) == 0)
  12. {
  13.         echo "данные введены некорректно!";
  14. }
  15. else
  16. {
  17.         mail ("roman@sheneman.ru", "Заявка с сайта www.site.ru","Телефон: \n $tel, <br> Имя: $name,<br> URL: $url ", $headers);
  18. }
  19. ?>


Регулярка не работает с юникод версией пхп скрипта, если перекодировать в win1251, то все гуд. Как подружить регулярки с русскими буквами при юникоде - не знаю (не юзаю юникод).
(Добавление)
вариант JS.
CODE (html):
скопировать код в буфер обмена
  1. <script>
  2. function check_form()
  3. {
  4. var tel = document.getElementsByName("tel")[0].value;
  5. var name = document.getElementsByName("name")[0].value;
  6.  
  7. if (tel.match(/(\d+){10,}/) != null)
  8. {
  9.  if (name.match(/[а-яА-Я]{2,}/) != null)
  10.         {
  11.         return true;
  12.         }
  13. }
  14. alert("данные введены некорректно!");
  15. return false;
  16. }
  17. </script>
  18.  
  19. <form action="zakaz.php" method="post" onsubmit="return check_form();">
  20. <input  type="tel" name="tel" /></b><br>
  21. <input type="text" name="name" required="required"/>
  22. <input id="call-measurer-btn" type="image" src="http://www.site.ru/contact/1.gif"/>
  23. <?PHP $uri=$_SERVER['REQUEST_URI']; ?>
  24. <input type="hidden" name="url" value="'<?PHP echo $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; ?>'">

(Отредактировано автором: 23 Июня, 2014 - 20:50:46)

 
 Top
Sheneman
Отправлено: 24 Июня, 2014 - 15:11:52
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




Круто, второй вариант подходит, спасибо!
А подскажите, как сделать, что бы уведомление об отправке, выводилось в блоке откуда была нажата кнопка отправить?
Сейчас просто перебрасывает на zakaz.php
 
 Top
flisk
Отправлено: 25 Июня, 2014 - 13:19:40
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Оно и будет перебрасывать, ведь поле action формы указывает на zakaz.php.
тут есть два варианта. Или перенести весь код обработки формы и отправки емейла в этот же файл с формой, или же добавить ajax - тогда данные уйдут на zakaz.php, но страница не будет перезагружаться и можно будет вывести уведомления.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB