Вопрос по установке KCAPTCHA

Статус
В этой теме нельзя размещать новые ответы.

Diablos86

Писатель
Регистрация
15 Июл 2007
Сообщения
9
Реакции
0
Прикрутил я kcaptcha к форме обратной связи.
Но при вводе неправильного кода, сообщение всё равно отправляется, даже пишет что код введён не верно. Както надо сделать чтобы письмо не отправлялось, если код введён не верно... но вот как?
Кучу форумов просмотрел так и не нашёл ответа.
Заранее спасибо за помощь.
Вот код формы c коментариями:
Код:
<?php 
session_start(); # СТАРТ СЕССИИ
error_reporting(0);
require("./config.inc"); 
require("./header.inc");
# Функции
  function formtohtml ($str) {
    if (get_magic_quotes_gpc()) {
    $str = stripslashes($str);
    }
  $str = trim($str);
  $str = htmlspecialchars ($str, ENT_QUOTES);
  $str = str_replace("|", "/", $str);
  $str = str_replace("\r", "", $str);
  $str = str_replace("\n", "<br>", $str);
  $str = eregi_replace("(<br>*){2,}","<br><br>",$str);
  $str = eregi_replace("[ ]{2,}", " ", $str);
  return $str;
  }
  function htmltoform ($str) {
  $str = str_replace("&amp;", "&", $str);
  $str = str_replace("&quot;", "\"", $str);
  $str = str_replace("'", "'", $str);
  $str = str_replace("&lt;", "<", $str);
  $str = str_replace("&gt;", ">", $str);
  $str = str_replace("<br>", "\r\n", $str);
  return $str;
  }
# Отправка сообщения
  if (!empty($_GET['a']) and $_GET['a'] == "m") {
  $var['fields'] = array("name"=>"Контактное лицо", "email"=>"E-Mail", "subject"=>"Тема", "message"=>"Сообщение", "keystring"=>"Введите код"); # Обязательные поля для заполнения
  $notice['error'] = array();
    foreach ($var['fields'] as $key => $value) {
    if (empty($_POST[$key]) || (($_POST[$key] = formtohtml($_POST[$key])) == "0")) $notice['error'][] = $value;
    }
    if (empty($notice['error'])) {
      if (preg_match("/^([a-z,0-9,_,\-,\.])+\@([a-z,0-9,_,\-])+(\.([a-z,0-9])+)+$/",$_POST['email'])) {
      $t['c'] = file($config['recip_f']);
      $t['n'] = sizeof($t['c']);
        for ($i=0;$i<$t['n'];$i++) {
        $t['c'][$i] = explode("|",trim($t['c'][$i]));
        }
        if (!empty($_POST['recip']) and !empty($t['c'][$_POST['recip']-1])) {
        $var['recip_n'] = $t['c'][$_POST['recip']-1][1];
        $var['recip_e'] = $t['c'][$_POST['recip']-1][0];
          if (function_exists("imap_binary")) {
            function mail_convert($str) {
            $str = trim(imap_binary(addcslashes($str, "\"!@\\!@(!@)")));
            return $str;
            }
          $var['subj'] = "=?Windows-1251?B?".trim(imap_binary(htmltoform($_POST['subject'])))."?=";
          $var['header']  = "From: =?Windows-1251?B?".mail_convert(htmltoform($_POST['name']))."?= <".$_POST['email'].">\r\n";
          $var['header'] .= "MIME-Version: 1.0\r\n";
          $var['header'] .= "Content-Transfer-Encoding: 8bit\r\n";
          $var['header'] .= "Content-Type: text/plain; charset=\"Windows-1251\"\r\n";
          $var['header'] .= "X-Mailer: PHP v.".phpversion();
          $var['message']  = htmltoform($_POST['message']); 
          if (!empty($config['features'])) $var['message'] .=  "\r\n\r\n 
---------------------------------------\r\n
Письмо от: $name \r
На тему: $subject \r
Организация: $org \r
Должность: $dol \r
Телефон: $tel \r
Сайт: $suite \r
Как связаться: $teoemaio \r 
Как узнали о нас: $sea $mag $znak $nar $viz $dr \r\n 
---------------------------------------\r\n
Код защиты от спама: $keystring \r 
IP адрес отправителя: ".$_SERVER['REMOTE_ADDR'];
          # Пытаемся послать сообщение
if(count($_POST)>0){
		if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] ==  $_POST['keystring']){
			echo "Верно";
		}else{
			echo "Не верно";
		}
	}
	unset($_SESSION['captcha_keystring']);
            if (mail("=?Windows-1251?B?".mail_convert(htmltoform($var['recip_n']))."?= <".$var['recip_e'].">",$var['subj'],$var['message'],$var['header'])) {
		 $notice['ok'] = "Сообщение успешно отправлено";
            }
            else {
            $notice['error'] = "Системная ошибка - сбой функции &quot;mail&quot;";
            }
          }
          else {
          $notice['error'] = "Ошибка программы - недоступна функция &quot;imap_binary&quot;";
          }
        }
        else {
        $notice['error'] = "Ошибка настоек программы - неверный получатель";
        }
      }
      else {
      $notice['error'] = "Пожалуйста, проверьте правильность e-mail";
      }
    }
    else {
    $notice['error'] = "Пожалуйста, заполните поля: ".implode(", ",$notice['error']);
    }
  }
