Проверка капчи

Asset

Новичок
Люди добрые и злые) помогите разобраться, как корректно задать проверку для капчи, два дня кручу, ничего не получается :(

captcha.php:
PHP:
<?php

session_start();

require "captcha.class.php"; //Подключаем класс капчи

//Инициализируем капчу
$captcha = new Captcha();

$_SESSION['keystring'] = $captcha->getKeyString();

echo $captcha->draw();

?>
contact.php:
PHP:
<?php session_start();
error_reporting(E_ALL ^ E_NOTICE);

//Форма
if(isset($_POST['submitted'])) {
   
    // Имя
    if(trim($_POST['contactName']) === '') {
        $nameError =  'Пожалуйста укажите имя!';
        $hasError = true;
    } else {
        $name = trim($_POST['contactName']);
    }
   
    // Мыло
    if(trim($_POST['email']) === '')  {
        $emailError = 'Пожалуйста укажите свой e-mail адрес!';
        $hasError = true;
    } else if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", trim($_POST['email']))) {
        $emailError = 'Пожалуйста укажите существующий e-mail адрес!';
        $hasError = true;
    } else {
        $email = trim($_POST['email']);
    }
   
       
    // Сообщение
    if(trim($_POST['comments']) === '') {
        $commentError = 'Вы забыли ввести сообщение!';
        $hasError = true;
    } else {
        if(function_exists('stripslashes')) {
            $comments = stripslashes(trim($_POST['comments']));
        } else {
            $comments = trim($_POST['comments']);
        }
    }
   
        // Капча
    if(trim($_POST['pr']) === '')  {
        $prError = 'Введите число с картинки!';
        $hasError = true;
    } else if (isset($_POST['pr']) && $_POST['pr'] == $_SESSION['keystring']) {
        $prError = 'Введено неверное число!';
        $hasError = true;
    } else {
        $pr = trim($_POST['pr']);
    }
       
    // Форм
    if(!isset($hasError)) {
       
        $emailTo = '[email protected]';
        $subject = 'Сообщение от '.$name;
        $sendCopy = trim($_POST['sendCopy']);
        $body = "Имя: $name \n\nE-mail: $email \n\nСообщение: $comments";
        $headers = 'From: ' .' <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;
        $headers .= "Content-Type: text/html; charset=utf-8\r\n";
                  
                           

        mail($emailTo, $subject, $body, $headers);
       
        // Отпр
        $emailSent = true;
    }
}
?>

Далее сама форма:

         <?php if(isset($emailSent) && $emailSent == true) { ?>
                <p class="info">Ваше сообщение было отправлено!</p>
            <?php } else { ?>   
                <div id="contact-form">
               
                    <form id="contact-us" action="contact.php" method="post">
                        <div class="formblock">
                            <label class="screen-reader-text">Имя <?php if($nameError != '') { ?>
                                <span class="error"><?php echo $nameError;?></span> 
                            <?php } ?></label>
                            <input type="text" name="contactName" id="contactName" value="<?php if(isset($_POST['contactName'])) echo $_POST['contactName'];?>" class="txt requiredField" placeholder="Петров Петр Петрович" />
                           
                        </div>
                       
                        <div class="formblock">
                            <label class="screen-reader-text">E-mail <?php if($emailError != '') { ?>
                                <span class="error"><?php echo $emailError;?></span>
                            <?php } ?></label>
                            <input type="text" name="email" id="email" value="<?php if(isset($_POST['email']))  echo $_POST['email'];?>" class="txt requiredField email" placeholder="мойэмейл@mail.ua" />
                           
                        </div>
                       
                        <div class="formblock">
                            <label class="screen-reader-text">Сообщение <?php if($commentError != '') { ?>
                                <span class="error"><?php echo $commentError;?></span> 
                            <?php } ?></label>
                            <textarea name="comments" id="commentsText" class="txtarea requiredField" placeholder="Текст сообщения"><?php if(isset($_POST['comments'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['comments']); } else { echo $_POST['comments']; } } ?></textarea>
                           
                        </div>                      
                        <div class="formblock">  
                        <label class="screen-reader-text"><br><?php require 'captcha.php';?><?php if($prError != '') { ?>
                        <span class="error"><?php echo $prError;?></span> 
                            <?php } ?></label><br/>  
<input name="pr" style=" margin-bottom:11px" type="text" size="6" maxlength="5" value="<?php if(isset($_POST['pr']))  echo $_POST['pr'];?>"
class="txt requiredField email" placeholder="Введите число с картинки" />
</div>
<br>                      
                        <label id="load" style="display:none"></label>
                            <input id="submit-button" class="button gray stripe" type="submit" name="submit" value="Отправить" />
                            <input type="hidden" name="submitted" id="submitted" value="true" /><br/><br/><br/>                           
                    </form>           
                </div>
               
            <?php } ?>
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
PHP:
error_reporting(E_ALL ^ E_NOTICE);
За это уже по рукам можно получить в приличном обществе.

Да и, собственно, за это:
PHP:
if(trim($_POST['pr']) === '')
тоже можно.

А самое главное, где вопрос? Вывалить кучу кода и не указать проблемного места - моветон.
 

Asset

Новичок
PHP:
error_reporting(E_ALL ^ E_NOTICE);
За это уже по рукам можно получить в приличном обществе.

Да и, собственно, за это:
PHP:
if(trim($_POST['pr']) === '')
тоже можно.

А самое главное, где вопрос? Вывалить кучу кода и не указать проблемного места - моветон.
Я не очень хорошо разбираюсь в пхп, в первую очередь, думаю не смог правильно задать обработку
PHP:
       // Капча
 if(trim($_POST['pr']) === '') {
 $prError = 'Введите число с картинки!';
 $hasError = true;
 } else if (isset($_POST['pr']) && $_POST['pr'] == $_SESSION['keystring']) {
 $prError = 'Введено неверное число!';
 $hasError = true;
 } else {
 $pr = trim($_POST['pr']);
 }
 

53ifbb

Новичок
вот это isset($_POST['pr']) у тебя всегда будет true. т.к. в начале обязательно должна быть установлена это переменная.
сделай

PHP:
$_POST['pr'] = isset($_POST['pr']) ? trim($_POST['pr']) : '';
if($_POST['pr'] == '') {
$prError = 'Введите число с картинки!';
$hasError = true;
} else if ($_POST['pr'] != $_SESSION['keystring']) {
$prError = 'Введено неверное число!';
$hasError = true;
} else {
$pr = $_POST['pr'];
}
 

drouZ

Новичок
PHP:
if(empty($_POST["pr"]))
{
       echo "Введите число с картинки.";
}
else
{
       //если число введено, пишем дальше.
}
Зачем лишние нагромождения?
 
Сверху