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]   

> Без описания
aub97
Отправлено: 18 Сентября, 2017 - 16:45:15
Post Id


Новичок


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


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




Как в данном коде сделать что-бы пустая форма или с неполными полями не отправлялась? Помогите пожалуйста.

HTML:

CODE (html):
скопировать код в буфер обмена
  1. <div class="form">
  2.                 <form class="contact_form" action="mail.php" method="post">
  3.  
  4.                     <div class="input input-name">
  5.                         <h4 class="form-title">What is your name <span>*</span></h4>
  6.                         <div class="first-name">
  7.                             <input name="name1" type="text">
  8.                             <p>First Name</p>
  9.                         </div>
  10.                         <div class="last-name">
  11.                             <input name="name2" type="text">
  12.                             <p>Last Name</p>
  13.                         </div>
  14.                     </div>
  15.                     <div class="input input-phone">
  16.                         <h4 class="form-title">Phone Number <span>*</span></h4>
  17.                         <input name="tel" type="tel" >
  18.                     </div>
  19.                     <div class="input input-address">
  20.                         <h4 class="form-title">Your address <span>*</span></h4>
  21.                         <input name="street" type="text">
  22.                         <p>Please provide detailed address
  23.                             for faster delivery. Town, area,
  24.                             tower name or Nr. and unit Nr. WE DO
  25.                             NOT ACCEPT THE ORDER WITHOUT ADDRESS DETAILS!</p>
  26.                     </div>
  27.                     <button class="button" type="submit">order</button>
  28.                 </form>
  29.             </div>