echo "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\">\r\n";
  if (empty($notice['ok'])) {
  echo "<form name=\"SM\" method=\"POST\" action=\"".$_SERVER['PHP_SELF']."?a=m\">\r\n";
  }
  else {
  // ПРИ ВОЗНИКНОВЕНИИ ОШИБКИ "METHOD POST NOT ALLOWED" ИЗМЕНИТЬ "POST" на "GET"
  echo "<form name=\"GT\" method=\"GET\" action=\"".$config['url_path']."\">\r\n";
  }
# Сообщение о завершении / ошибке
  if (!empty($notice)) {
  echo "<tr><td align=\"center\">";
    if (!empty($notice['ok'])) {
    echo "<p><b><font color=\"#008000\">".$notice['ok']."!</font></b></p>";
    }
    elseif (!empty($notice['error'])) {
    echo "<p><b><font color=\"#800000\">".$notice['error']."!</font></b></p>";
    }
  echo "</td></tr>\r\n";
  }
# Вывод формы
  if (empty($notice['ok'])) {
  echo "<tr><td align=\"center\">";
  require("./form.inc");
  echo "</td></tr>\r\n";
  }
echo "<tr><td align=\"center\"><table border=\"0\" cellpadding=\"5\" cellspacing=\"0\"><tr><td>";
# Кнопки
  if (empty($notice['ok'])) {
  echo "<input type=\"submit\" value=\"Отправить\"></td>\r\n";
  echo "<td><input type=\"reset\" value=\"Сбросить\">\r\n";
  echo "<td><input type=\"button\" value=\"Назад\" OnClick=\"history.back();\">\r\n";
  }
  else {
  echo "<input type=\"submit\" value=\"".$config['url_name']."\">\r\n";
  }
echo "</td></tr></table></td></tr>\r\n";
# Футер
require("./footer.inc");
?>
А вот кусок самой формы (самый низ:(
Код:
....
  <tr>
    <td align="left"><p class="style4">Сообщение: •</p></td>
    <td><textarea class="style3" name="message" rows="6" cols="45"><?php if (!empty($_POST['message'])) echo 
htmltoform($_POST['message']); ?></textarea></td>
  </tr><tr><td align="left">
            <p class="style4">Введите код: •</td>
            <td>
	<img src="/kcaptcha/index.php?<?php echo session_name()?>=<?php echo session_id()?>"><br/>
            	<input type="text" class="style3" cols="19" name="keystring">
	</td>
    </tr>
</table>
 
ну самое простое:
Вот этот кусок у себя найди:
PHP:
            if (mail("=?Windows-1251?B?".mail_convert(htmltoform($var['recip_n']))."?=<".$var['recip_e'].">",$var['subj'],$var['message'],$var['header'])) {
		 $notice['ok'] = "Сообщение успешно отправлено";
            }
            else {
            $notice['error'] = "Системная ошибка - сбой функции &quot;mail&quot;";
            }
и перенеси его в другое место: сразу после
PHP:
echo "Верно";
Я не знаю прада нужно ли тебе это "верно" = ) но это уже другой вопрос.
 
kalabro мега РЕСПЕКТ тебе и огромное СПАСИБО... :ay: всё заработало. Мне это даже сам Сергей Круглов (который написал алгоритм каптчи) не смог сказать как это исправить. :D
 
Мне это даже сам Сергей Круглов
слава Богу не пришлось когда либо слышать имя этого мегасоздателя :D
А так, это не проблема у тебя была, а просто кривенькие руки = )
Вот эта CAPTCHA мне нравится больше, как-то солиднее чтоли выглядит
Для просмотра ссылки Войди или Зарегистрируйся
 
А эту каптчу также устанавливать? :)
 
слава Богу не пришлось когда либо слышать имя этого мегасоздателя :D
советую пошевелить остатками своего серого вещества и ознакомиться таки с трудами Сергея Круглова.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху