За последние 24 часа нас посетили 17677 программистов и 1672 робота. Сейчас ищут 1743 программиста ...

Не понимаю что не так с обработкой формы обратной связи...

Тема в разделе "Прочие вопросы по PHP", создана пользователем legal, 14 янв 2015.

  1. legal

    legal Новичок

    С нами с:
    14 янв 2015
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Москва
    Всем привет. Если что-то не так, заранее прошу извинить.Я не в курсе есть ли на самом деле такие страницы, но я их придумал в качестве примера - h ttp: //w ww.1.ru/feedback.php и h ttp: //w ww.1.ru/letsgo.php.

    Вопрос не скромный. Есть форма (скажем на h ttp: //w ww.1.ru/feedback.php ) и есть файлик php, который обрабатывает форму и выводит необходимые сообщения, но ни как не могу понять, почему если в форме не заполнено одно поле то файлик php выводит нужное сообщение и автоматом выкидывает на иную страницу - на h ttp: //w ww.1.ru/letsgo.php, а должно автоматом выкидывать на h ttp: //w ww.1.ru/1.php. Т.е., если что-то не заполнено, то должно выдавать сообщение, что не заполнено "..." и автоматом возвращать на форму, а не выкидывать автоматом на следующую страницу.

    На всякий случай привожу полный код обработчика.

    Код (Text):
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    5.   <meta http-equiv="refresh" content="10; url=http://www.1.ru/letsgo.php/">
    6.   <title>Feedbackform</title>  
    7. </head>
    8. <body>
    9. <div align="center">
    10. <table border="0" cellspacing="0" cellpadding="20" width="650">
    11. <tr>
    12. <td align="center">
    13. <p style="color: blue; font-size: 20px;">
    14.     <?php
    15.     /* Здесь проверяется существование переменных */
    16.     if (isset($_POST['name1'])) {$name1 = $_POST['name1'];}
    17.     if (isset($_POST['name2'])) {$name2 = $_POST['name2'];}
    18.     if (isset($_POST['name3'])) {$name3 = $_POST['name3'];}
    19.     if (isset($_POST['email'])) {$email = $_POST['email'];}
    20.     if (isset($_POST['tel'])) {$tel = $_POST['tel'];}
    21.     if (isset($_POST['pravo'])) {$pravo = $_POST['pravo'];}
    22.     if (isset($_POST['body'])) {$body = $_POST['body'];}
    23. /* Сюда впишите свою эл. почту */
    24.     $address = "questions@www.1.ru";
    25. /* А здесь прописывается текст сообщения, \n - перенос строки */
    26.     $mes = "Фамилия:  $name1 \nИмя:  $name2 \nОтчество:  $name3 \nE-mail: $email \nТелефон для связи: $tel \nВопрос о: $pravo \nКомментарий: $body";
    27.  /* А эта функция как раз занимается отправкой письма на указанный вами email */
    28.     $send = mail ($address,$pravo,$mes,"Content-type:text/plain; charset = utf-8\r\nFrom:$email");
    29.    
    30. /* А эта функция занимается обработкой введённых данных в форме перед отправкой письма на указанный вами email */
    31.     if (empty($name1))
    32.     {
    33.     echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указана фамилия!</b></span></p>";
    34.     echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
    35.     echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxxx.ru/partners/200x300.gif' alt='XXX' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
    36.     exit;
    37.     }
    38.         if (empty($name2))
    39.     {
    40.     echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указано имя!</b></span></p>";
    41.     echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
    42.     echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
    43.     exit;
    44.     }
    45.         if (empty($name3))
    46.     {
    47.     echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указано отчество!</b></span></p>";
    48.     echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
    49.     echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
    50.     exit;
    51.     }
    52.     else
    53.         if (empty($email))
    54.     {
    55.     echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указан e-mail!</b></span></p>";
    56.     echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
    57.     echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
    58.     exit;
    59.     }
    60.     else
    61.         if (empty($tel))
    62.     {
    63.     echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указан телефон!</b></span></p>";
    64.     echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
    65.     echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
    66.     exit;
    67.     }
    68.     else
    69.         if (empty($pravo))
    70.     {
    71.     echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указана тема вопроса!</b></span></p>";
    72.     echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
    73.     echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
    74.     exit;
    75.     }
    76.     else
    77.         if (empty($body))
    78.     {
    79.     echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Вы забыли написать комментарий?</b></span></p>";
    80.     echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
    81.     echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
    82.     exit;
    83.     }
    84.     else
    85.  
    86. /* А эта функция занимается выводом сообщения на экран после верного заполнения формы обратной связи и ошибки отправки сообщения */
    87.  
    88.     if ($send == 'true')
    89.     {
    90.     echo $a = "<a href='http://www.1.ru/letsgo'><img src='http://xxx.ru/feedbackmess/image/xxx(500x221).png' border=0 title='Перейти'></a><br>\n<br>\nВаша заявка принята.<br>\nСообщение успешно отправлено.<br><br>\nВы будете перенаправлены на форму оплаты в течении 10 секунд.<br>\n<br>\nЕсли не хотите ждать, а хотите перейти к оплате сразу,<br>\n <a href='http://www.1.ru/letsgo>нажмите на эту ссылку</a>.<br>\n <img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'>";
    91.     }
    92.     else
    93.     {
    94. echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости что-то и где-то пошло не совсем так как надо.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
    95.     }
    96.     ?>
    97.     </p>
    98. </td>
    99. </tr>
    100. </table>
    101. </div>
    102. </body>
    103. </html>
    Вы меня извините ещё раз, но не особо я дружу с PHP, HTML с юриспруденцией мне гораздо ближе...

    А ещё, жуть как интересно, как сделать подтверждение авторизации как на этом форуме. Очень порадовало. Админ, свяжись со мною. плиз.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: Не понимаю почему не так...

    качни движок пхпбб и прибудет с тобой счастье.
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Re: Не понимаю почему не так...

    Код нечитаемый... Совет - наймите фрилансера, он вам всё сделает... Если хотите делать сами, то придётся освоить программирование php на том же уровне, что юриспруденцию. Пока вы "не особо дружите с php", советы вам не сильно помогут.
     
  4. legal

    legal Новичок

    С нами с:
    14 янв 2015
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Москва
    Re: Не понимаю почему не так...

    Целиком оно мне не надо ;)
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: Не понимаю почему не так...

    а я как бы про алгоритм подтверждения авторизации ;)
     
  6. legal

    legal Новичок

    С нами с:
    14 янв 2015
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Москва
    Re: Не понимаю почему не так...

    Да где же найти такого молодца, чтобы не подвёл бы? Был опыт печален, вот теперь сам разбираюсь. Ну, а коль брать фрилансера (ненавижу эти слова взаимствованные из англ.) на то, чтобы он показал мою ошибку в этом коде и отдать кучу денег за это... На мой взгляд это равноценно, как отдать на заправке кучу денег человеку, который тебе поставит пистолет АЗС в горловину бака твоего авто... А переделывать целиком весь сайт - пока нет необходимости. Если бы я был заинтересован в поиске конкретного работника (фрилансера) на полную переделку сайта - то нанял бы его на работу, и здесь меня уж точно не было бы. Я прошу просто помочь, как часто помогаю людям и сам. Творить добрые дела всегда приятно.
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  8. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Re: Не понимаю почему не так...

    ты привел код некой страницы, там отсылается письмо(всегда) и генерится куча сообщений об ошибках.
    никаких перенаправлений на другие страницы, или форм там нет.
    т.е. описанная проблема в другом скрипте, похоже.
    если так, давай его код.
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Re: Не понимаю почему не так...

    Ну а о чём говорить, если вы всё равно не поймёте? Вот у вас в коде, сначала письмо отправляется, а потом проверяется, все ли необходимые поля заполнил человек. Вроде нужно по-другому делать... Во-вторых, в по хорошему, в скрипте отправки не должно быть никакого HTML - там должен быть только код проверки корректности введённых данных и отправки письма. После чего этот скрипт должен в сессию записать факт успешной отправки или найденные ошибки, и переадресовать браузер на другую страницу, либо с сообщением об успехе, либо с формой с подсвеченными полями и ошибками. Так что, по меньшей мере эту часть сайта точно надо переписать полностью.

    С подтверждением регистрации через e-mail - это не сложно делается, и объяснить не трудно, если человек хоть немного в теме....
     
  10. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Re: Не понимаю что не так с обработкой формы обратной связи.

    а все нашел.
    на странице есть строка
    <meta http-equiv="refresh" content="10; url=http://www.1.ru/letsgo.php/">
    вот она через 10 секунд и кидает посетителя на letsgo.php
     
  11. legal

    legal Новичок

    С нами с:
    14 янв 2015
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Москва
    Re: Не понимаю что не так с обработкой формы обратной связи.

    Я особо не думал, что эта строка сильно повлияет, если будет выводиться код об ошибке заполнения, но предполагал это. А как мне сделать чтобы было так как надо?
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Re: Не понимаю что не так с обработкой формы обратной связи.

    не выводи перенаправление когда есть ошибки, или как надо?
     
  13. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Re: Не понимаю что не так с обработкой формы обратной связи.

    эту строку точно убрать.
    такие вещи делаются логикой на пхп. это уже отдельный вопрос. несложный, но требующий времени на реализацию.
    начнешь делать - подскажем.
     
  14. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Re: Не понимаю что не так с обработкой формы обратной связи.

    legal, у вас письмо уходит в любом случае, и при ошибках, и когда всё правильно. Я же написал. Вы сначала отправляете письмо, а потом пишите всю вашу галиматью по поводу проверок:
    Код (Text):
    1.  
    2. /* А эта функция как раз занимается отправкой письма на указанный вами email */
    3.    $send = mail ($address,$pravo,$mes,"Content-type:text/plain; charset = utf-8\r\nFrom:$email");
    4.    
    5.    // Всё, письмо уже ушло, ну и какого фига всё это проверять?
    6. /* А эта функция занимается обработкой введённых данных в форме перед отправкой письма на указанный вами email */
    7.    if (empty($name1))
    8.    {
    9.    echo "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указана фамилия!</b></span></p>";
    10.    echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
    11.    echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxxx.ru/partners/200x300.gif' alt='XXX' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости вы что-то и где-то не указали в форме.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
    12.    exit;
    13.    }
    Ну и я уже написал, и runcore ещё раз тоже самое написал, не так это должно делаться. Делается через сессии, https://php.net/manual/ru/book.session.php
     
  15. legal

    legal Новичок

    С нами с:
    14 янв 2015
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Москва
    Re: Не понимаю что не так с обработкой формы обратной связи.

    А вы для начала попробуйте поговорить, а потом уж делайте выводы, пойму ли я вас или нет.
    У людей есть язык с помощью которого они разговаривают и голова с мозгами благодаря которой люди находят общий язык во время общения. Во всяком случае, когда мне приходится общаться с людьми не знающими юриспруденцию, я стараюсь говорить на их языке и в большинстве случаев мне это удаётся. Удастся ли у вас. Пока не знаю.

    Весьма насторожило меня ваша фраза:
    Не соглашусь с вашим мнением по поводу:
    От части возможно и соглашусь с Вами, но после переадресации мы видим страницу с красиво оформленным сообщением об успехе или ошибке и это всё благодаря этому коду в одном файле. Другое дело, если переадресованная страница со сведениями об успехе или ошибке должна быть на общем фоне этого сайта, т.е. в первом случае белый фон и слова " всё хорошо и вас сейчас автоматом перекинет на нужную страницу" или тоже самое, но в конкретном месте на конкретной странице сайта без его визуального изменения.
    Данный код взят из одного файла, который после успеха введённых всех данных в форме работает как надо (правда выводится не на общем фоне этого сайта, а на белой странице), а вот когда не введено одно из полей... от части ведёт себя как надо, т.е. говорит что не так и отсылает всё равно как будто всё введено правильно. А мне нужно чтобы он отсылал обратно к форме.
     
  16. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Re: Не понимаю что не так с обработкой формы обратной связи.

    есть там строка
    $send = mail ($address,$pravo,$mes,"Content-type:text/plain; charset = utf-8\r\nFrom:$email");
    она посылает письмо.
    так вот.
    ОНА ВЫПОЛНЯЕТСЯ ВСЕГДА. даже если чегото не ввели в форму.
    и текст ошибок по сути ничего не меняет. письмо то уже ушло.
     
  17. legal

    legal Новичок

    С нами с:
    14 янв 2015
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Москва
    Re: Не понимаю что не так с обработкой формы обратной связи.

    Вот как мне сделать так, чтобы проверил - поле не введено и отправил через 10 секунд посетителя обратно к форме.
    Какой код написать?

    Добавлено спустя 16 минут 13 секунд:
    Re: Не понимаю что не так с обработкой формы обратной связи...
    На сколько я понимаю, через сессии это всё хорошо, но по всей видимости сильно нагружает сервер... и могут возникнуть проблемы с хостером...
     
  18. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Радости прибавилось, так как теперь неправильные письма не отправляются. Это всё по-другому надо писать. Как - я уже указал. Для этого надо и часть, выводящую форму сменить, и этот скрипт. В таком виде его править смысла нет - всё равно нормально работать не будет. Должно быть примерно так, если вы уж сами прочитать ленитесь:
    Код (PHP):
    1. $errors = array ();
    2. if (empty ($_POST["name1"]))
    3.    $errors = "Заполните имя";
    4. // Далее идут все остальные проверки
    5.  
    6. // Если после всех проверок массив $errors остался пустой, отправляем письмо и переадресуем пользователя на страницу с успехом
    7. if (empty($errors)) {
    8.     /* здесь идёт подготовка письма - ну это у вас в скрипте имеется */
    9.      mail(/* ну тут вы и сами знаете, что должно быть */);
    10.      header("Location: success.php");
    11.      die;
    12. }
    13.  
    14. // Если дошли до этого места, значит форма заполнена неверно. Сохраняем в сессию ошибки, сохраняем в сессию введённые данные,
    15. // Чтоб пользователю не пришлось вводить заново то, что введено верно, и отправляем пользователя снова заполнять форму
    16. $_SESSION["errors"] = $errors;
    17. $_SESSION["form_data"] = $_POST;
    18. header("Location: /feedback.php");
    19.  
    Как изменить код формы, может напишу чуть позже, если сами не догадаетесь.
     
  19. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    попробуйте это
    Код (PHP):
    1. <?php
    2.     define('URL_FEEDBACK', 'http://www.1.ru/feedback.php');
    3.     define('URL_LETSGO',   'http://www.1.ru/letsgo.php');
    4.  
    5.     $name1=$name2=$name3=$email=$tel=$pravo=$body='';
    6.        /* Здесь проверяется существование переменных */
    7.        if (isset($_POST['name1'])) {$name1 = $_POST['name1'];}
    8.        if (isset($_POST['name2'])) {$name2 = $_POST['name2'];}
    9.        if (isset($_POST['name3'])) {$name3 = $_POST['name3'];}
    10.        if (isset($_POST['email'])) {$email = $_POST['email'];}
    11.        if (isset($_POST['tel']))   {$tel   = $_POST['tel'];}
    12.        if (isset($_POST['pravo'])) {$pravo = $_POST['pravo'];}
    13.        if (isset($_POST['body']))  {$body  = $_POST['body'];}
    14.  
    15.     $err = array(); // ошибки
    16.  
    17.     /* А эта функция занимается обработкой введённых данных в форме перед отправкой письма на указанный вами email */
    18.        if (empty($name1)) {
    19.            $err[]= "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указана фамилия!</b></span></p>";
    20.        }
    21.        if (empty($name2)) {
    22.     $err[]= "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указано имя!</b></span></p>";
    23.        }
    24.        if (empty($name3)) {
    25.         $err[]= "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указано отчество!</b></span></p>";
    26.        }
    27.        if (empty($email)) {
    28.         $err[]= "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указан e-mail!</b></span></p>";
    29.        }
    30.        if (empty($tel)) {
    31.         $err[]= "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указан телефон!</b></span></p>";
    32.        }
    33.        if (empty($pravo)) {
    34.         $err[]= "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Не указана тема вопроса!</b></span></p>";
    35.        }
    36.        if (empty($body)) {
    37.         $err[]= "<p><span style='text-align: center; font-size: 15px; color: red;'><b>Вы забыли написать комментарий?</b></span></p>";
    38.        }
    39.  
    40.     /* если НЕТ ошибок */
    41.     if (sizeof($err)==0)
    42.     {
    43.          /* Сюда впишите свою эл. почту */
    44.          $address = "questions@www.1.ru";
    45.          /* А здесь прописывается текст сообщения, \n - перенос строки */
    46.          $mes = "Фамилия:  $name1 \nИмя:  $name2 \nОтчество:  $name3 \nE-mail: $email \nТелефон для связи: $tel \nВопрос о: $pravo \nКомментарий: $body";
    47.          /* А эта функция как раз занимается отправкой письма на указанный вами email */
    48.          $send = mail ($address,$pravo,$mes,"Content-type:text/plain; charset = utf-8\r\nFrom:$email");
    49.     }
    50.     
    51. ?>
    52.     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
    53.     <html xmlns="http://www.w3.org/1999/xhtml">
    54.     <head>
    55.       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    56.     <?php if (sizeof($err)==0) { // no error ?>
    57.         <meta http-equiv="refresh" content="10; url=<?php echo URL_LETSGO;?>">
    58.     <?php } else { // error ?>
    59.         <meta http-equiv="refresh" content="10; url=<?php echo URL_FEEDBACK;?>">
    60.     <?php } ?>
    61.       <title>Feedbackform</title> 
    62.     </head>
    63.     <body>
    64.     <div align="center">
    65.     <table border="0" cellspacing="0" cellpadding="20" width="650">
    66.     <tr>
    67.     <td align="center">
    68.     <p style="color: blue; font-size: 20px;">
    69. <?php
    70.     if (sizeof($err)>0) { // errors
    71.         echo join('<br />', $err);
    72.         echo "<p><span style='text-align: center; font-size: 15px; color: red; text-decoration: underline;'><b>Убедительно просим Вас указывать все данные в форме.</b></span></p>";
    73.     } else { // no errors
    74.          /* А эта функция занимается выводом сообщения на экран после верного заполнения формы обратной связи и ошибки отправки сообщения */
    75.          if ($send == 'true')
    76.          {
    77.           echo $a = "<a href='http://www.1.ru/letsgo'><img src='http://xxx.ru/feedbackmess/image/xxx(500x221).png' border=0 title='Перейти'></a><br>\n<br>\nВаша заявка принята.<br>\nСообщение успешно отправлено.<br><br>\nВы будете перенаправлены на форму оплаты в течении 10 секунд.<br>\n<br>\nЕсли не хотите ждать, а хотите перейти к оплате сразу,<br>\n <a href='http://www.1.ru/letsgo>нажмите на эту ссылку</a>.<br>\n <img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'>";
    78.          }
    79.          else
    80.          {
    81.          echo $a = "<a href='http://www.1.ru/feedback'><img src='http://xxx.ru/feedbackmess/image/xxx.jpg' style='border: 0px solid black; margin: 0px 0px 55px 0px;' width='300' height='190' title='Перейти'></a><img src='http://xxx.ru/partners/200x300.gif' alt='xxx' style='border: 0px solid black;' width='200' height='300'><br>\nК большому разочарованию, Ваше сообщение не отправлено.<BR> По всей видимости что-то и где-то пошло не совсем так как надо.<br>\nВы будете перенаправлены обратно в течении 10 секунд. <br>\nНо вы можете не ждать и самостоятельно вернуться обратно<br>\n просто нажмите <a href='http://www.1.ru/feedback'>сюда</a><br>";
    82.          }
    83.     }
    84. ?>
    85.        </p>
    86.     </td>
    87.     </tr>
    88.     </table>
    89.     </div>
    90.     </body>
    91.     </html>
     
  20. legal

    legal Новичок

    С нами с:
    14 янв 2015
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Москва
    Re: Не понимаю что не так с обработкой формы обратной связи.

    Спасибо, большое. Разобрался, доработал малость. Вроде работает всё как часы. Буду рад если данный код поможет ещё кому-нибудь реализовать обработку формы обратной связи.
    В дополнение к теме, выкладываю свою небольшую форму обратной связи:
    Код (Text):
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
    2. <html>  
    3.  <head>  
    4.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
    5.   <title>Форма обратной связи</title>  
    6.  </head>
    7. <style>
    8. #Feedbackform /* Стили к самой форме */
    9. {
    10.     font-family: Arial, 'Times New Roman', Times, serif; sans-serif; /* Говорится, какой шрифт будет использоваться, данном случае Arial */
    11.     font-size: 13px; /* Размер шрифта 12 пикселей */
    12.     padding: 10px; /* Отступы внутри формы шириной 10 пикселей */
    13.     border: 1px solid #ddd; /* Сплошная рамка вокруг формы шириной 1 пиксель и цветом #ddd */
    14.     border-top: 0px; /* Говорит, что вверху рамки не должно быть */
    15.     width: 470px; /* Ширина 470 пикселей */
    16.     border-radius:  5px;
    17.     background: #eee; /* Фоновый цвет формы #eee */
    18. }
    19. .Feedback /* Стили к классу Feedback */ {
    20.     font-size: 20px; /* Размер шрифта 12 пикселей */
    21.     font-family: Times, Helvetica, serif; /* Говорится, какой шрифт будет использоваться, данном случае Arial */
    22.     color: #333; /* Цвет текста #333 */
    23.     background: #fff; /* Фоновый цвет #fff */
    24.     width: 492px; /* Ширина 360 пикселей */
    25.     border-radius:  5px;
    26.     padding: 5px; /* Отступы от всех краев размером 5 пикселей */
    27.     border: 1px solid #ddd; /* Сплошная рамка вокруг шириной 1 пиксель и цветом #ddd */
    28. }
    29. .input /* Стили для класса input */ {
    30.     font-family: Times New Roman, Times, serif;
    31.     font-style: italic;
    32.     font-size: 13px;
    33.     text-indent: 10px;
    34.     text-align: left;
    35.     color: blue;
    36.     border-radius:  5px;
    37.     width: 320px; /* Ширна 320 пикселей */
    38.     border: 1px solid #ddd99; /* Сплошная рамка вокруг шириной 1 пиксель и цветом #ddd */
    39. }
    40. .textarea /* Стили к тегу textarea */ {
    41.     font-family: Arial, 'Times New Roman', Times, serif;
    42.     font-style: italic;
    43.     font-size: 13px;
    44.     color: darkgreen; bold;
    45.     text-indent: 10px;
    46.     resize: none;
    47.     padding: 5px;
    48.     width: 312px; /* Ширина 312 пикселей */
    49.     border-radius:  5px;
    50.     border: 1px solid #ddd99; /* Сплошная рамка вокруг шириной 1 пиксель и цветом #ddd */
    51. }
    52. .column /*колонка 1*/ {
    53.    font-family: Arial, Helvetica, san-serif;
    54.    text-shadow: 1px 1px 20px grey, 0 0 0em blue;
    55.    color: black;
    56.    text-align: center;
    57.    width: 90px; /* Ширина 230 пикселей */
    58.    border: 0px solid #ddd; /* Сплошная рамка вокруг шириной 1 пиксель и цветом #ddd */
    59. }
    60. .star {
    61.      color: #ff0000; /* Красный цвет символов */
    62.      font-size: 18px;
    63.      font-weight: bold;
    64.      font-family: serif; /* Шрифт с засечками */
    65.      position: relative; /* Относительное позиционирование */
    66. }
    67. </style>
    68. <body>
    69.  <div align="center">
    70. <div class="Feedback">
    71. <p><b>Заполните данную форму,<br>и мы с вами свяжемся.</b></p>
    72. <div id="Feedbackform">
    73. <form name="MyForm" action="/feedbackmess/feedback.php" method="post">
    74.   <table>
    75.   <tr>
    76.   <td><span class="column">Ваша фамилия:</span></td>
    77. <td>  
    78.   <input class="input" name="name1" type="text" size="30" placeholder="Иванов" pattern="[А-Яа-яЁё]{3,}" required maxlength="30">
    79.   </td>
    80.   <td><span class="star">*</span></td>
    81.   </tr>
    82.   <tr>
    83.   <td><span class="column">Ваше имя:</span></td>
    84. <td>  
    85.   <input class="input" name="name2" type="text" size="30" placeholder="Иван" pattern="[А-Яа-яЁё]{3,}" required maxlength="30">
    86.   </td>
    87.   <td><span class="star">*</span></td>
    88.   </tr>
    89.   <tr>
    90.   <td><span class="column">Ваше отчество:</span><br></td>
    91. <td>  
    92.   <input class="input" name="name3" type="text" size="30" placeholder="Иванович" pattern="[А-Яа-яЁё]{3,}" required maxlength="30">
    93.   </td>
    94. <td><span class="star">*</span></td>
    95.   </tr>
    96.   <tr>
    97.   <td><span class="column">Эл. почта:</span><br></td>
    98.    <td>  
    99.   <input class="input" name="email" type="email" size="30" placeholder="ivanov_ii@mail.ru" required maxlength="30">
    100.   </td>
    101.  <td><span class="star">*</span></td>
    102.   </tr>
    103.   <tr>
    104.   <td><span class="column">Конт.телефон:</span><br></td>
    105.    <td>
    106.    <input class="input" type="tel" name="tel" pattern="8-[0-9]{3}-[0-9]{3}-[0-9]{2}-[0-9]{2}" placeholder="образец: 8-903-123-45-67" size="30" required maxlength="20">
    107.   </td>
    108.   <td><span class="star">*</span></td>
    109.   </tr>
    110.  
    111.     <tr>
    112.     <td><span class="column">Ваш вопрос о:</span></td>
    113.     <td>
    114.         <select name="pravo">
    115.     <optgroup label="">
    116.         <option value="Тема вопроса не определена">Выберете необходимую область</option>
    117.     </optgroup>
    118.     <optgroup label="Тема 1">
    119.         <option value="Тема 1.1.">Тема 1.1.</option>
    120.         <option value="Тема 1.2.">Тема 1.2.</option>
    121.     </optgroup>
    122.     </select>
    123.    </td>
    124.    <td><span class="star">*</span></td>
    125.    </tr>
    126.     <tr>
    127.         <td valign="top"><span class="column">Комментарий:</span></td>
    128.         <td><textarea class="textarea" name="body" rows="10" cols="70" placeholder="Введите текст вашего сообщения, например: Желательно перезвонить в период с 10:00 до 11:00." maxlength="1000"></textarea><br>
    129.        </td>
    130.    </tr>
    131.    <tr>
    132.       <td>
    133.       </td>
    134.       <td>
    135.        <p align="center"><span style="font-size: 10px; color: gray;">*Можно ввести не более 1000 символов с учётом пробелов.</span><br>
    136. </span></p>
    137.       </td>
    138.    </tr>
    139.    <tr>
    140.       <td colspan="3">
    141.     <p align="center"><span style="font-size: 10px; color: red;">!!! поля помеченные символом - <span class="star"><sub>*</sub></span> - обязательны к заполнению !!!</span></p>
    142.         </td>
    143.     </tr>
    144.     <tr>
    145.     <td align="left"><input type="reset" value="Очистить поля"></td>
    146.     <td align="right"><input value="Отправить" type="submit"/></td>
    147.     </tr>
    148.   </table>
    149. </form>
    150. </div>
    151. </div>
    152. </div>
    153. </body>
    154. </html>
     
  21. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Re: Не понимаю что не так с обработкой формы обратной связи.

    Написал небольшую статью про обработку форм. Может, кому-нибудь пригодится. Обработка формы вынесена в отдельный файл, благодаря традиционным редиректом есть защита от повторной отправки данных при обновлении страницы. Также значения верно заполненных полей сохраняются. Код проверял на php 5.5, для php < 5.4 нужно будет новый синтаксис задания массивов заменить на старый.
    http://kramerblog.net/universal-ny-j-obrabotchik-form-na-php-svoimi-rukami/