Помогите прикрутить антиспам

Статус
В этой теме нельзя размещать новые ответы.

rafic

Местный житель
Регистрация
14 Май 2008
Сообщения
477
Реакции
24
Люди, кто может подсказать как сделать в данном скрипте анти-спам проверку с вводом проверочного кода? Буду очень благодарен.

А еще нужно, что бы фраза "Спасибо! Ваш запрос был принят на обработку." выводилась не на новой страничке в самом верху, а в определенном месте html документа. Желательно, что бы она вводилась как нить через переменную для того, что бы я мог редактировать стиль текста.

PHP:
<?
error_reporting(0);
function show_form()
{
?>

<form action="" method=post>
<input type="text" name="input_name[1]">
<input type="hidden" name="check[]" value="2"></b>

<input type="text" name="input_name[0]">
<input type="hidden" name="check[]" value="2"></b>

<input class="input_klick" type="submit" value="отправить"  name="submit">
</form>


PHP:
<?
}
function complete_mail() {

        $empty_input[] = 'Код';
        $empty_input[] = 'Логин';
        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 /><b>Необходимо заполнить поле '.$empty_input[$i].'!</b>';

                 }
              }
        }
        if($sendemail == 'No') show_form();
        $mess = '';
$mess .= '<b>Код: </b>'.$_POST['input_name'][0].'<br />';
$mess .= '<b>Логин: </b>'.$_POST['input_name'][1].'<br />';
        require 'class.phpmailer.php';

        $mail = new PHPMailer();
        $mail->From = 'polzovatel@mail.ru';
        $mail->FromName = 'Пользователь'; 
        $mail->AddAddress('user@gmail.com', 'user@gmail.com');
        $mail->IsHTML(true);
 HTML
        $mail->Subject = 'Тема сообщения';
        $mail->Body = $mess;

        if($sendemail != 'No'){
              if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
              echo '<div align="center">Спасибо! Ваш запрос был принят на обработку.</div>';
        }
}
if (!empty($_POST['submit'])) complete_mail();
else show_form();
?>
 

Вложения

  • class.phpmailer.rar
    9 KB · Просмотры: 1
скачать скрипт генератора картинки с кодом проверки

в архиве есть файл с примером form_example.php

если нет надо запустить сессию
session_start();

добавить в форму картинку и поле для кода
<img src="./?<?php echo session_name()?>=<?php echo session_id()?>">
<input type="text" name="keystring">

и при получении данных проверить код session с post
PHP:
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
    //echo "Correct";
}else{
    $sendemail = 'No';
    echo '<br /><b>Необходимо правельно заполнить поле кода.</b>';
}
unset($_SESSION['captcha_keystring']);

if($sendemail == 'No') show_form();

а про фразу спасибо.... это
PHP:
echo '<div align="center">Спасибо! Ваш запрос был принят на обработку.</div>';
заменить на переменную
PHP:
//echo '<div align="center">Спасибо! Ваш запрос был принят на обработку.</div>';
$spasibo = '<div align="center">Спасибо! Ваш запрос был принят на обработку.</div>';
и выводить значение переменной на сайте echo $spasibo;
 
Как я понял должно получиться так:
PHP:
        if($sendemail != 'No'){
              // отправляем наше письмо
              if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);

		$spasibo = '<div align="center">Спасибо! Ваш запрос был принят на обработку.</div>';   
        }

в html документу в нужном месте вывожу <? echo $spasibo; ?>
но после того как я нажимаю кнопку "Отправить" у меня появляется чисто белая страница, но письмо уходит на мыло... что не так?:(
 
там переменная $spasibo должна быть глобальная чтоб значение одно и тоже было в функции и на странице, надо добавить в функцию complete_mail() global $spasibo;
PHP:
function complete_mail() {
    global $spasibo;
...
 
Как я понял должно получиться так:
PHP:
        if($sendemail != 'No'){
              // отправляем наше письмо
              if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
		$spasibo = '<div align="center">Спасибо! Ваш запрос был принят на обработку.</div>';   
        }
в html документу в нужном месте вывожу <? echo $spasibo; ?>
но после того как я нажимаю кнопку "Отправить" у меня появляется чисто белая страница, но письмо уходит на мыло... что не так?:(
Если нужно показывать совсем на другой странице (другой файл), то переменную $spasibo надо объявить в новом документе, который будет отрываться после отправки. И там же ее выводить echo $spasibo;
А после отправки делать переадресацию на эту страницу:
PHP:
if($sendemail != 'No'){
    // отправляем наше письмо
    if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
    header('Location: messagesent.php');   
}
 
Ну в общем я добился нудного результата по вопросу вывода фразы. Но теперь каждый раз когда я обновляю страницу, мне на мыло приходит сообщение. Почему?
 
после обновления страницы данные опять отправляются, надо после отправки письма обнулить переменную отправки формы $_POST['submit']
после
PHP:
if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
добавить
PHP:
unset($_POST['submit']);
тогда после обновления страницы будет выполнятся функция show_form()
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху