Использование системной капчи со своими скриптами

#
Использование системной капчи со своими скриптами
Возник вопрос, допустим есть код отправки почты вставленный в поле "Динамическая страница"

<?
error_reporting(1);
function show_form()
{
?>
<form action="" method="post">
<table border="0" cellpadding="2" cellspacing="0">
<tr>
<td width="30"><p align="left">Имя:<sup><font color="red">*</font></sup></p></td><td align="left"><input type="text" name="input_name[0]" size="35" value="<?=substr(htmlspecialchars(trim($_POST['input_name'][0])), 0, 500);?>" /><input type="hidden" name="check[]" value="1" /></td>
</tr>
<tr>
<td width="30"><p align="left">Почта:<font color="red">*</font></sup></p></td>
<td align="left"><input type="text" name="input_name[1]" size="35" value="<?=substr(htmlspecialchars(trim($_POST['input_name'][1])), 0, 500);?>" /><input type="hidden" name="check[]" value="1" /></td>
</tr>
<tr valign="top" width="30">
<td><p align="left">Сообщение:<font color="red">*</font></sup></p></td>
<td align="left"><textarea rows="7" cols="40" name="input_name[2]"><?=substr(htmlspecialchars(trim($_POST['input_name'][3])), 0, 10000);?></textarea><input type="hidden" name="check[]" value="1" /></td>
</tr>
<tr>
<td></td>
<td align="left"><input type="submit" value="Отправить" name="submit" /><br/><br/>
</td>
</tr>
</table>
</form>
<?
}
function complete_mail() {

$empty_input[] = 'Имя';
$empty_input[] = 'Почта';
$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 '<br /><b>Необходимо заполнить поле '.$empty_input[$i].'!</b>';

}
}
}
if($sendemail == 'No') show_form();
$mess = '';
$mess .= '<b>Имя: </b>'.$_POST['input_name'][0].'<br />';
$mess .= '<b>Почтаl: </b>'.$_POST['input_name'][1].'<br />';
$mess .= '<b>Сообщение: </b>'.$_POST['input_name'][3].'<br />';
// подключаем файл класса для отправки почты
// если Вы забыли его скачать - http://www.php-mail.ru/class.phpmailer.zip
require 'class.phpmailer.php';

$mail = new PHPMailer();
$mail->From = 'mail@mail.com';      // от кого email
$mail->FromName = 'обратная связь';   // от кого имя
$mail->AddAddress('mail@mail.com', 'mail@mail.com'); // кому - адрес, Имя
$mail->IsHTML(true);        // выставляем формат письма HTML
$mail->Subject = 'обратная связь';  // тема письма
$mail->Body = $mess;



if($sendemail != 'No'){
// отправляем наше письмо
if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
echo 'Ваше письмо отправлено.';
}
}
if (!empty($_POST['submit'])) complete_mail();
else show_form();
?>


Как можно капчу сюда подключить которая в системе присутствует? =)

Cпасибо
ку
Модератор
#
Re: Использование системной капчи со своими скриптами
Руководство по интеграции дизайна, стр. 59

Вообще у нас есть модуль "Формы", который решает такие задачи.
#
Re: Использование системной капчи со своими скриптами
пока не перешли на коммерцию временно нужно решение -)

не получается что-то заставить работать:


