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

Тема в разделе "PHP", создана пользователем MAD-BOYT, 9 июл 2009.

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

    MAD-BOYT Постоялец

    Регистр.:
    22 ноя 2007
    Сообщения:
    75
    Симпатии:
    8
    Привет, всем гуру PHP))
    Есть форма обратной связи
    Код:
    function complete_mail() {
    $empty_input[] = 'Ваше имя';
    $empty_input[] = 'Ваш Email';
    $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 '<div class="contact-note">Необходимо заполнить поле '.$empty_input[$i].'!</div>';
    }}}
    if($sendemail == 'No') show_form();
    $mess = '';
    $mess .= '<b>Ваше имя: </b>'.$_POST['input_name'][0].'<br />';
    $mess .= '<b>Ваш Email: </b>'.$_POST['input_name'][1].'<br />';
    $mess .= '<b>Ваше сообщение: </b>'.$_POST['input_name'][3].'<br />';
    require 'scripts/phpmail/class.phpmailer.php';
    $mail = new PHPMailer();
    $mail->From = '**************';
    $mail->FromName = 'MAIL.SITE';
    $mail->AddAddress('**************', '**************');
    $mail->IsHTML(true);
    $mail->Subject = 'MAIL.SITE';
    $mail->Body = $mess;
    if(isset($_FILES['file_name'])) {
    if($_FILES['file_name']['error'][0] == 0){
    $mail->AddAttachment($_FILES['file_name']['tmp_name'][0], $_FILES['file_name']['name'][0]);
    }}
    if($sendemail != 'No'){
    if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
    echo '<div class="contact-note">Спасибо! Ваше письмо отправлено.<br />В ближайшее время мы с Вами свяжемся.</div>';
    }}
    if (!empty($_POST['submit'])) complete_mail();
    else show_form();
    И есть проверка капчи
    Код:
    if ($this->gd_loaded && ($_SESSION['captcha_code'] != $_POST['captcha_code'] || empty($_POST['captcha_code'])))
    	{
    	$this->error = 'Неверно введено число с картинки';
    }
    Я в PHP не секу, а методом "тыка" нечего не получается.
    Как подправить проверку под эту форму? Да и вообще как на ваш взгляд сама форма?
    Капчу выдернул из одного скрипта магазина. понравилась тем, что всего одиним файлом)

    А то спам - "малость" надоел)

    ЗЫ. и еще вопросик. как прописать определенные типы прикрепляемых файлов?
    В форме нет проверки вообще не какой.

    Заранее спасибо. БОЛЬШОЕ!
     
  2. roddik

    roddik Колбаска

    Регистр.:
    26 янв 2007
    Сообщения:
    351
    Симпатии:
    285
    Заюзай http://recaptcha.net/plugins/php/, там все с мануалом и пошагово
    А по второму вопросу, афаик, нельзя задавать в хтмл допустимые типы файлов, надо на стороне сервера проверять
     
  3. RayTraceR1

    RayTraceR1 Создатель

    Регистр.:
    27 июн 2009
    Сообщения:
    44
    Симпатии:
    15
    Предоставил оч мало данных, где сам скрипт капчи чтоб его инклудить? Где текстовое поле в скрипте чтоб с него постить введеный код и сравнивать его?
    Если хочеш чтобы помогли, предоставь больше данных.
     
  4. MAD-BOYT

    MAD-BOYT Постоялец

    Регистр.:
    22 ноя 2007
    Сообщения:
    75
    Симпатии:
    8
    А какие еще данные нужны? Как инклудится я хз. я капчу выдернул из другого скрипта. Мне бы главное проверку воткнуть в форму и все.
     
  5. polyetilen

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

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    скачать скрипт каптчи

    http://www.captcha.ru/kcaptcha/

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

    надо запустить сессию если нету где нибудь в начале скрипта
    session_start();

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

    и при получении данных проверить код session с post в функции complete_mail() где нибудь в конце
    PHP:
    function complete_mail() {
    //...


    if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
        
    //echo "Код правельный";
    }else{
        
    $sendemail 'No';
        echo 
    "Код неправельный";
    }
    unset(
    $_SESSION['captcha_keystring']);
    }
     
    MAD-BOYT нравится это.
  6. MAD-BOYT

    MAD-BOYT Постоялец

    Регистр.:
    22 ноя 2007
    Сообщения:
    75
    Симпатии:
    8
    Огромное спасибо! Все прекрасно заработало.
     
  7. ZXDInc

    ZXDInc Писатель

    Регистр.:
    17 авг 2008
    Сообщения:
    2
    Симпатии:
    0
    а с phpmailer эта капча работает?
     
  8. ZXDInc

    ZXDInc Писатель

    Регистр.:
    17 авг 2008
    Сообщения:
    2
    Симпатии:
    0
    в моем случае нужно было просто вставить
    PHP:
    if(count($_POST)>0){
        if(isset(
    $_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
        include 
    'blabla.php';
            
    //echo "Correct";
        
    }else{
            echo 
    "Не правильный код";
        }
    }
    unset(
    $_SESSION['captcha_keystring']);
    но возможно это просто детали...
     
Статус темы:
Закрыта.