Я сгенерил где-то форму обратной связи и изменил ее под свои нужды. Форма и обработчик находятся в одном файле, ошибки: не заполненные поля, кривой e-mail, капча – выводятся вверху формы в div. Для этого кусок кода обработчика поместил в div. На этом этапе все нормально.
Но при отправке письма, в блок див, кроме echo 'Сообщение отправлено…, также запихивается и вся страница.
И второе – как можно сделать так, чтобы не заполненное поле с e-mail не проверялось до тех пор, пока в нем не введут какой нить текст. Например, если юзер ничего не ввел в поле ВАШ E-MAIL, то будут две ошибки:
- заполните поле Ваш e-mail
- Введенный вами адрес e-mail имеет неправильный формат
Пожалуйста, посмотрите нижеприведенный обработчик и если сможете, помогите
<div style="width:500px; margin:0 auto; text-align:left; color:#003300; font:12px tahoma, verdana; background:#F5F5F5;">
<?
session_start ();
error_reporting(0);
function show_form()
{
$_SESSION['code'] = rand(1000, 9999); // этот кусок кода поместил в div
?>
</div>
<?
}
function complete_mail() {
$empty_input[0] = '<font color="red">Ваше имя</font>';
$empty_input[1] = '<font color="red">бла-бла-бла</font>';
$empty_input[2] = '<font color="red">бла-бла-бла</font>';
$empty_input[3] = '<font color="red">бла-бла-бла</font>';
$empty_input[4] = '<font color="red">e-mail</font>';
$empty_input[5] = '<font color="red">бла-бла-бла</font>';
$empty_input[6] = '<font color="red">бла-бла-бла</font>';
echo "<H4 align=center>Пожалуйста, заполните указанные ниже поля<br></H4>";
for ($i=0; $i<count($_POST['input_name']); $i++) {
$_POST['input_name'][$i] = substr(htmlspecialchars(trim($_POST['input_name'][$i])), 0, 100000);
if(substr(htmlspecialchars(trim($_POST['check'][$i])), 0, 1) == 1) {
if(empty($_POST['input_name'][$i])) {
$sendemail = 'No';
echo '<br />Необходимо заполнить поле: '.$empty_input[$i].'';
}
}
}
$YourMail=$_POST['input_name'][4];
if (!preg_match("/^(?:[a-z0-9]+(?:[-_]?[a-z0-9]+)?@[a-z0-9]+(?:\.?[a-z0-9]+)?\.[a-z]{2,5})$/i",trim($YourMail)))
{echo "<br><b>Введенный вами адрес e-mail (<a href=\"mailto:$YourMail\">$YourMail</a>) имеет неправильный формат.<b>";
$sendemail = 'No';
}
if (empty($_POST['code']) or empty($_SESSION['code'])) {
echo '<br><b>Вы не указали код подтверждения</b>';
$sendemail = 'No';
} elseif ($_POST['code'] != $_SESSION['code']) {
echo '<br><b>Код подтверждения не совпадает</b>';
$sendemail = 'No';
}
if($sendemail == 'No') show_form();
$mess = '';
$mess .= '<b>Ваше имя: </b>'.$_POST['input_name'][0].'<br />';
$mess .= '<b>бла-бла-бла: </b>'.$_POST['input_name'][1].'<br />';
$mess .= '<b>бла-бла-бла: </b>'.$_POST['input_name'][2].'<br />';
$mess .= '<b>бла-бла-бла: </b>'.$_POST['input_name'][3].'<br />';
$mess .= '<b>e-mail: </b>'.$_POST['input_name'][4].'<br />';
$mess .= '<b>бла-бла-бла: </b>'.$_POST['input_name'][5].'<br />';
$mess .= '<b>бла-бла-бла: </b>'.$_POST['input_name'][6].'<br />';
$mess .= '<b>бла-бла-бла: </b>'.$_POST['input_name'][7].'<br />';
$mess .= "дата: ".date("Y-m-d")."\n";
$mess .= "время: ".date("H:i");
require 'class.phpmailer.php';
$mail = new PHPMailer();
$mail->From = $YourMail;
$mail->FromName = $_POST['input_name'][0];
$mail->AddAddress('vasya@rambler.ru', 'vasyas@rambler.ru');
$mail->IsHTML(true);
$mail->Subject = 'выставить счет';
$mail->Body = $mess;
if(isset($_FILES['attachfile'])) {
if($_FILES['attachfile']['error'] == 0){
$mail->AddAttachment($_FILES['attachfile']['tmp_name'], $_FILES['attachfile']['name']);
}
}
if($sendemail != 'No'){
if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
// при отправке письма, в блок DIV кроме echo 'Сообщение отправлено…, также запихивается и вся страница.
echo "<H3 align=left>Сообщение отправленно...<br>
Через 5 секунд, страница обновится автоматически... </H3>
<META HTTP-EQUIV=\"Refresh\" CONTENT=\"5; URL=../?page=oplata_\">";
}
}
if (!empty($_POST['submit'])) complete_mail();
else show_form();
?>