Проблема заключается в следующем: после нажатия кнопки "отправить" на экран выводится информация в неправильном виде (выводится всё сразу, на циклы внимание не обращается). + сообщения об отправке или об ошибке выводятся на отдельной страницу, а не до формы. + не понятно, как делать ссылку "отправить ещё раз" HTML: <!DOCTYPE HTML> <html> <head> <meta charset=UTF-8> <title>DZ14</title> </head> <body> <div id="wrap"> <!--Сверстать форму с полями: ваше имя, ваш емейл, ваш телефон (не обязательно), сообщение, отправить. После отправки пользователь видит сообщение об успешной отправке и письмо приходит на емейл, указанный в настройках, например: lamben@ya.ru со всеми введенными данными. 1. сообщения (об ошибке, об отправке, незаполненных полях) выводить ДО формы 2. сообщения выводить в красивой рамке (на зеленом фоне успешная отправка, на красном - ошибки) 3. если отправлено, то не выводить форму, показать сообщение "ваше сообщение успешно отправлено." и ссылку "отправить еще раз" 4. если отправлено делать редирект, чтобы нажав F5 сообщение не отправилось 5. проверять введенные данные, даже если атрибут required не поддерживается браузером--> <div id="form"> <form method="post" name="form1" action="send.php"> <p>Ваше имя:</p> <p><input type="text" name="name" required></p> <p>Ваш емейл:</p> <p><input type="text" name="email" required></p> <p>Ваш телефон:</p> <p><input type="text" name="phone"></p> <p>Сообщение:</p> <p><textarea name="text" required></textarea></p> <input type="submit" name="send" value="Отправить" id="sub"> </form> </div> </div> </body> </html> PHP: <?php error_reporting(E_ALL); mb_internal_encoding("UTF-8"); $to = 'unibix@ya.ru' $subject = 'Форма обратной связи'; $message = 'Имя' . $_POST['name'] . '<br />' . 'Емейл' . $_POST['email'] . '<br/>' . 'Телефон' . $_POST['phone'] . '<br/>' . 'Сообщение' . $_POST['text']; $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; mail($to, $subject, $message, $headers); $mail = mail($to, $subject, $message, $headers); if($mail){ echo <div class="yes">'Ваше сообщение успешно отправлено.'</div>; } else{ echo <div class="no">'При отправлении письма произошла ошибка. Письмо не доставлено'</div>; } ?> Код (CSS): .yes { background:green; border:1px solid black; } .no { background:red; border:1px solid black; }
@DimaP У тебя здесь нет циклов! if/else - это не циклы. Это условные операторы. и ещё что это за хрень PHP: mail($to, $subject, $message, $headers); $mail = mail($to, $subject, $message, $headers); Ты пытаешься два раза отправить? Или ты думаешь, а я даже не знаю как местом ты думаешь... Смотри внимательно объясняю на пальцах: При вызове функции, плевать где: хоть так if(mail()) , хоть так $mail = mail() php сначала вызовет функцию, а потом уже сделает последующие действия. При этом при вызове процедуры в данном случае будет синтаксическая ошибка, но функции вызывать можно как угодно. Откуда ты отправляешь сообщение на почту? С локалки или с хоста? Твой php код хранится в файле send.php? И ещё заключи весь код в файле send.php в такую вот конструкцию : PHP: if(isset($_POST['send'])) { // тут уже делай проверку получаемых данных и их отправку. }