Помощник
|
Нужна помощь по Php, Интеграция капчи в форму обратной связи |
Kuznec37
|
Сообщение
#1
|
||
|
|
||
|
|||
webpavilion |
3.4.2010, 19:12;
Ответить: webpavilion
Сообщение
#2
|
|
извольте:
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
|
Сообщение
#3
|
|
извольте: 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 |
3.4.2010, 21:07;
Ответить: webpavilion
Сообщение
#4
|
|
<?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 (очень дорого) |
|
|
Kuznec37
|
Сообщение
#5
|
|
|
Все отлично, спасибо за отзывчивость. Пришлось только кусок кода вынести в файл шаблона. Шаблон отделен от движка, вылезала ошибка 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"]); ?> с этого файла убрал и добавил в самый верх файла шаблона. И еще, все пустые строки нужно убрать, иначе будут ошибки. Данную форму обратной связи с капчей можно применить практически на любом сайте.
-------------------- |
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Нужна програмка постинга в свои сайты | 0 | kasey7 | 305 | 22.4.2024, 19:54 автор: kasey7 |
|
Требуется помощь по сайту на "ВордПресс" Закрылся доступ в панель администратора |
15 | Tia2 | 2384 | 17.4.2024, 0:54 автор: diviner99 |
|
Состояние после ампутации - нужна помощь благотворительный топик |
49 | vitvirtual | 5894 | 1.4.2024, 5:23 автор: vitvirtual |
|
Нужна ли плоская структура категорий в ИМ? | 1 | noviktamw | 1182 | 26.3.2024, 21:50 автор: c4p1t4l15t |
|
требуется помощь с themasoftware (Темапостером) | 0 | Taylor | 630 | 16.3.2024, 18:41 автор: Taylor |
Текстовая версия | Сейчас: 24.4.2024, 15:29 |