[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP Отправка формы - Captcha
MaPuK
Здравствуйте. Есть у меня PHP код отправки сообщения на почту с сайта, я его подключил всё пашет, но хотелось бы прикрутить Captcha.

Вот сам код:

Код
<?php
function show_form()
{
?>
<form action="" method=post enctype="multipart/form-data">
<div align="center">
              <table class="lesson" align="center">
    <tbody>
        <tr>
            <td class="lesson_title">
              <p align="left"><font color="red"><b>* Помечены поля, которые необходимо заполнить</b></font></p>
              <br /><b>Типа услуги</b><font color="red">*</font><br />
              <input type="text" name="tip" size="40">
              <br><b>Имя</b><font color="red">*</font><br />
              <input type="text" name="name" size="40">
              <br /><b>Контактный телефон</b><br />
              <input type="text" name="tel" size="40">
              <br /><b>Контактный email</b><font color="red">*</font><br />
              <input type="text" name="email" size="40">
              <br /><b>Ваш ICQ</b><font color="red">*</font><br />
              <input type="text" name="ice" size="40">
              <br /><b>Teма сообщения</b><br />
              <input type="text" name="title" size="40">
              <br /><b>Сообщение</b><font color="red">*</font><br />
              <textarea rows="10" name="mess" cols="30"></textarea>
              <br /><b>Срок заказа</b><font color="red">*</font><br />
              <input type="text" name="srok" size="40">
              <br /><b>Паспологаемая сумма</b><font color="red">*</font><br />
              <input type="text" name="summa" size="40">
              <br /><b>Выберите вид оплаты</b><font color="red">*</font><br />
              <input type="text" name="money" size="40">               
              <br /><b>Примерочное изображение желаемого сайта</b><br />
              <input name="attachimage" type="file" size="28">
              <br /><br /><input type="submit" value="Отправить" name="submit">
</div>
</form>
</tr>
    </tbody>
</table>
<?
}

function complete_mail() {
        // $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и  substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменных $_POST['mess'], $_POST['name'], $_POST['tel'], $_POST['email'] все аналогично
        $_POST['title'] =  substr(htmlspecialchars(trim($_POST['title'])), 0, 1000);
        $_POST['mess'] =  substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000);
        $_POST['name'] =  substr(htmlspecialchars(trim($_POST['name'])), 0, 30);
        $_POST['tel'] =  substr(htmlspecialchars(trim($_POST['tel'])), 0, 30);
        $_POST['email'] =  substr(htmlspecialchars(trim($_POST['email'])), 0, 50);
        $_POST['ice'] =  substr(htmlspecialchars(trim($_POST['ice'])), 0, 9);
        $_POST['money'] =  substr(htmlspecialchars(trim($_POST['money'])), 0, 100);
        $_POST['summa'] =  substr(htmlspecialchars(trim($_POST['summa'])), 0, 30);
        $_POST['srok'] =  substr(htmlspecialchars(trim($_POST['srok'])), 0, 15);
        $_POST['tip'] =  substr(htmlspecialchars(trim($_POST['tip'])), 0, 15);
        // если не заполнено поле "Имя" - показываем ошибку 0
        if (empty($_POST['name']))
             output_err(0);
        // если неправильно заполнено поле email - показываем ошибку 1
        if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['email']))
             output_err(1);
        // если не заполнено поле "Сообщение" - показываем ошибку 2
        if(empty($_POST['mess']))
             output_err(2);
        // обратите внимание, теперь мы можем писать красивые письма, с помощью html тегов;-)
        $mess = '
<b>Тип заказа:</b>'.$_POST['tip'].'<br />  
<b>Имя отправителя:</b>'.$_POST['name'].'<br />
<b>Контактный телефон:</b>'.$_POST['tel'].'<br />
<b>Контактный email:</b>'.$_POST['email'].'<br />
<b>ICQ:</b>'.$_POST['ice'].'<br />
<b>Вид оплаты:</b>'.$_POST['money'].'<br />
<b>Распологаемая сумма:</b>'.$_POST['summa'].'<br />
<b>Срок заказа:</b>'.$_POST['srok'].'<br />
'.$_POST['mess'];

        // подключаем файл класса для отправки почты
        require 'class.phpmailer.php';

        $mail = new PHPMailer();
        $mail->From = 'test@test.ru';      // от кого
        $mail->FromName = 'Клиент с WebtoPit.com';   // от кого
        $mail->AddAddress('cyxapuka@gmail.com', '-=[MaPuK]=-'); // кому - адрес, Имя
        $mail->IsHTML(true);        // выставляем формат письма HTML
        $mail->Subject = $_POST['title'];  // тема письма

        // если был файл, то прикрепляем его к письму
        if(isset($_FILES['attachfile'])) {
                 if($_FILES['attachfile']['error'] == 0){
                    $mail->AddAttachment($_FILES['attachfile']['tmp_name'], $_FILES['attachfile']['name']);
                 }
        }
        // если было изображение, то прикрепляем его в виде картинки к телу письма.
        if(isset($_FILES['attachimage'])) {
                 if($_FILES['attachimage']['error'] == 0){
                    if (!$mail->AddEmbeddedImage($_FILES['attachimage']['tmp_name'], 'my-attach', 'image.gif', 'base64', $_FILES['attachimage']['type']))
                         die ($mail->ErrorInfo);
                    $mess .= 'А вот и наша картинка:<br /><img src="cid:image.gif" border=0><br />я показал как ее прикреплять, соответственно Вам осталось вставить ее в нужное место Вашего письма;-) ';
                 }
        }
        $mail->Body = $mess;

        // отправляем наше письмо
        if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
        echo 'Спасибо! Ваше письмо отправлено.';
}

