как сравнить сессию и то, что введено в поле
Всем доброго время суток!
У меня капча и поле , куда ввожу символы на картинке. Создала для нее валидацию на php, то есть, если кнопка нажата и введенное в поле совпадает с тем, что в сессии,значит все верно,а если не совпадают, то неверно. Но у меня еще валидация для всей формы на js и мне нужно ее переделать, чтобы там добавилась валидация для капчи, конкретно такая же как и на php. Вопрос как можно ее прописать на js? Вот валидация php конкретно для капча: if(isset($_POST['button'])){ if($_POST['secret'] == $_SESSION['secret']) { echo $_POST['secret']; echo $_SESSION['secret']; } else if($_POST['secret'] != $_SESSION['secret']) { echo "Введено неправильное число!"; } } Вот валидация на js для всей формы: function moderation_0() { alert((document.getElementById('comment').value != '' && document.getElementById('secret').value != '') ? 'Спасибо, Ваш комментарий отправлен на модерацию.' : 'Поля ввода текста не заполнены.'); } вот весь код php+html otzyvy.php: if(isset($_POST['button'])){ if($_POST['secret'] == $_SESSION['secret']) { echo $_POST['secret']; echo $_SESSION['secret']; } else if($_POST['secret'] != $_SESSION['secret']) { echo "Введено неправильное число!"; } } <span>Имя</span> <form action="otzyvy.php" method="POST"> <input class="author" id="author" type="text" name="author"/><br/> <span>Отзыв</span><br /> <textarea class="com" id="comment" name="comment" cols="30" rows="8"></textarea><br /> <?php include ('index.php'); ?><br /> <input class="button" name="button" type="submit" onclick="moderation_0()" value="Отправить" /> капча index.php <?php session_start(); // набор символов $alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; $secret = ""; // формируем строку из 5 символов, которая будет отображаться на картинке for($i=0; $i<5; $i++) { $secret.= $alpha[rand(0,strlen($alpha)-1)]; } // сохраняем сгенерированную строку в переменной сессии $_SESSION['secret'] = $secret; echo $_SESSION['secret']; ?> Введите число на картинке:<br /><input type="text" id="secret" name="secret" size="10"><br /> <img src="img.php"><br /> картинка для капча img.php session_start(); //Рисуем //Устанавливаем тип содержимого //Устанавливаем сообщения об ошибках header('Content-Type: image/png'); $image = imagecreate(80,31); //Выбираем цвет фона $grey = imagecolorallocate($image, 246,246,246); $red = imagecolorallocate($image, 255, 0, 0); $color = imagecolorallocate($image, 0, 0, 255); imagestring($image,5,10,7,$_SESSION['secret'],$color); //Оси координат imageline ($image, 20,0,80,3, $red); imageline ($image, 0,10,50,0, $red); imageline ($image, 90,5,40,31, $red); imageline ($image, 0,31,70,0, $red); //Сохраняем файл в формате png и выводим его imagepng($image); //Чистим использованную память imagedestroy($image); |
Один файл отдает картинку с капчей и записывает данные в сессию. 2-й файл получает значение капчи и сравнивает его с сессией.
При клике на кнопку отсылаете капчу на 2-й файл, получаете ответ и смотрите правильно или нет. |
я новичок, я не очень поняла вас, можно поподробней объяснить
|
js не проверит сам капчу. Для этого нужно взять значение капчи (которое вводится в поле) и отослать скрипту, который проверит капчу. Пхп скрипт вернет результат (сами решаете какой). И если капча верна - делаете сабмит формы, или что вы там делали.
|
а как js отослать значение капчи?
|
ajax
|
ясно
|
Эм...
img.php: session_start(); header('Content-Type: image/png'); $alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; for($i=0; $i<5; $i++) $secret.= $alpha[rand(0,strlen($alpha)-1)]; $_SESSION['secret'] = $secret; $image = imagecreate(80,31); $grey = imagecolorallocate($image, 246,246,246); $red = imagecolorallocate($image, 255, 0, 0); $color = imagecolorallocate($image, 0, 0, 255); imagestring($image,5,10,7,$secret,$color); imageline ($image, 20,0,80,3, $red); imageline ($image, 0,10,50,0, $red); imageline ($image, 90,5,40,31, $red); imageline ($image, 0,31,70,0, $red); imagepng($image); imagedestroy($image); page.php: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Документ без названия</title> </head> <body> <form method="post"> Введите код с картинки: <img alt="" src="img.php" /> <input name="secret" maxlength="5" type="text" /> <input type="sumbit" value="Отправить" /> </form> <script type="text/javascript"> <?php if($_POST['secret']) echo 'alert('.(($_POST['secret'] == $_SESSION['secret']) ? 'Всё верно!' : 'Неверный код безопасности!').')'; ?> </script> </body> </html> |
Ruslan_xDD, этот не помогает, у меня все перестает работать
|
я написала ajax,но мне не понятно как здесь прописать условие как в первом посте.
Валидация нужна только для полей textarea и для капча: если textarea пуста,то вывести сообщение(поле не заполнено) асинхронно, при событии onblur, если верно ничего не выводить; для input c id="secret как раз проверить $_POST['secret'] == $_SESSION['secret'] - проверить,если пользователь верно ввел символы, то ничего не выводить,если ошибся или строка пуста,то сообщение(вы неправильно ввели символы/строка пуст),тоже событие onblur; А если поля все верны,то просто после нажатия submit, вывести аlert('Спасибо, Ваш комментарий отправлен на модерацию') - как у меня в первом посте добавила див в index.php дла вывода ошибки и onblur="valid()" Введите число на картинке:<br /><input type="text" id="secret" name="secret" onblur="valid()" size="10"><br /> <img src="img.php"><br /><div id="myDiv" /> //запомнить ссылку на объект XMLHttpRequest var xmlHttp = createXmlHttpRequestObject(); //cоздать объект XMLHttpRequest function createXmlHttpRequestObject() { //для хранения ссылки на объект XMLHttpRequest var xmlHttp; try { xmlHttp = new XMLHttpRequest(); } catch(e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHttp"); } catch(e) { } } if(!xmlHttp) alert("Ошибка создания объекта XMLHttpRequest. "); else return xmlHttp; } function valid() { //продолжать, только если в xmlHttp не пустая ссылка if(xmlHttp) { //попытаться установить соединение с сервером try { name = encodeURIComponent(document.getElementById('secret').value); //инициировать доступ к серверу xmlHttp.open("GET","index.php?name=" + name, true ); //метод, обрабатывающий ответы сервера xmlHttp.onreadystatechange = handleRequestStateChange; //асинхронный запрос серверу xmlHttp.send(null); } catch(e) { alert("Нет соединения с сервером:\n" + e.toString()); } } } //эта ф-ция вызывается при изменении состояния запроса HTTP function handleRequestStateChange() { //когда readyState = 4, мы можем прочитать ответ сервера if(xmlHttp.readyState == 4) //продолжать,только если статутс HTTP равен "OK" if(xmlHttp.status == 200) { try { //обработать ответ,полученный от сервера handleServerResponse(); } catch(e) { //вывести сообщение об ошибке alert("Возникли проблемы во время получения данных:\n" + xmlHttp.statusText); } } } //обрабатывает ответ полученный от сервера function handleServerResponse() { //прочитать сообщение полученное от сервера var response = xmlHttp.responseText; //получить ссылку на элемент <div> myDiv = document.getElementById('myDiv'); //вывести сообщение myDiv.innerHTML = 'Текст введенный пользователем:' + response; } |
Часовой пояс GMT +3, время: 01:50. |