2015-08-08 4 views
4

Я пытаюсь написать простую функцию math captcha для проверки формы, которая позволит пользователям публиковать определенную статью в блоге.PHP math captcha function

Функция:

function create_captcha($num1, $num2) { 
     $num1 = (int)$num1; 
     $num2 = (int)$num2; 
     $rand_num_1 = mt_rand($num1, $num2); 
     $rand_num_2 = mt_rand($num1, $num2); 
     $result = $rand_num_1 + $rand_num_2; 
     return $result; 
    } 

Форма:

<h2 class="email_users_headers">Post Article</h1> 
    <form action="" method="post" id="post_blog_entry"> 
     <input type="text" name="title" id="title" placeholder="title... *"><br> 
     <textarea name="content" id="content" cols="30" rows="5" placeholder="content... *"></textarea><br> 
     <?php echo create_captcha(1, 20) . ' + ' . create_captcha(1, 20) . ' = '; ?> 
     <input type="text" name="captcha_results" size="2"> 
     <input type="hidden" name='num1' value='<?php echo create_captcha(1, 20); ?>'> 
     <input type="hidden" name='num2' value='<?php echo create_captcha(1, 20); ?>'> 
     <input type="submit" name="publish" value="post entry" id="publish"> 
    </form> 

Captcha проверки:

if (empty($_POST['captcha_results']) === true) { 
       $errors[] = 'Please enter captcha'; 
      } else { 
       if ($_POST['captcha_results'] != $_POST['num1'] + $_POST['num2']) { 
        $errors[] = 'Incorrect captcha'; 
       } 
      } 

Я знаю, что это совершенно неправильно, потому что независимо от того, входной результат всегда неправильно. Может ли кто-нибудь указать мне в правильном направлении, поскольку у меня нет опыта работы с PHP.

+0

Вы вошли ваши три значения POST? – Pikamander2

ответ

2

Каждый раз, когда вы запускаете create_captcha(1, 20), он генерирует разные значения.

  1. create_captcha (1, 20) - 3 + 7 = 10
  2. create_captcha (1, 20) - 6 + 11 = 17 ...

И в вашей форме вы это называете раз.

Я думаю, что вы должны сделать, это:

$num1 = create_captcha(1, 20); 
$num2 = create_captcha(1, 20); 

И использовать эти значения в форму:

<textarea name="content" id="content" cols="30" rows="5" placeholder="content... *"></textarea><br> 
<?php echo $num1 . ' + ' . $num2 . ' = '; ?> 
<input type="text" name="captcha_results" size="2"> 
<input type="hidden" name='num1' value='<?php echo $num1; ?>'> 
<input type="hidden" name='num2' value='<?php echo $num2; ?>'> 
+0

Я пробовал все это, однако при сравнении '$ _POST ['captcha_results']' с '$ _POST ['num1'] + $ _POST ['num2']' - это всегда возвращает число 50, а функция captcha все время генерирует случайные числа. Нужно ли мне что-то удалить из функции? – Dominique

+0

Я заменил! == с! = И теперь он работает. Это правильный подход? Почему это сработало с! = Но не с! ==? Спасибо, я пока не могу проголосовать за ваше решение, недостаточно. – Dominique

+1

Хотя '! =' Проверяет только значения переменных, '! ==' также проверяет его типы. –