как сравнить сессию и то, что введено в поле
Всем доброго время суток!
У меня капча и поле , куда ввожу символы на картинке. Создала для нее валидацию на 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, время: 02:22. |