<?
error_reporting(1);
function show_form()
{
?>
<?php
$Captcha = new Captcha();
$x1 = $Captcha->GetCaptchaId();
/* $captcha_result   true  false */
$captcha_result = $Captcha->ValidCaptcha($_POST['captcha_key'], $_POST['captcha_value']);

if ($captcha_result)
{
?>
Код верный
<?php
}
else
{
?>
      Введит еше раз!
<?php
}
?>
<form action="" method="post">
<table border="0" cellpadding="5" cellspacing="0">
<tr>
<td width="30"><p align="left">Имя:<sup><font color="red">*</font></sup></p></td><td align="left"><input type="text" name="input_name[0]" size="35" value="<?=substr(htmlspecialchars(trim($_POST['input_name'][0])), 0, 500);?>" /><input type="hidden" name="check[]" value="1" /></td>
</tr>
<tr>
<td width="30"><p align="left">Почта:<font color="red">*</font></sup></p></td>
<td align="left"><input type="text" name="input_name[1]" size="35" value="<?=substr(htmlspecialchars(trim($_POST['input_name'][1])), 0, 500);?>" /><input type="hidden" name="check[]" value="1" /></td>
</tr>
<tr width="30">
<td><p align="left">Сообщение:<font color="red">*</font></sup></p></td>
<td align="left"><textarea rows="7" cols="40" name="input_name[2]"><?=substr(htmlspecialchars(trim($_POST['input_name'][3])), 0, 10000);?></textarea><input type="hidden" name="check[]" value="1" />
   <!-- Обработка CAPTCHA -->
               <p>
                  Контрольные цифры
                  <sup>
                     <font color="red">*</font>
                  </sup>
               </p>

               <div style="float: left">
                  <img id="AddRecordCaptcha" style="border: 1px solid #000000" src="/captcha.php?get_captcha=<?=$x1?>" title="Код подтверждения" name="captcha"/>
               </div>

               <div id="captcha" style="clear:both;">
                  <img style="border: 0px" src="/hostcmsfiles/images/refresh.gif" /> <a href="javascript:void(0);" onclick="ReNewCaptchaById('AddRecordCaptcha', '{/document/captcha_key}', 30); return false;">Показать другое число</a>
               </div>

               <div style="float: left;margin-top: 5px">
                  <input type="hidden" name="captcha_key" value="<?=$x1?>"/>
            <input name="captcha_value" type="text" size="15">
               </div>

               <div id="captcha" style="clear:both;margin-bottom:10px;">
                  Введите число, которое указано выше.
               </div>
</td>
</tr>
<tr>
<td></td>
<td align="left"><input type="submit" value="Отправить" class="button" name="submit" /><br/><br/>
</td>
</tr>
</table>
</form>
<?
}
function complete_mail() {

$empty_input[] = 'Имя';
$empty_input[] = 'Почта';
$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 '<br /><b>Необходимо заполнить поле '.$empty_input[$i].'!</b>';

}
}
}
if($sendemail == 'No') show_form();
$mess = '';
$mess .= '<b>Имя: </b>'.$_POST['input_name'][0].'<br />';
$mess .= '<b>Почтаl: </b>'.$_POST['input_name'][1].'<br />';
$mess .= '<b>Сообщение: </b>'.$_POST['input_name'][3].'<br />';
// подключаем файл класса для отправки почты
// если Вы забыли его скачать - http://www.php-mail.ru/class.phpmailer.zip
require 'class.phpmailer.php';

$mail = new PHPMailer();
$mail->From = 'contact@zhigalin.com';      // от кого email
$mail->FromName = 'обратная связь';   // от кого имя
$mail->AddAddress('info@southart.ru', 'anephew@gmail.com'); // кому - адрес, Имя
$mail->IsHTML(true);        // выставляем формат письма HTML
$mail->Subject = 'обратная связь с вашего сайта zhigalin.com';  // тема письма
$mail->Body = $mess;



if($sendemail != 'No'){
// отправляем наше письмо
if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
echo 'Спасибо! Ваше письмо отправлено.';
}
}
if (!empty($_POST['submit'])) complete_mail();
else show_form();
?>