PHP:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. /* Задаем переменные */
  4. $name1 = htmlspecialchars($_POST["name1"]);
  5. $name2 = htmlspecialchars($_POST["name2"]);
  6. $email = htmlspecialchars($_POST["street"]);
  7. $tel = htmlspecialchars($_POST["tel"]);
  8. $bezspama = htmlspecialchars($_POST["bezspama"]);
  9.  
  10. /* Ваш адрес и тема сообщения */
  11. $address = "83971andrey@gmail.com";
  12. $sub = "Message from the site http://hairdubai.m-owl.com/";
  13.  
  14. /* Формат письма */
  15. $mes = "Message from the site http://hairdubai.m-owl.com/\n
  16. Name: $name1
  17. Surname: $name2
  18. Address: $email
  19. Phone Number: $tel";
  20.  
  21. if (empty($bezspama)) /* Оценка поля bezspama - должно быть пустым*/
  22. {
  23.     /* Отправляем сообщение, используя mail() функцию */
  24.     $from  = "From: $name1 <$email> \r\n Reply-To: $email \r\n";
  25.     if (mail($address, $sub, $mes, $from)) {
  26.         header('Refresh: 5; URL=http://hairdubai.m-owl.com/');
  27.         echo '<head>
  28.    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
  29.    <body>Thank you for the order, in 5 seconds you will return to the page</body>';}
  30.     else {
  31.         header('Refresh: 5; URL=http://hairdubai.m-owl.com/');
  32.         echo '<head>
  33.    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
  34.    <body>Unfortunately we could not order, in 5 seconds you will return to the page</body>';}
  35. }
  36. exit; /* Выход без сообщения, если поле bezspama заполнено спам ботами */
  37. ?>
 
 Top
Vladimir Kheifets
Отправлено: 19 Сентября, 2017 - 10:03:32
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


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




Доброе утро!
1. Если Вы действительно хотите чтобы форма не отправлялась, то контроль нужно делать в JS(см. пример)
Спойлер (Отобразить)

2. Как сделано у Вас сейчас, форма отправляется, но если не заполнены обязательные поля, то не должно отправляться письмо.
Верно?
Для этого необходимо сделать в PHP контроль значений: $_POST["name1"], $_POST["name2"] и.т.д
Лучше проверять не на пустоту, а на заполнение полей с помощью preg_match
Конечно желательно добавить capcha

(Отредактировано автором: 19 Сентября, 2017 - 10:03:56)

 
 Top
Строитель Модератор
Отправлено: 19 Сентября, 2017 - 12:15:37
Post Id



Участник


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


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




Vladimir Kheifets пишет:
контроль нужно делать в JS
JS выполняется на стороне клиента, а всё что на клиенте - не надёжно. Поэтому все проверки надо выполнять на сервере.
 
 Top
Vladimir Kheifets
Отправлено: 19 Сентября, 2017 - 17:05:50
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


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




Строитель пишет:
Vladimir Kheifets пишет:
контроль нужно делать в JS
JS выполняется на стороне клиента, а всё что на клиенте - не надёжно. Поэтому все проверки надо выполнять на сервере.

Извините, Вы убрали часть передложения. Я написал
Цитата:
Если Вы действительно хотите чтобы форма не отправлялась, то контроль нужно делать в JS

Вы знаете как сделать иначе без JS, чтобы форма не отправлялась?
Думаю, что вопрос был сформулирован не верно.
На самом деле нужно запрещать отправку письма см. п2

(Отредактировано автором: 19 Сентября, 2017 - 17:07:03)

 
 Top
Строитель Модератор
Отправлено: 19 Сентября, 2017 - 17:12:54
Post Id



Участник


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


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




Vladimir Kheifets пишет:
Вы знаете как сделать иначе без JS, чтобы форма не отправлялась?
Можно сделать и на JS, и такую же проверку на PHP. Но на PHP сделать обязательно, а на JS - по желанию.
Vladimir Kheifets пишет:
Думаю, что вопрос был сформулирован не верно.
Я такого же мнения )
 
 Top
andrewkard
Отправлено: 19 Сентября, 2017 - 17:50:37
Post Id


Участник


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


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




aub97 пишет:
Как в данном коде сделать что-бы пустая форма или с неполными полями не отправлялась? Помогите пожалуйста.

Как вариант добавить атрибут required
<input type="text" name="usrname" required>
+ проверка на то, что Вы ожидаете увидеть в этих полях на сервере.
 
 Top
aub97
Отправлено: 20 Сентября, 2017 - 16:04:31
Post Id


Новичок


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


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




Vladimir Kheifets пишет:
Доброе утро!
1. Если Вы действительно хотите чтобы форма не отправлялась, то контроль нужно делать в JS(см. пример)
Спойлер (Отобразить)

2. Как сделано у Вас сейчас, форма отправляется, но если не заполнены обязательные поля, то не должно отправляться письмо.
Верно?
Для этого необходимо сделать в PHP контроль значений: $_POST["name1"], $_POST["name2"] и.т.д
Лучше проверять не на пустоту, а на заполнение полей с помощью preg_match
Конечно желательно добавить capcha


Я просто ещё не сосем разбираюсь в php, а как реализовать проверку конкретно для моего примера? Помоги пожалуйста

(Отредактировано автором: 20 Сентября, 2017 - 16:05:39)

 
 Top
andrewkard
Отправлено: 20 Сентября, 2017 - 22:41:57
Post Id


Участник


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


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




aub97 пишет:
Я просто ещё не сосем разбираюсь в php, а как реализовать проверку конкретно для моего примера? Помоги пожалуйста

сначала реализуйте проверку на клиенте, можно с помощью новых атрибутов,
required, pattern - подробнее тут: https://www[dot]w3schools[dot]com/html/h[dot][dot][dot]m_attributes[dot]asp

Если этого недостаточно, напишите код JS, который перехватит событие на клик по кнопке, проверит все поля, если все ок, отправит форму, иначе выведет ошибку.
Примеры
https://www[dot]w3schools[dot]com/js/js_validation[dot]asp
http://javascript[dot]ru/regexp/test
https://developer[dot]mozilla[dot]org/en[dot][dot][dot]/Form_validation

После получения формы на сервере, проверяете все поля на наличие данных, и на их соответствие паттернам,
PHP:
скопировать код в буфер обмена
  1.  
  2. $errors = [];
  3.  
  4. $firstName = $_POST['name1'];
  5.  
  6. if(empty($firstName) || !preg_match('/[A-z]{3,20}/',$firstName)){
  7.     $errors['name1'] = 'Error';
  8. }
  9.  
  10. if(empty($errors)){
  11.     mail();
  12. }
  13.  

иначе выводите ошибку в форме.
Как то так
 
 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