1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

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

Тема в разделе "Web Coding", создана пользователем Diablos86, 18 авг 2007.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Diablos86

    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>
    
     
  2. kalabro

    kalabro Постоялец

    Регистр.:
    11 авг 2007
    Сообщения:
    74
    Симпатии:
    6
    ну самое простое:
    Вот этот кусок у себя найди:
    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 "Верно";
    Я не знаю прада нужно ли тебе это "верно" = ) но это уже другой вопрос.
     
    Diablos86 нравится это.
  3. Diablos86

    Diablos86 Писатель

    Регистр.:
    15 июл 2007
    Сообщения:
    9
    Симпатии:
    0
    kalabro мега РЕСПЕКТ тебе и огромное СПАСИБО... :ay: всё заработало. Мне это даже сам Сергей Круглов (который написал алгоритм каптчи) не смог сказать как это исправить. :D
     
  4. kalabro

    kalabro Постоялец

    Регистр.:
    11 авг 2007
    Сообщения:
    74
    Симпатии:
    6
    слава Богу не пришлось когда либо слышать имя этого мегасоздателя :D
    А так, это не проблема у тебя была, а просто кривенькие руки = )
    Вот эта CAPTCHA мне нравится больше, как-то солиднее чтоли выглядит
    Перейти по ссылке
     
  5. Diablos86

    Diablos86 Писатель

    Регистр.:
    15 июл 2007
    Сообщения:
    9
    Симпатии:
    0
    А эту каптчу также устанавливать? :)
     
  6. HappyWorld

    HappyWorld Постоялец

    Регистр.:
    19 июл 2007
    Сообщения:
    83
    Симпатии:
    16
    советую пошевелить остатками своего серого вещества и ознакомиться таки с трудами Сергея Круглова.
     
  7. kalabro

    kalabro Постоялец

    Регистр.:
    11 авг 2007
    Сообщения:
    74
    Симпатии:
    6
    Вы очень любезны, если сочту нужным, ознакомлюсь. А пока, мне даже не известно кто это и я не страдаю.
     
Статус темы:
Закрыта.