cap4369
Новичок
Здравствуйте!
Сделал форму обратной связи с математической проверкой спама. Однако при проверке сессионных переменных выдается ошибка о неправильном ответе. При распечатке массива $_SESSION после нажатия кнопки выводится:
Array(
[captcha] => 9
[res_captcha] => 19
),
то есть при нажатии кнопки отправки сообщения меняется сессионная переменная $_SESSION['captcha'] и результат введенный мной в поле input естественно уже не равен новому значению. Помогите разобраться как сделать так, чтобы при отправке сообщения сессионные переменные оставались равными.
Здесь $a и $b случайные переменные, которые выводятся в браузере.
Сделал форму обратной связи с математической проверкой спама. Однако при проверке сессионных переменных выдается ошибка о неправильном ответе. При распечатке массива $_SESSION после нажатия кнопки выводится:
Array(
[captcha] => 9
[res_captcha] => 19
),
то есть при нажатии кнопки отправки сообщения меняется сессионная переменная $_SESSION['captcha'] и результат введенный мной в поле input естественно уже не равен новому значению. Помогите разобраться как сделать так, чтобы при отправке сообщения сессионные переменные оставались равными.
PHP:
<?php
include "config.php";
if($_POST['submit']){
session_start();
// определяем переменные
$name = substr($_POST['name'], 0, 20);
$mail = substr($_POST['mail'], 0, 20);
$text = substr($_POST['text'], 0, 2000);
$captcha = $_POST['captcha'];
// проверка заполнения обязательных полей
$error = '';
$pattern = "/^.+@[a-z0-9]+\.[a-z]{2,6}$/i";
if(empty($name)) $error = '<li>Не заполнено поле "Имя"</li>';
if(empty($mail)) $error .= '<li>Не заполнено поле "Email"</li>';
if(empty($text)) $error .= '<li>Не заполнено поле "Сообщение"</li>';
if(empty($captcha)) $error .= '<li>Не заполнено поле "Введите ответ"</li>';
if(!empty($mail) and !preg_match($pattern, $mail)) $error .= '<li>Поле "Ваш Email:" не соответствует установленному формату</li>';
if($captcha != $_SESSION['res_captcha']) $error .= '<li>Ответ на вопрос неверный</li>';
if(empty($error)) {
// определяем переменные
$to = '[email protected]';
$subject = "\r\n".'Заполнена форма на сайте'. "\r\n";
$message = "\r\n"."Имя: " .$name. "\r\n";
$message .= "Обратный e-mail: " .$mail. "\r\n";
$message .= "Текст сообщения: " .$text. "\r\n";
$headers = "Content-type: text/plain; charset = \"utf-8\"";
// формируем сообщение
if(mail($to, $subject, $message, $headers)) {
$_SESSION['res'] = $name.', Ваше письмо успешно отправлено.';
header("Location: $site_url?option=contacts");
exit();
}
else {
$_SESSION['res'] = 'Произошла ошибка. Попробуйте еще раз.';
header("Location: $site_url?option=contacts");
exit();
}
}
else {
$_SESSION['res'] = "<strong>Не заполнены обязательные поля или допущены ошибки:</strong><ul>" .$error. "</ul>";
$_SESSION['name'] = $name;
$_SESSION['mail'] = $mail;
$_SESSION['text'] = $text;
$_SESSION['captcha'] = $captcha;
header("Location: $site_url?option=contacts");
exit();
}
header("Location: $site_url?option=contacts");
exit();
}
// Определение переменных для капчи
$a = mt_rand(1, 10);
$b = mt_rand(1, 10);
$_SESSION['res_captcha'] = $a + $b;
?>