Код отправляет как и раньше  - капча не проверяется на заполнение 8(

Не подскажите как правильно? с php ведь плохо совсем //
ку
Модератор
#
Re: Использование системной капчи со своими скриптами
compaq,
так выводит "Код верный" или "Введит еше раз"?
#
Re: Использование системной капчи со своими скриптами
Проверил еще раз - что появляется на странице:

Выводиться ненужная - Введит еше раз!
и ниже форма.

+

при попытке заполении полей кроме капчи она спокойно отправляет данные, о чем на следующей странице говорит "Спасибо! Ваше письмо отправлено."
ку
Модератор
#
Re: Использование системной капчи со своими скриптами
compaq,
так а где же Вы установили проверку, что если капча не введена - то не отправлять?

Код отправки нужно внести вместо "Код верный".
#
Re: Использование системной капчи со своими скриптами
Вот что имею

<?php
error_reporting(1);

$Captcha = new Captcha();
$x1 = $Captcha->GetCaptchaId();

$captcha_result = $Captcha->ValidCaptcha($_POST['captcha_key'], $_POST['captcha_value']);

if ($captcha_result = true)
{
?>

<?php

function show_form()
{
?>
<form action="" method="post">
<table border="0" cellpadding="5" cellspacing="0">
<tr>
<td width="30"><p align="left">Имя:<sup><font color="red">*</font></sup></p></td><td align="left"><input type="text" name="input_name[0]" size="35" value="<?=substr(htmlspecialchars(trim($_POST['input_name'][0])), 0, 500);?>" /><input type="hidden" name="check[]" value="1" /></td>
</tr>
<tr>
<td width="30"><p align="left">Почта:<font color="red">*</font></sup></p></td>
<td align="left"><input type="text" name="input_name[1]" size="35" value="<?=substr(htmlspecialchars(trim($_POST['input_name'][1])), 0, 500);?>" /><input type="hidden" name="check[]" value="1" /></td>
</tr>
<tr width="30" valign="top">
<td><p align="left">Сообщение:<font color="red">*</font></sup></p></td>
<td align="left"><textarea rows="7" cols="40" name="input_name[2]"><?=substr(htmlspecialchars(trim($_POST['input_name'][3])), 0, 10000);?></textarea><input type="hidden" name="check[]" value="1" />
   <!-- Обработка CAPTCHA -->
               <p>
                  Контрольные цифры
                  <sup>
                     <font color="red">*</font>
                  </sup>
               </p>

               <div style="float: left">
                  <img id="AddRecordCaptcha" style="border: 1px solid #000000" src="/captcha.php?get_captcha=<?=$x1?>" title="Код подтверждения" name="captcha"/>
               </div>

               <div id="captcha" style="clear:both;">
                  <img style="border: 0px" src="/hostcmsfiles/images/refresh.gif" /> <a href="javascript:void(0);" onclick="ReNewCaptchaById('AddRecordCaptcha', '{/document/captcha_key}', 30); return false;">Показать другое число</a>
               </div>

               <div style="float: left;margin-top: 5px">
                  <input type="hidden" name="captcha_key" value="<?=$x1?>"/>
            <input name="captcha_value" type="text" size="15">
               </div>

               <div id="captcha" style="clear:both;margin-bottom:10px;">
                  Введите число, которое указано выше.
               </div>
</td>
</tr>
<tr>
<td></td>
<td align="left"><input type="submit" value="Отправить" class="button" name="submit" /><br/><br/>
</td>
</tr>
</table>
</form>
<?
}
function complete_mail() {

$empty_input[] = 'Имя';
$empty_input[] = 'Почта';
$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 '<br /><b>Необходимо заполнить поле '.$empty_input[$i].'!</b>';

}
}
}
if($sendemail == 'No') show_form();
$mess = '';
$mess .= '<b>Имя: </b>'.$_POST['input_name'][0].'<br />';
$mess .= '<b>Почтаl: </b>'.$_POST['input_name'][1].'<br />';
$mess .= '<b>Сообщение: </b>'.$_POST['input_name'][3].'<br />';
// подключаем файл класса для отправки почты
// если Вы забыли его скачать - http://www.php-mail.ru/class.phpmailer.zip
require 'class.phpmailer.php';

$mail = new PHPMailer();
$mail->From = '#';      // от кого email
$mail->FromName = 'обратная связь';   // от кого имя
$mail->AddAddress('#', '#'); // кому - адрес, Имя
$mail->IsHTML(true);        // выставляем формат письма HTML
$mail->Subject = 'обратная связь с вашего сайта zhigalin.com';  // тема письма
$mail->Body = $mess;



if($sendemail != 'No'){
// отправляем наше письмо
if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
echo 'Спасибо! Ваше письмо отправлено.';
}
}
if (!empty($_POST['submit'])) complete_mail();
else show_form();
?>

<?php
}
else
if ($captcha_result = false)
{
?>
       неверно!
<?php
}

?>


Логику написания кода не понимаю здесь.

Вроде if проставил но все равно второе условие почему-то не выполняется -
if ($captcha_result = false)

Форма отправляет все равно данные. ошибок не дает никаких. все хорошо
ку
Модератор
#
Re: Использование системной капчи со своими скриптами
"=" - это присваивание, "==" - это сравнение (эквивалентности), "===" - это сравнение (идентичности)
#
Re: Использование системной капчи со своими скриптами
ясно, только вот меняю и все равно не вижу результата...

if ($captcha_result = true)


if ($captcha_result = false)

Как правильно тут будет применить это параметр? И вообще только ли здесь в этом проблема?


ку
Модератор
#
Re: Использование системной капчи со своими скриптами
if ($captcha_result == true)
{

}
Авторизация