X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> Нужна помощь по Php, Интеграция капчи в форму обратной связи
Kuznec37
Kuznec37
Topic Starter сообщение 3.4.2010, 18:38; Ответить: Kuznec37
Сообщение #1


Старожил
******

Группа: Active User
Сообщений: 1134
Регистрация: 24.4.2008
Из: Кафа
Поблагодарили: 279 раз
Репутация:   32  


Нужна небольшая помощь по php.
Есть форма обратной связи, хочу прикрутить к ней капчу от w3box.ru.
Как мне правильно вставить код, чтобы без проверки правильности капчи письмо не отправлялось?

Код проверки:
<?php
session_start();
if (isset($_SESSION["captcha"]) && $_SESSION["captcha"]===$_POST["captcha"]) echo "Текс введен верно";
else echo "Текст введен не верно";
unset($_SESSION["captcha"]);
?>


Файл формы обратной связи:
<?
$notify_injections = true;
$mail_target = 'mymail@mail.ru';
$author = @$_POST['sender_name'];
$mail = array('sender' => @$_POST['sender'],    
    'subject' => @$_POST['subject']);
$mail_message = @$_POST['message'];
function validate_mail($field, $mail_header) {
    $alert = '';
    if (@preg_match_all("/(\r|\n)([^:]+):/", $mail_header, $m)) foreach($m[0] as $v) $alert .= '<span style="width:100px;font:bold">'.$field.'</span>'.$v.'<br>';    
    return $alert;
}
$show_form = true;    
if ($mail_message != '') {    
    $alert = '';
    foreach ($mail as $k => $v) $alert .= validate_mail($k, $v);    
    if ($alert != '') {
        if ($notify_injections == true) $mail_result = @mail($mail_target, 'E-mail insertion attack', '<html><body>E-mail injection attempted via header insertion<p><span style="width:100px;font:bold">Remote IP</span>'.@$_SERVER['REMOTE_ADDR'].'<br><span style="width:100px;font:bold">Remote Host</span>'.@$_SERVER['REMOTE_HOST'].'<p><span style="width:100px;text-decoration:underline">form-field</span><u>injected header</u><br>'.$alert.'</body></html>');
        if ($mail_result == 1) {                    
            echo "<script> alert('Ваше письмо было отправлено!'); document.location.href='/';</script>";    
            $show_form = false;                    
        }
        else echo "<script> alert('письмо не отправлено. Попробуйте позже.!'); document.location.href='/';</script>";
    }
    else if (!preg_match("/^[A-Z0-9._%-]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z]{2,6}$/i", $mail['sender'])) echo '<span class="alert">* A valid e-mail address is required for your comments to be registered *</span>';
    else if ($mail['sender'] == '' or $author == '') echo '<span class="alert">Введите правильные данные!</span>';
    else {
/*** Отправляем E-Mail ***/
$message = "$mail_message\n-----------------------------------\n$author $mail[sender]\n";
$headers = "Content-type: text/plain; charset=windows-1251\r\n";
$headers .= "From: ".$author." <".$mail[sender].">\r\n";
$headers .= "Reply-To: ".$author." <".$mail[sender].">\r\n";
$mail_result = @mail($mail_target, $mail['subject'], $message, $headers);
/*************************/
        if ($mail_result == 1) {    
            echo "<script> alert('Ваше письмо было отправлено!'); document.location.href='/';</script>";
            $show_form = false;
        }
        else echo 'Ошибка: письмо не отправлено. Попробуйте позже.';
    }
}
if ($show_form == true) echo '<p><form action="contact.html" method="post">
<table style="border:0;text-align:left;line-height:24px;width:400px;padding:4px"><tr><td style="padding:0 15px 0 0">Имя:<br>
<input name="sender_name" type="text" maxlength="50" value="'.@$mail['sender_name'].'"></td>
<td>E-mail адрес:<br>
<input name="sender" type="text" maxlength="50" value="'.@$mail['sender'].'"></td></tr>
<tr><td colspan=2><p>Тема:<br>
<input name="subject" type="text" maxlength="100" value="'.@$mail['subject'].'" style="width:400px;font:8pt Verdana;padding:4px">
<p>Содержание:<br>
<textarea name="message" rows="10" style="width:400px;font:8pt Verdana;padding:4px">'.@$mail_message.'</textarea>
<form action="/check.php" method="post">
<img src="/captcha.php" alt="Картинка" /><br />
Текст на картинке: <input type="text" name="captcha" /><br />
<p><input type="submit" name="submit" value="Отправить">
</td></tr></table>
</form>';
?>


--------------------
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
webpavilion
webpavilion
сообщение 3.4.2010, 19:12; Ответить: webpavilion
Сообщение #2


сеошник на пенсии
*******

Группа: Active User
Сообщений: 2726
Регистрация: 28.4.2009
Из: МО
Поблагодарили: 1659 раз
Репутация:   171  


извольте:
session_start();
$notify_injections = true;
$mail_target = 'mymail@mail.ru';
$author = @$_POST['sender_name'];
$mail = array('sender' => @$_POST['sender'],    
    'subject' => @$_POST['subject']);
$mail_message = @$_POST['message'];
function validate_mail($field, $mail_header) {
    $alert = '';
    if (@preg_match_all("/(\r|\n)([^:]+):/", $mail_header, $m)) foreach($m[0] as $v) $alert .= '<span style="width:100px;font:bold">'.$field.'</span>'.$v.'<br>';
    return $alert;
}
$show_form = true;    
if ($mail_message != '') {    
    $alert = '';
     if (isset($_SESSION["captcha"]) && $_SESSION["captcha"]!==$_POST["captcha"]) $alert .= '<span style="width:100px;font:bold">Не верная каптча!</span><br>';
    foreach ($mail as $k => $v) $alert .= validate_mail($k, $v);    
    if ($alert != '') {
        if ($notify_injections == true) $mail_result = @mail($mail_target, 'E-mail insertion attack', '<html><body>E-mail injection attempted via header insertion<p><span style="width:100px;font:bold">Remote IP</span>'.@$_SERVER['REMOTE_ADDR'].'<br><span style="width:100px;font:bold">Remote Host</span>'.@$_SERVER['REMOTE_HOST'].'<p><span style="width:100px;text-decoration:underline">form-field</span><u>injected header</u><br>'.$alert.'</body></html>');
        if ($mail_result == 1) {                    
            echo "<script> alert('Ваше письмо было отправлено!'); document.location.href='/';</script>";    
            $show_form = false;                    
        }
        else echo "<script> alert('письмо не отправлено. Попробуйте позже.!'); document.location.href='/';</script>";
    }
    else if (!preg_match("/^[A-Z0-9._%-]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z]{2,6}$/i", $mail['sender'])) echo '<span class="alert">* A valid e-mail address is required for your comments to be registered *</span>';
    else if ($mail['sender'] == '' or $author == '') echo '<span class="alert">Введите правильные данные!</span>';
    else {
/*** Отправляем E-Mail ***/
$message = "$mail_message\n-----------------------------------\n$author $mail[sender]\n";
$headers = "Content-type: text/plain; charset=windows-1251\r\n";
$headers .= "From: ".$author." <".$mail[sender].">\r\n";
$headers .= "Reply-To: ".$author." <".$mail[sender].">\r\n";
$mail_result = @mail($mail_target, $mail['subject'], $message, $headers);
/*************************/
        if ($mail_result == 1) {    
            echo "<script> alert('Ваше письмо было отправлено!'); document.location.href='/';</script>";
            $show_form = false;
        }
        else echo 'Ошибка: письмо не отправлено. Попробуйте позже.';
    }
}
if ($show_form == true) echo '<p><form action="contact.html" method="post">
<table style="border:0;text-align:left;line-height:24px;width:400px;padding:4px"><tr><td style="padding:0 15px 0 0">Имя:<br>
<input name="sender_name" type="text" maxlength="50" value="'.@$mail['sender_name'].'"></td>
<td>E-mail адрес:<br>
<input name="sender" type="text" maxlength="50" value="'.@$mail['sender'].'"></td></tr>
<tr><td colspan=2><p>Тема:<br>
<input name="subject" type="text" maxlength="100" value="'.@$mail['subject'].'" style="width:400px;font:8pt Verdana;padding:4px">
<p>Содержание:<br>
<textarea name="message" rows="10" style="width:400px;font:8pt Verdana;padding:4px">'.@$mail_message.'</textarea>
<form action="/check.php" method="post">
<img src="/captcha.php" alt="Картинка" /><br />
Текст на картинке: <input type="text" name="captcha" /><br />
<p><input type="submit" name="submit" value="Отправить">
</td></tr></table>
</form>';
unset($_SESSION["captcha"]);
?>


неспроста местные "мега-кодеры" все как один не любят разбираться в чужом коде. вроде негде не ошибся, пишу с нетбука - php в блокноте это занимательно... если есть возможность проверьте в какой нибуть IDE с подсветкой кода.


--------------------
Не ведитесь, cамопис это почти всегда плохо!

Делаю сайты на Drupal 7.x
(очень дорого)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Kuznec37
Kuznec37
Topic Starter сообщение 3.4.2010, 19:26; Ответить: Kuznec37
Сообщение #3


Старожил
******

Группа: Active User
Сообщений: 1134
Регистрация: 24.4.2008
Из: Кафа
Поблагодарили: 279 раз
Репутация:   32  


(webpavilion @ 3.4.2010, 16:12) *
извольте:
session_start();
$notify_injections = true;
$mail_target = 'mymail@mail.ru';
$author = @$_POST['sender_name'];
$mail = array('sender' => @$_POST['sender'],    
    'subject' => @$_POST['subject']);
$mail_message = @$_POST['message'];
function validate_mail($field, $mail_header) {
    $alert = '';
    if (@preg_match_all("/(\r|\n)([^:]+):/", $mail_header, $m)) foreach($m[0] as $v) $alert .= '<span style="width:100px;font:bold">'.$field.'</span>'.$v.'<br>';
    return $alert;
}
$show_form = true;    
if ($mail_message != '') {    
    $alert = '';
     if (isset($_SESSION["captcha"]) && $_SESSION["captcha"]!==$_POST["captcha"]) $alert .= '<span style="width:100px;font:bold">Не верная каптча!</span><br>';
    foreach ($mail as $k => $v) $alert .= validate_mail($k, $v);    
    if ($alert != '') {
        if ($notify_injections == true) $mail_result = @mail($mail_target, 'E-mail insertion attack', '<html><body>E-mail injection attempted via header insertion<p><span style="width:100px;font:bold">Remote IP</span>'.@$_SERVER['REMOTE_ADDR'].'<br><span style="width:100px;font:bold">Remote Host</span>'.@$_SERVER['REMOTE_HOST'].'<p><span style="width:100px;text-decoration:underline">form-field</span><u>injected header</u><br>'.$alert.'</body></html>');
        if ($mail_result == 1) {                    
            echo "<script> alert('Ваше письмо было отправлено!'); document.location.href='/';</script>";    
            $show_form = false;                    
        }
        else echo "<script> alert('письмо не отправлено. Попробуйте позже.!'); document.location.href='/';</script>";
    }
    else if (!preg_match("/^[A-Z0-9._%-]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z]{2,6}$/i", $mail['sender'])) echo '<span class="alert">* A valid e-mail address is required for your comments to be registered *</span>';
    else if ($mail['sender'] == '' or $author == '') echo '<span class="alert">Введите правильные данные!</span>';
    else {
/*** Отправляем E-Mail ***/
$message = "$mail_message\n-----------------------------------\n$author $mail[sender]\n";
$headers = "Content-type: text/plain; charset=windows-1251\r\n";
$headers .= "From: ".$author." <".$mail[sender].">\r\n";
$headers .= "Reply-To: ".$author." <".$mail[sender].">\r\n";
$mail_result = @mail($mail_target, $mail['subject'], $message, $headers);
/*************************/
        if ($mail_result == 1) {    
            echo "<script> alert('Ваше письмо было отправлено!'); document.location.href='/';</script>";
            $show_form = false;
        }
        else echo 'Ошибка: письмо не отправлено. Попробуйте позже.';
    }
}
if ($show_form == true) echo '<p><form action="contact.html" method="post">
<table style="border:0;text-align:left;line-height:24px;width:400px;padding:4px"><tr><td style="padding:0 15px 0 0">Имя:<br>
<input name="sender_name" type="text" maxlength="50" value="'.@$mail['sender_name'].'"></td>
<td>E-mail адрес:<br>
<input name="sender" type="text" maxlength="50" value="'.@$mail['sender'].'"></td></tr>
<tr><td colspan=2><p>Тема:<br>
<input name="subject" type="text" maxlength="100" value="'.@$mail['subject'].'" style="width:400px;font:8pt Verdana;padding:4px">
<p>Содержание:<br>
<textarea name="message" rows="10" style="width:400px;font:8pt Verdana;padding:4px">'.@$mail_message.'</textarea>
<form action="/check.php" method="post">
<img src="/captcha.php" alt="Картинка" /><br />
Текст на картинке: <input type="text" name="captcha" /><br />
<p><input type="submit" name="submit" value="Отправить">
</td></tr></table>
</form>';
unset($_SESSION["captcha"]);
?>


неспроста местные "мега-кодеры" все как один не любят разбираться в чужом коде. вроде негде не ошибся, пишу с нетбука - php в блокноте это занимательно... если есть возможность проверьте в какой нибуть IDE с подсветкой кода.

Не пашет, при заходе на страницу, срабатывает тут же отправка письма.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
webpavilion
webpavilion
сообщение 3.4.2010, 21:07; Ответить: webpavilion
Сообщение #4


сеошник на пенсии
*******

Группа: Active User
Сообщений: 2726
Регистрация: 28.4.2009
Из: МО
Поблагодарили: 1659 раз
Репутация:   171  


<?php

session_start();
if (isset($_SESSION["captcha"]) && $_SESSION["captcha"]===$_POST["captcha"]) $captcha = TRUE;
else $captcha = FALSE;
unset($_SESSION["captcha"]);

$notify_injections = true;
$mail_target = 'mymail@mail.ru';

$author = @$_POST['sender_name'];
$mail_message = @$_POST['message'];
$mail = array(
        'sender' => @$_POST['sender'],
        'subject' => @$_POST['subject']
);

function validate_mail($field, $mail_header) {
    $alert = '';
    if (@preg_match_all("/(\r|\n)([^:]+):/", $mail_header, $m)) foreach($m[0] as $v) $alert .= '<span style="width:100px;font:bold">'.$field.'</span>'.$v.'<br>';
    return $alert;
}

$show_form = true;

if ($mail_message != '') {
    $alert = '';
    foreach ($mail as $k => $v) $alert .= validate_mail($k, $v);
    if ($alert != '' AND !$captcha) {
        if ($notify_injections == true) $mail_result = @mail($mail_target, 'E-mail insertion attack', '<html><body>E-mail injection attempted via header insertion<p><span style="width:100px;font:bold">Remote IP</span>'.@$_SERVER['REMOTE_ADDR'].'<br><span style="width:100px;font:bold">Remote Host</span>'.@$_SERVER['REMOTE_HOST'].'<p><span style="width:100px;text-decoration:underline">form-field</span><u>injected header</u><br>'.$alert.'</body></html>');
        if ($mail_result == 1) {
            echo "<script> alert('Ваше письмо было отправлено!'); document.location.href='/';</script>";
            $show_form = false;
        }
        else echo "<script> alert('письмо не отправлено. Попробуйте позже.!'); document.location.href='/';</script>";
    }
    else if (!$captcha) echo '<span class="alert">Каптча введена не правильно!</span>';
    else if (!preg_match("/^[A-Z0-9._%-]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z]{2,6}$/i", $mail['sender'])) echo '<span class="alert">* A valid e-mail address is required for your comments to be registered *</span>';
    else if ($mail['sender'] == '' or $author == '') echo '<span class="alert">Введите правильные данные!</span>';
    else {
        $message = "$mail_message\n-----------------------------------\n$author $mail[sender]\n";
        $headers = "Content-type: text/plain; charset=windows-1251\r\n";
        $headers .= "From: ".$author." <".$mail[sender].">\r\n";
        $headers .= "Reply-To: ".$author." <".$mail[sender].">\r\n";
        $mail_result = @mail($mail_target, $mail['subject'], $message, $headers);
        if ($mail_result == 1) {
            echo "<script> alert('Ваше письмо было отправлено!'); document.location.href='/';</script>";
            $show_form = false;
        }
        else echo 'Ошибка: письмо не отправлено. Попробуйте позже.';
    }
}
if ($show_form) :?>
<form action="contact.html" method="post">
    <table style="border:0;text-align:left;line-height:24px;width:400px;padding:4px">
        <tr>
            <td style="padding:0 15px 0 0">
                Имя:<br>
                <input name="sender_name" type="text" maxlength="50" value="<?php echo @$author//тут тоже была ошибка?>">
            </td>
            <td>
                E-mail адрес:<br>
                <input name="sender" type="text" maxlength="50" value="<?php echo @$mail['sender']?>">
            </td>
        </tr>
        <tr>
            <td colspan=2>
                <p>Тема:<br>
                <input name="subject" type="text" maxlength="100" value="<?php echo @$mail['subject']?>" style="width:400px;font:8pt Verdana;padding:4px">
                <p>Содержание:<br>
                <textarea name="message" rows="10" style="width:400px;font:8pt Verdana;padding:4px"><?php echo @$mail_message;?></textarea>
                <img src="/captcha.php" alt="Картинка" /><br />
                Текст на картинке: <input type="text" name="captcha" /><br />
                <p>
                <input type="submit" name="submit" value="Отправить">
            </td>
        </tr>
    </table>
</form>
<?php endif;?>


проверил у себя, поправил ошибки, если вдруг что не заработает дайте ваш ftp, сделаю за так, раз уж взялся. если нужно конечно.

Сообщение отредактировал webpavilion - 3.4.2010, 22:28


--------------------
Не ведитесь, cамопис это почти всегда плохо!

Делаю сайты на Drupal 7.x
(очень дорого)


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Kuznec37
Kuznec37
Topic Starter сообщение 4.4.2010, 11:37; Ответить: Kuznec37
Сообщение #5


Старожил
******

Группа: Active User
Сообщений: 1134
Регистрация: 24.4.2008
Из: Кафа
Поблагодарили: 279 раз
Репутация:   32  


Все отлично, спасибо за отзывчивость. Пришлось только кусок кода вынести в файл шаблона. Шаблон отделен от движка, вылезала ошибка Warning: Cannot send session cache limiter - headers already sent, поэтому часть
<?php
session_start();
if (isset($_SESSION["captcha"]) && $_SESSION["captcha"]===$_POST["captcha"]) $captcha = TRUE;
else $captcha = FALSE;
unset($_SESSION["captcha"]);
?>

с этого файла убрал и добавил в самый верх файла шаблона. И еще, все пустые строки нужно убрать, иначе будут ошибки.
Данную форму обратной связи с капчей можно применить практически на любом сайте.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Нужна помощь в активации аккаунта AdSense
10 dimaguru 2556 Сегодня, 11:12
автор: Ley
Открытая тема (нет новых ответов) Недорогие услуги - php/js/mysql/jquery/bootstrap
2 vlads 654 13.12.2017, 21:01
автор: vlads
Открытая тема (нет новых ответов) Веб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
18 qpPeW 3429 12.12.2017, 13:32
автор: qpPeW
Открытая тема (нет новых ответов) Очень нужна работа
Желательно на постоянной основе
11 Yuliya_Klim 1724 11.12.2017, 19:26
автор: beliaev
Открытая тема (нет новых ответов) php скрипты любой сложности / диз+верстка (адаптивно)
любые задачи на php - автоматизация, парсинг, работа с БД
1 affrodita 502 8.12.2017, 17:40
автор: affrodita


 



RSS Текстовая версия Сейчас: 15.12.2017, 22:22
Дизайн