Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 23

Сравнение введённой капчи в форму с генерируемой POST=SESSION

24.01.2017, 08:12. Показов 820. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть капча которая генерируется при помощи php и выводится возле формы и есть форма ввода этой капчи, так вот необходимо сравнить ведённое значение в форму с той что с генерировал php код.

Генерация капчи:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
    session_start();
    $string = "";
    for ($i = 0; $i < 5; $i++)
        $string .= chr(rand(97, 122));
    
    $_SESSION['rand_code'] = $string;
 
    $dir = "fonts/";
 
    $image = imagecreatetruecolor(170, 60);
    $black = imagecolorallocate($image, 0, 0, 0);
    $color = imagecolorallocate($image, 200, 100, 90);
    $white = imagecolorallocate($image, 255, 255, 255);
 
    imagefilledrectangle($image,0,0,399,99,$white);
    imagettftext ($image, 30, 0, 10, 40, $color, $dir."verdana.ttf", $_SESSION['rand_code']);
 
    header("Content-type: image/png");
    imagepng($image);
?>
Вывод капчи в форме:
HTML5
1
2
3
  <h3>Проверчный код</h3>
  <img src = "captcha.php" />;
  <input type="text" name="kapcha" id="kapcha" />
Проверка введена ли капча и введена ли правильно:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
if($kapcha == '')
                {
    $log .= "<li>Пожалуйста, введите капчу!</li>";
    $error = "yes";
                  
                }           
 
else if($_POST['kapcha'] != $_SESSION['rand_code']) 
                {
                   
    $log .= "<li>Вы ввели неправильную капчу!</li>";
    $error = "yes";
                }
Он нормально проверяет введено ли значение в форму капчи и если не введено то выдаёт "Пожалуйста, введите капчу!", но когда вводишь значение пусть оно хоть правильное, хоть не правильное оно всё равно пишет "Вы ввели неправильную капчу!". Как реализовать проверку правильности введённой капчи?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.01.2017, 08:12
Ответы с готовыми решениями:

Что твориться с сессиями ? (strListingID = Session('ListingID'); strAccountID = Session('AccountID'); strActive = Session('Active'); )
-----------------------page1.asp-------------------------- Basicrs = Server.CreateObject('ADODB.Recordset'); theSQL='....'; ...

Почему session('aaa') обнуляется при session.Abandon, а session.sessionid остается таким же ?
Народ помогите &lt;% response.write(session.sessionid) response.write(session('aaa')) session.Abandon ...

Как вывести изображение капчи на форму?
Доброго времени суток! Имеется форма созданная при помощи библиотеки tkinter. Форма принимает данные для авторизации. По нажатию...

6
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
24.01.2017, 08:42
Ну, добавьте else и пропишите, что капча введена правильно.
Что-то вроде этого:
PHP
1
2
3
4
5
6
7
8
if(empty($_POST['kapcha'])){
  $log .= "<li>Пожалуйста, введите капчу!</li>";
  $error = "yes";
}else if($_POST['kapcha'] !== $_SESSION['rand_code']){
  $log .= "<li>Вы ввели неправильную капчу!</li>";
  $error = "yes";
}else
  $log .= "<li>Капча верна!</li>";
0
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 23
24.01.2017, 09:07  [ТС]
Бред, поскольку если все условия данного кода соблюдены, а именно правильность ввода имени, email, текста и капчи, то пишет следующее "Спасибо, Иван! Ваше сообщение отправлено!". Тут не работает именно данная часть
PHP
1
else if($_POST['kapcha'] != $_SESSION['rand_code'])
. Она просто не оповещает о том что сравнила капчи всё хорошо, ошибок нету. И там должно быть "!=" то есть не равно, тогда ошибка "Вы ввели неправильную капчу!".

Добавлено через 5 минут
И даже если я напишу в конце
PHP
1
2
3
4
else if($_POST['kapcha'] !== $_SESSION['rand_code'])
                {
    $error = "no";
                }
Ни чего не изменится капча всё равно остаётся якобы не верной. Значит что-то не так в процедуре сравнения.

Добавлено через 4 минуты
Всё ребята, всем спасибо за участи, это я не внимательный, забыл прописать "session_start();" там где делаю сравнение поста и сессии.

Добавлено через 18 секунд
Можно тему закрывать.
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
24.01.2017, 09:14
Любезный! Следите за словами и сначала думайте, что пИшите, а потом пишИте.
Во-вторых, сначала Вы проверяете $kapcha, а потом $_POST['kapcha'].
Цитата Сообщение от Editions Посмотреть сообщение
все условия данного кода соблюдены, а именно правильность ввода имени, email, текста и капчи, то пишет следующее "Спасибо, Иван! Ваше сообщение отправлено!"
Об этом Вы не сообщили.
И, напоследок, где именно Вы видите ошибку в моем коде???

Не по теме:


Невнимательный он... Так, повнимательней надо быть прежде чем гнать на код другого.

0
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 23
24.01.2017, 11:16  [ТС]
Спокойно, спокойно, я не чего против вас не имею, просто считаю бредом Ваш код в связи с тем что Вы поставили "!==" - а это как известно равенство между чем-то, в нашем случае это равенство между ведённым значением в "kapcha" и с генерированным "rand_code". Но ведь нам нужно определит не равенство, так как комментарий у нас "Вы ввели неправильную капчу!", по этому нужно использовать "!=". Лишь в этом у Вас ошибка. Поскольку в вашем коде он будет сравнивать ведённую капчу со с генерированной и при равенстве будет выдавать ошибку "Вы ввели неправильную капчу!", не логично, не правда ли?

А на счёт "$log .= "<li>Капча верна!</li>";". Хороший совет, за это спасибо. Но у меня система удачного ввода реализована иначе, но вы ведь не знали об этом, по этому к Вам претензий в этом плане нету, на оборот ко мне, поскольку я не полностью описал систему вывода ошибок при вводе в форму данных.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
24.01.2017, 11:59
Editions,
!= не равно
!== не равно или разные типы данных
0
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 23
24.01.2017, 13:29  [ТС]
Прошу прощение у Пифагора, немного перепутал операторы. Ровно же будет "==".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2017, 13:29
Помогаю со студенческими работами здесь

Получение капчи с сайта и отправка данных в форму на сайте
Помогите начинающему программисту. Допустим нужна программа для регистрации тут. Как это (получение капчи и отправка данных в форму)...

Вывод ошибок undefined index, если не найдена переменная в глоб. массивах session, post, get
Подскажите, я писал php на денвере, а после пересел на обычную вручную поставленную связку apache+php+mysql. В денвере при не нахождении...

Сравнение типов введенной информации
Подскажите, есть такой вот код public static void main(String args) throws IOException { try{ Scanner br = new...

Сравнение подстроки введённой пользователем в QString
Пользователь вводит строку, например, create 1 bla if (в введённой строке пользователем есть create) {Функция 1} Как это реализовать...

Сравнение строки, введенной с клавиатуры, с заданной
Помогите пожалуйста сравнить строку, введенную с клавиатуры, с той, которая по умолчанию data segment welcome db &quot;Vvedite...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru