Создать ответ 
Защита отправки данных сложением чисел
Автор Сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #1
Защита отправки данных сложением чисел
Здравствуйте, у меня 1 вопрос по реализации скрипта по отправке сообщения.

При отправке письма хотелось бы сделать так, чтобы сумма цифр была разная для ввода проверочного кода, как и у вас в форме добавления комментариев на сайт, где каждый раз сумма цифр разная.
В данный момент сумма цифр есть, но она статичная, т.е имеется <span>2000 + 15 =</span> и php файл, который и проверяет правильно ли введена сумма, в данном случае 2015 и если сумма введена неверно, то появляется сообщение "Вы ввели неправильный проверочный код !", а в случае правильного ввода сообщение отправляется информируя пользователя что сообщение отправлено успешно.

Статичная сумма цифр и поле для ввода:

[Изображение: tid_335_checkup.png]

Есть html код:
Код:
<form method="post" action="php/contact.php" name="contactform" id="contactform">
    <input type="text" name="name" placeholder="Введите ваше имя" id="name" />
    <input type="text" name="email" placeholder="Ввведите ваш Email" id="email" />
    <input type="text" name="subject" placeholder="Тема" id="subject" /> -->
    <textarea placeholder="Введите пожалуйста сюда текст сообщения" name="comments" id="comments"></textarea>
                            
         <div id="captcha">
             <span>2000 + 15 =</span>
              <input type="text" name="verify" id="verify" />
    </div><!--end verify-->

    <input type="submit" name="send" value="Отправить" id="submit" class="white" />
</form>

Код php:
PHP код:
<?php

if(!$_POST) exit;

// Email address verification
function isEmail($email) {
    return(
preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|b​g|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co​|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|​fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|h​n|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|​kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|m​q|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu​|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc​|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|t​o|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|​zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email));
}

if (!
defined("PHP_EOL")) define("PHP_EOL""\r\n");

$name     $_POST['name'];
$email    $_POST['email'];
$subject  $_POST['subject'];
$comments $_POST['comments'];
$verify   $_POST['verify'];

if(
trim($name) == '') {
    echo 
'<div class="error_message">Вы не ввели свое имя !</div>';
    exit();
} else if(
trim($email) == '') {
    echo 
'<div class="error_message">Введите правильный Email !</div>';
    exit();

else if(!
isEmail($email)) {
    echo 
'<div class="error_message">Вы ввели неправильный Email !</div>';
    exit();
}

//if(trim($subject) == '') {
    //echo '<div class="error_message">Введите тему сообщения !</div>';
    //exit();
//} 
else if(trim($comments) == '') {
    echo 
'<div class="error_message">Введите текст сообщения !</div>';
    exit();
} else if(!isset(
$verify) || trim($verify) == '') {
    echo 
'<div class="error_message">Введите проверочный код !</div>';
    exit();
} else if(
trim($verify) != '2015') {
    echo 
'<div class="error_message">Вы ввели неправильный проверочный код !</div>';
    exit();
}

if(
get_magic_quotes_gpc()) {
    
$comments stripslashes($comments);
}

$address "";

$e_subject ' ' $name '.';

$e_body "" PHP_EOL PHP_EOL;
$e_content "\"$comments\"" PHP_EOL PHP_EOL;
$e_reply "";

$msg wordwrap$e_body $e_content $e_reply70 );

$headers "From: $emailPHP_EOL;
$headers .= "Reply-To: $emailPHP_EOL;
$headers .= "MIME-Version: 1.0" PHP_EOL;
$headers .= "Content-type: text/plain; charset=utf-8" PHP_EOL;
$headers .= "Content-Transfer-Encoding: quoted-printable" PHP_EOL;

if(
mail($address$e_subject$msg$headers)) {

    
// Сообщение отправлено успешно.

    
echo "<fieldset>";
    echo 
"<div id='success_page'>";
    echo 
"<h1>Сообщение отправлено успешно !</h1>";
    echo 
"<p>Спасибо <strong>$name</strong>, ваше сообщение было отправлено !</p>";
    echo 
"</div>";
    echo 
"</fieldset>";

} else {

    echo 
'ERROR!';

}
?>