function output_err($num)
{
    $err[0] = 'ОШИБКА! Не введено имя.';
    $err[1] = 'ОШИБКА! Неверно введен e-mail.';
    $err[2] = 'ОШИБКА! Не введено сообщение.';
    echo '<p>'.$err[$num].'</p>';
    show_form();
    exit();
}

if (!empty($_POST['submit'])) complete_mail();
else show_form();
?>




Найти файл каптчи думаю все знаю где. Спасибо заранее.



Спустя 2 минуты, 36 секунд (15.02.2008 - 16:03) Infernal написал(а):
Создаешь таблицу в БД, далее создаешь дополнительную форму на сайте, с картинкой каптчи, и отправляешь данные на проверку в БД.

Спустя 15 минут, 53 секунды (15.02.2008 - 16:19) MaPuK написал(а):
А табюлице БД мне самому писать? Я ж неговорил что владею MySQL
Я пожтому и написал в разделе для начинающих, я с РНР только неделю знаком. Ещё неподружились.


Спустя 1 час, 39 минут, 21 секунда (15.02.2008 - 17:58) Infernal написал(а):
Используй PHP My ADMIN, там все легко и просто.

Создай таблицу, с тремя полями. 1 - ID - INT - 10. 2 - NUM - INT - 10. 3 - LINK - VARCHAR - 255. Кстати для первого поля ID, ставь auto_increment и первичный ключ. Потом заноси информацию о своей Captcha в БД, в эти самые поля и делай запрос с сайта.

Спустя 1 час, 35 минут, 15 секунд (15.02.2008 - 19:33) Timok написал(а):
читать: Защита от ботов - CAPTCHA. Вполне можно обойтись без БД.

Спустя 32 минуты, 14 секунд (15.02.2008 - 20:06) MaPuK написал(а):
Почитал и для начинающего нечего непонял. Ну всмысле я понял что нужно скачать заливать папку и подключить к форме отправки, но некак выходит. Прбывал содержимое файлы index.php вставить в место проверки в форме, и невышло, кучи ошибок, проверяя их толку недало. Так как там ошибки на строках, где РНР код мне неизвестные алгоритмы.

Спустя 1 минута, 58 секунд (15.02.2008 - 20:08) MaPuK написал(а):
Цитата(Infernal @ 15.2.2008, 14:58) [snapback]33694[/snapback]
Используй PHP My ADMIN, там все легко и просто.

Создай таблицу, с тремя полями. 1 - ID - INT - 10. 2 - NUM - INT - 10. 3 - LINK - VARCHAR - 255. Кстати для первого поля ID, ставь auto_increment и первичный ключ. Потом заноси информацию о своей Captcha в БД, в эти самые поля и делай запрос с сайта.



Потом заноси информацию о своей Captcha в БД, в эти самые поля и делай запрос с сайта.

Вот как делать информацию в каптче о БД, и запрос, не умею я. =) Мож подскажете поконктретнее. пасиб!

Спустя 57 минут, 40 секунд (15.02.2008 - 21:05) Timok написал(а):
какие именно ошибки? покажи то что ты сделал.

Спустя 6 минут, 6 секунд (15.02.2008 - 21:11) MaPuK написал(а):
Я вставил сюда этот код.

<br /><b>Примерочное изображение желаемого сайта</b><br />
<input name="attachimage" type="file" size="28">
Код
<?php

error_reporting (E_ALL);

include('kcaptcha.php');

if(isset($_REQUEST[session_name()])){
    session_start();
}

$captcha = new KCAPTCHA();

if($_REQUEST[session_name()]){
    $_SESSION['captcha_keystring'] = $captcha->getKeyString();
}

?>


<br /><br /><input type="submit" value="Отправить" name="submit">
</div>
</form>
</tr>
</tbody>
</table>
<?
}



Поясни как нужно делать?

Спустя 2 часа, 3 минуты, 20 секунд (15.02.2008 - 23:15) Timok написал(а):
ok, по порядку:

0) распаковываем архив с модулем каптчи в корень
1) создаем файл generate.php который будет генерировать картинку, туда вставляем код:
Код
<?php
include('kcaptcha.php');

if(isset($_REQUEST[session_name()])){
    session_start();
}

$captcha = new KCAPTCHA();

if($_REQUEST[session_name()]){
    $_SESSION['captcha_keystring'] = $captcha->getKeyString();
}
?>


2) создаем файл index.php - там будет форма и проверка каптчи:
Код
<?php
session_start();
?>
<form action="./" method="post">
<p>Enter text shown below:</p>
<p><img src="<?php echo 'generate.php?' . session_name() . '=' . session_id(); ?>"></p>
<p><input type="text" name="keystring"></p>
<p><input type="submit" value="Check"></p>
</form>
<?php
if(count($_POST)>0){
    if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] ==  $_POST['keystring']){
        echo "Correct";
    }else{
        echo "Wrong";
    }
}
unset($_SESSION['captcha_keystring']);
?>


3) запускаем, проверяем, если работает - разбираемся в коде, если нет - пишем сюда

Спустя 2 года, 8 месяцев, 2 дня, 11 часов, 37 минут, 17 секунд (18.10.2010 - 09:52) Guest написал(а):
я запарилась с этой каптчей ! Никак к своей форме не могу привязать


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.