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

Тема в разделе "PHP", создана пользователем rafic, 8 июл 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. rafic

    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])), 0100000);
                  if(
    substr(htmlspecialchars(trim($_POST['check'][$i])), 01) == 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();
    ?>
     

    Вложения:

  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    скачать скрипт генератора картинки с кодом проверки
    http://www.captcha.ru/kcaptcha/
    в архиве есть файл с примером 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;
     
  3. rafic

    rafic

    Регистр.:
    14 май 2008
    Сообщения:
    477
    Симпатии:
    24
    Как я понял должно получиться так:
    PHP:
            if($sendemail != 'No'){
                  
    // отправляем наше письмо
                  
    if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);

            
    $spasibo '<div align="center">Спасибо! Ваш запрос был принят на обработку.</div>';   
            }
    в html документу в нужном месте вывожу <? echo $spasibo; ?>
    но после того как я нажимаю кнопку "Отправить" у меня появляется чисто белая страница, но письмо уходит на мыло... что не так?:(
     
  4. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    там переменная $spasibo должна быть глобальная чтоб значение одно и тоже было в функции и на странице, надо добавить в функцию complete_mail() global $spasibo;
    PHP:
    function complete_mail() {
        global 
    $spasibo;
    ...
     
  5. SolarWind

    SolarWind Создатель

    Регистр.:
    18 авг 2008
    Сообщения:
    42
    Симпатии:
    11
    Если нужно показывать совсем на другой странице (другой файл), то переменную $spasibo надо объявить в новом документе, который будет отрываться после отправки. И там же ее выводить echo $spasibo;
    А после отправки делать переадресацию на эту страницу:
    PHP:
    if($sendemail != 'No'){
        
    // отправляем наше письмо
        
    if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
        
    header('Location: messagesent.php');   
    }
     
  6. rafic

    rafic

    Регистр.:
    14 май 2008
    Сообщения:
    477
    Симпатии:
    24
    Ну в общем я добился нудного результата по вопросу вывода фразы. Но теперь каждый раз когда я обновляю страницу, мне на мыло приходит сообщение. Почему?
     
  7. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    после обновления страницы данные опять отправляются, надо после отправки письма обнулить переменную отправки формы $_POST['submit']
    после
    PHP:
    if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
    добавить
    PHP:
    unset($_POST['submit']);
    тогда после обновления страницы будет выполнятся функция show_form()
     
    rafic нравится это.
Статус темы:
Закрыта.