Хотел бы, чтобы сумма цифр была не статичная, а динамическая, т.е каждый раз была бы разная, как повторяюсь у вас в форме добавления комментариев.

Скорее всего надо будет изменять не только код html, а также и код php.
Сам пробовал сделать, но не вышло, поэтому и обращаюсь к вам за помощью, да и скрипт может быть будет полезен пользователям.

С уважением и заранее благодарен Yes.
18.06.2015 00:17:24
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #2
RE: Защита отправки данных сложением чисел
Здравствуйте,
Пробовал решить проблему используя скрипт "Защита сайта от спама сложением чисел", но не получается реализовать в данном коде.

Делал так:

1. В обработчик contact.php добавил код:
Код:
<?php
session_start();
if ($_POST[submit]) {
if ($_POST[otvet] == $_SESSION[summ]) {
  $_SESSION[message] = '<font color="blue">Ответ правильный!</font>';
  // Тут обработка поступившего сообщения из поля text
}
else {
  $_SESSION[message] = '<font color="red">Дан неверный ответ!</font>';
}
header("Location: contact.php");    //сбрасываем отправленное
exit();
}
?>

2. В файл с формой добавил следующий код:
Код:
<?php
$a = rand(10,50);
$b = rand(1,10);
$_SESSION[summ] = $a + $b;
echo "<b>$_SESSION[message]</b>";
unset($_SESSION[message]);
?>

3. А в саму форму отправки сообщения добавил поле для ввода проверочного кода:
<?php echo "$a + $b = "; ?>
<input type="text" name="otvet">

В предыдущем сообщении html и php код (в данном случае обработчик comment.php)

Удаляю код из html :
Код:
<div id="captcha">
<span>2000 + 15 =</span>
<input type="text" name="verify" id="verify" />
</div><!--end verify-->

и вместо него добавляю код из пункта 3:
Код:
<?php echo "$a + $b = "; ?>
<input type="text" name="otvet">

Результат есть, но такой:

Поле для проверочного поля есть и при обновлении страницы сумма цифр разная, но при отправке сообщения в случае некорректного ввода суммы цифр ничего не появляется и сообщение отправляется успешно.

В чем мой косяк, что упустил или что-то еще нужно изменить в обработчике

<form method="post" action="php/contact.php" name="contactform" id="contactform">

С уважением и заранее благодарен.
19.06.2015 23:30:13
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #3
RE: Защита отправки данных сложением чисел
Т.к. у Вас форма отправки сообщения находится выше кода обработки отправленных сообщений, то при отправке сообщения страничка перезагружается и проверочный код обновляется, следовательно, он уже не равен тому, что был до отправки сообщения.
Обычно код обработки сообщения находится выше кода формы, что дает ряд преимуществ!

Простой перенос формы вниз странички в Вашем случае не сработает, т.к. Вы понатыкали кучу exit-ов и до показа формы просто дело не дойдет.

Тут придется все менять!
20.06.2015 21:37:55
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #4
RE: Защита отправки данных сложением чисел
Здравствуйте,

Вас понял, жаль, что ничего не получится, хотя и так вроде работает, но хотел чтобы данные в поле проверочного кода менялись, что выполняется, а сообщение отправляется все равно...

А если менять, то очень много придется менять? Если убрать exit-ы, то в таком случае согласен работать не будет, но можно ли решить данный момент без переделывания всего скрипта или не выйдет.

И еще не знаю как сделать, чтобы при обновлении страницы данные в полях name, email и т.д. обнулялись, а то сброс происходит только когда очищаю кеш, т.е Ctrl+F5.

Заранее благодарен Yes
20.06.2015 23:41:55
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #5
RE: Защита отправки данных сложением чисел
По поводу сложения чисел сделал простое решение...

Перед формой добавьте PHP код:
PHP код:
<?php
 $a 
rand(10,50);
 
$b rand(1,10);
?>

В самой форме блок <div id="captcha"></div> теперь выглядит так:
Код:
<div id="captcha">
<?php echo "$a + $b = "; ?>
<input type="text" name="verify" id="verify" />
<input type="hidden" name="summa" id="summa" value="<?php echo md5($a + $b); ?>" />
</div>

Ну и изменяем условие для проверки отправленного числа. Для этого строчку:
Код:
} else if(trim($verify) != '2015') {

замените на такую:
Код:
} else if(md5(trim($verify)) != $_POST['summa']) {

По поводу очистки данных не знаю, у меня пропадают при обновлении странички...
21.06.2015 00:22:33
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #6
RE: Защита отправки данных сложением чисел
Здравствуйте, только что проверил...

Все сделал так как и описали, но выдается сообщение "Вы ввели неправильный проверочный код !" из строчки кода несмотря что код введен верно Scratch

Строчка из кода:

Код:
else if(md5(trim($verify)) != $_POST['summa']) {
    echo '<div class="error_message">Вы ввели неправильный проверочный код !</div>';
    exit();
}


Условие вроде есть, а проверку не проходит, хотя сумма верна...в html сделал как описали в предыдущем сообщении...

Заранее благодарен и спасибо за помощь Yes
21.06.2015 00:51:59
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #7
RE: Защита отправки данных сложением чисел
Добавил в прикрепление рабочий код.

Для проверки я сделал файл с именем 4.php, куда поместил приведенный Вами код, внес описанные выше изменения и заменил action="php/contact.php" на action="4.php".

Прикрепленный код работает как надо!


Прикрепления
.zip  4.zip (Размер: 1.87 Кб / Загрузок: 6)
21.06.2015 20:31:18
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #8
RE: Защита отправки данных сложением чисел
Здравствуйте,
Проверил снова и результат - не работает, на скрине ниже видно, что проверочный код введен верно, а выдается сообщение, что неправильный проверочный код.

[Изображение: tid_335_error.png]

Прикладываю архив страницы index.html и contact.php (весь код разметки и код php) и может сразу найдете, где "собака зарыта", может что-то блокируется, так как в данный момент введен проверочный код верно или неверно, результат один, как на скриншоте, т.е сообщение "Вы ввели неправильный проверочный код !"


.rar  captcha.rar (Размер: 2.69 Кб / Загрузок: 3)

Знаю, что у вас работает, но у меня вот такая картина...

Заранее благодарен.
21.06.2015 21:56:32
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #9
RE: Защита отправки данных сложением чисел
У меня работает...
Правда непонятно, почему у Вас выводится сообщение над формой, если в самой форме (в файле index.html) в action указан файл contact.php...
У меня происходит переход к файлу contact.php, и там в зависимости от того, правильно указан проверочный код или нет, выводится соответствующее сообщение.
21.06.2015 22:29:46
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #10
RE: Защита отправки данных сложением чисел
(21.06.2015 22:29:46)Admin писал(а):  У меня работает...
Правда непонятно, почему у Вас выводится сообщение над формой, если в самой форме (в файле index.html) в action указан файл contact.php...
У меня происходит переход к файлу contact.php, и там в зависимости от того, правильно указан проверочный код или нет, выводится соответствующее сообщение.

Да, вот я и не пойму сам, почему не работает...

Удалил для проверки exit(); в строчке:
else if(!isset($verify) || trim($verify) == '') {
echo '<div class="error_message">Введите проверочный код !</div>';
exit();
} else if(md5(trim($verify)) != $_POST['summa']) {
echo '<div class="error_message">Вы ввели неправильный проверочный код !</div>';
exit();
}

и получается так, как на скрине ниже:

[Изображение: tid_335_form.png]

Сообщение отправляется, так как exit(); удален, а сообщение "Вы ввели неправильный проверочный код !" остается, вот и думаю почему так происходит...Scratch...
21.06.2015 23:26:21
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


Пользователи просматривают эту тему: 1 Гость(ей)


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru