|
|
|
| имеется такой код
<script type="text/javascript" language="javascript">
var req = Create();
function ge(id)
{
return document.getElementById(id);
}
function Create(){
if(navigator.appName == "Microsoft Internet Explorer"){
req = new ActiveXObject("Microsoft.XMLHTTP");
}else{
req = new XMLHttpRequest();
}
return req;
}
function Request(query)
{
req.open('post', 'test1.php' , true );
req.onreadystatechange = Refresh;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
req.send(query);
}
function Refresh()
{
if( req.readyState == 4 )
ge('ajax').innerHTML = req.responseText;
else
ge('ajax').innerHTML = '<img src="prel.gif" />';
}
}
function Pusk()
{
var query;
query ='txt='+encodeURIComponent(ge('myid').value);
Request(query);
}
</script>
|
ну и на сервере
<?php
error_reporting(E_ALL & ~E_NOTICE);
session_start();
?>
<?php
$txt= isset($_POST['txt'])?$_POST['txt']:NULL;
if ($txt != $_SESSION['code'])
echo 'kod neveren';
?>
|
вроде все хорошо работает но не так как нужно
подскажите как вывезти окошечко об ошибке что код введен не верно?? | |
|
|
|
|
|
|
|
для: NoCash
(16.03.2010 в 13:08)
| | >как вывезти окошечко
Самовывозом )
Проверяйте, ошибка ли, и просто, это alert(), а круче, это рядом с каптчей. Я так полагаю это к ней имеет отношение?
Вопросы об окошечках в разделе HTML. ) | |
|
|
|
|
|
|
|
для: sim5
(16.03.2010 в 13:30)
| | да да я решил что действительно рядом с капчей это прикольно смотриться))) | |
|
|
|
|
|
|
|
для: NoCash
(16.03.2010 в 13:38)
| | Так а в чем проблема? Где поставите <div id="myid"></div>, там и выведет сообщение | |
|
|
|
|
|
|
|
для: NoCash
(16.03.2010 в 13:38)
| | Не знаю насколь прикольно, а вот, что разумно, это да.
И какая проблема вывести в любой элмент помещенный рядом с капчей сообщение?
Причем - echo 'kod neveren';, вот это зачем? Не лучше ли возвращить некий код ошибки, например 13, а сам ведь текст ошибки постоянен, зачем же его гнать клиенту? Да сообственно, если что-то вернулось, то это только ошибка и может быть, иначе все ОК. | |
|
|
|
|
|
|
|
для: sim5
(16.03.2010 в 14:02)
| | а не подскажете как вот это сделать Не лучше ли возвращить некий код ошибки, например 13, ну или хотябы натолкнуть в нужную сторону,
просто внимательно не посмотрел результат капчи. в моем случае если даже ответ будет дан правельный то все равно скажут что код не верен(( | |
|
|
|
|
|
|
|
для: NoCash
(27.03.2010 в 10:18)
| | Если речь идет только о каптче, то не стоит заморачиваться, возвращайте текст. Что касается кода ошибки, то в чем сложность, если a не равна b дать ответ не "no", а 0 например, а на клиенте написать соответствующее? | |
|
|
|
|
|
|
|
для: sim5
(27.03.2010 в 10:30)
| | сложность состоит в нескольких случаях.
1. ссессия опережает картинку на стр. т.е если на картинке написано 2+2. правиьный ответ будет не 4 а то число которое будет выведено на след картинке т.е на картинке написано 2+2 обновляем появляется картинка с примером 3+5 дак вот ответ 8 будет правильный в случае с предыдущем примером
2. проверка формы происходит на все поля и отдельно на капчу если все поля будут вписаны правльно кроме капчи то обьявления все равно подается даже несмотря на то что ответ в капче не верный | |
|
|
|
|
|
|
|
для: NoCash
(27.03.2010 в 10:56)
| | >ссессия опережает картинку на стр.
Как это понять? Отдаете каптчу пользователю, это открывается страница, запоминайте код. Какие тут могут быть опережения?
2. Выдавайте ошибки только для полей в которых они есть, кто же вас заставляет делать обратное. | |
|
|
|
|
|
|
|
для: sim5
(27.03.2010 в 11:24)
| | обьясняю открылась страничка с капчей на каритнике нарисован пример например 3+2 при вводе ответа 5 вывдетеся сообще что пример решен не верно. для того что бы узнать какой же ответ записан в сессии вывожу ее на экран и вижу что ответ не 5 а например 8 обновляю страничку и вижу пример 4+4. не сложно догадаться что в ссессию записывает значение следующей картинки.
вот в этом и возникла проблемма
что каксается 2 проблеммы то все поля проверяются javascript'ом а капча AJAX'ом. и если поля пустые то выводятся сообщения что они пустые в том числе и капча но вот как заствить что бы скрипт останавливался если пример с капчи решен не верно я реализвать не могу
если можно подскажите пожайлуста | |
|
|
|
|
|
|
|
для: NoCash
(27.03.2010 в 11:41)
| | Вы сами эти проблемы создаете, выдавя их за правило. Подуйме лучше, проблемы исчезнут.
Проверять все нужно на сервере, а проверку на клиенте рассматривать только как сервис. | |
|
|
|
|
|
|
|
для: sim5
(27.03.2010 в 12:04)
| | в обще я рассчитывал на помощь профессионала а не на тупое вали и думай | |
|
|
|
|
|
|
|
для: NoCash
(27.03.2010 в 12:44)
| | А кто же за вас думать должен? Я не знаю чего вы там накодили и почему у вас каша получается, поэтому конкретно ничего сказать не могу, но вот то, что логики в вашем коде нет, в этом я уверен. Не зная вашего кода могу лишь сказать следующее:
Страница с формой:
1. На этой странице вы просто продолжаете сессию, ничего в нее не записывая, что касается каптчи.
2. Отдаете форму пользователю, в котором атрибут src изображения каптчи, это запрос к скрипту генерирующему каптчу.
Скрипт генерации каптчи:
1. Формирует случайный код записывая его в СЕССИЮ и помещает на изображение.
2. Отдает изображение пользователю.
Обработка запросов пользователя:
1. Обработчик формы получает запрос от пользователя с введенным кодом.
2. Считывает код из сессии установленный скриптом генерации каптчи и сверяет с кодом введенным пользователем.
3. Выдает результат проверки.
Если пользователь просит обновить изображение каптчи, то запрос опять должен идти к скрипту генерации каптчи, обновлением кода на изображении и в СЕССИИ.
В этом случае может быть ОПЕРЕЖЕНИЕ/ОТСТАВАНИЕ? | |
|
|
|
|
|
|
|
для: sim5
(27.03.2010 в 12:58)
| | тут провеятется и выводиться капча
<?php
session_start();
$txt= isset($_POST['code'])?$_POST['code']:NULL;
echo $txt, $_SESSION['code'];
if(strtolower($txt) == $_SESSION['code'])
{
echo '<font color="green">dfg!</font>';
} else
{
echo '<font color="red">234!</font>';
}
?>
|
тут форма с картинкой
<?php
{
$text .="<tr><td class='forumheader3' style='text-align:center'><div id='ajax'></td>
<td class='forumheader3'><input type='text' name='code' id='myid'></div><br>Решите пример с картинки<br><img src='captcha.php' border='0' > </td></tr>";
}
?>
|
ну AJAX для результата проверки
<script>
var req = Create();
function ge(id)
{
return document.getElementById(id);
}
function Create(){
if(navigator.appName == "Microsoft Internet Explorer"){
req = new ActiveXObject("Microsoft.XMLHTTP");
}else{
req = new XMLHttpRequest();
}
return req;
}
function Request(query)
{
req.open('post', 'check_captcha.php' , true );
req.onreadystatechange = Refresh;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
req.send(query);
}
function Refresh()
{
if( req.readyState == 4 )
ge('ajax').innerHTML = req.responseText;
else
ge('ajax').innerHTML = '<img src="prel.gif" />';
}
function Pusk()
{
var query;
query ='code='+encodeURIComponent(ge('myid').value);
Request(query);
</script>
|
вот таким вот образом у меня все сделано впринципе сдлеано все по тем же самым пунктикам как вы сказали | |
|
|
|
|
|
|
|
для: NoCash
(27.03.2010 в 13:08)
| | Вы меня достали, ей богу. Дело не вашем AJAX, а во взаимодействии (синхронизации) всех составляющих, которое у вас напрочь отсутсвует. Как все должно взаимодействовать, я вам написал. Не должно быть никаких опережений! | |
|
|
|
|
|
|
|
для: sim5
(27.03.2010 в 13:14)
| | с сесиией разобрался) спс)) а вот со второй проблеммой может что нибудь предложите? | |
|
|
|
|
|
|
|
для: NoCash
(27.03.2010 в 13:45)
| | А что за проблема - ОК приема формы при неверном вводе кода каптчи? | |
|
|
|
|
|
|
|
для: sim5
(27.03.2010 в 14:01)
| |
мма в там что если капча введена не верно а все оставльные поля заполненны так как нужно то обьявление все равно добовляется
привожу код проверки для подсветки еще <php напишу на самом деле в коже его
[code
<?php
]var req = Create();
function ge(id)
{
return document.getElementById(id);
}
function Create(){
if(navigator.appName == "Microsoft Internet Explorer"){
req = new ActiveXObject("Microsoft.XMLHTTP");
}else{
req = new XMLHttpRequest();
}
return req;
}
// Проверка введенного имени и сообщения и "включение" кнопки submit
function checkreq() {
path=document.nb_form2;
tmp=(path.gnl_name.value=="");
if (!tmp && (path.gnl_name.value.length < 3)) tmp=true;
path.nb_submit2.disabled=tmp;
if (tmp) return;
tmp=(path.detail.value=="");
if (!tmp && (path.gnl_detail.value.length < 10)) tmp=true;
path.nb_submit2.disabled=tmp;
}
// Проверка корректности заполнения полей формы
function check() {
p_gnl_user=document.nb_form2.gnl_user.value.toString();
if (p_gnl_user=="") {
alert ("введите цену");
return false;
}
p_gnl_name=document.nb_form2.gnl_name.value.toString();
if (p_gnl_name!="") {
if (p_gnl_name.length<3 || p_gnl_name.length>20) {
alert ("Укажите заголовок (3-20 символов)!");
document.nb_form2.gnl_name.focus();
return false;
}
} else {
alert("Необходимо ввести заголовок!");
document.nb_form2.gnl_name.focus();
return false;
}
p_cat_name=document.nb_form2.elements[3].selectedIndex;
if (p_cat_name== 0) {
alert ("вибирите категорию и подкатегорию");
return false;
}
p_gnl_phone=document.nb_form2.gnl_phone.value;
p_gnl_email=document.nb_form2.gnl_email.value;
if ((p_gnl_phone =="")&&((p_gnl_email=="") || (p_gnl_email.indexOf ('@') == -1) || (p_gnl_email.indexOf ('.') == -1))) {
alert ("Введите коректный E-mail или номер телефона");
}
p_gnl_detail=document.nb_form2.gnl_detail.value.toString();
if (p_gnl_detail.length < 10) {
alert ("Необходимо ввести текст сообщения (не менее 10 символов)!");
document.nb_form2.gnl_detail.focus();
return false;
}
p_gnl_price=document.nb_form2.gnl_price.value.toString();
if (p_gnl_price=="") {
alert ("введите цену");
return false;
}
p_code=document.nb_form2.code.value.toString();
if (p_code=="") {
alert ("решите пример");
return false;
}
}
function Request(query)
{
req.open('post', 'check_captcha.php' , true );
req.onreadystatechange = Refresh;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
req.send(query);
}
function Refresh()
{
if( req.readyState == 4 )
ge('ajax').innerHTML = req.responseText;
else
ge('ajax').innerHTML = '<img src="prel.gif" />';
}
function Pusk()
{
var query;
query ='code='+encodeURIComponent(ge('myid').value);
Request(query);
}
?>
|
| |
|
|
|
|
|
|
|
для: NoCash
(27.03.2010 в 14:09)
| | Я это рассматривать даже не буду - все, что передает форма нужно проверять обязательно на сервере, и решение принимать или нет данные, принимать на сервере. JS-проверка, это только для удобства пользователя. Мне ничего не стоит снести ее к черту со страницы и что тогда? | |
|
|
|
|
|
|
|
для: sim5
(27.03.2010 в 14:16)
| | я понимаю что это не безопасно но я человек подневольный мне сказали сделать так я сделал. вот возникла проблема в совмешений капчи я застрял уже 3 день парюсь ничего не получается( | |
|
|
|
|
|
|
|
для: NoCash
(27.03.2010 в 14:20)
| | Объясните тому, кто вам сказал, что если решение об ОК будет принимать JavaScript, то ОК будет 100% ВСЕГДА.
Отправляете данные на сервер, проверили, все ОК и каптча ОК, записываем или еще что-то, а пока все не будет ОК - нет. Вот и вся проблема. А вышеприведенный код, это JS-сценарий, я хоть и знаю JS, но извините, не хочу в нем копаться, тем более проблема у вас не в методе проверки полей (они у вас могут быть и верные), а в принятии решения о записи данных на сервере. | |
|
|
|
|
|
|
|
для: sim5
(27.03.2010 в 14:30)
| | ну да лана спс за помощь и за терпение)) | |
|
|
|
|
|
|
|
для: NoCash
(27.03.2010 в 13:08)
| | frm.php
<?
session_start();
if($_POST['cod']) echo 'Get code: '.$_POST['cod'].'<br>Set code: '.$_SESSION['cod'];
?>
<form action="" method="post">
<input type="text" name="cod"><br>
<input type="submit" value="Send">
</form>
<img src="cod.php" />
|
cod.php
<?
session_start();
$n = rand(1,15);
$_SESSION['cod'] = $n;
$im = imagecreate(80,30);
$bak = imagecolorallocate ($im, 255, 255, 255);
$txt = imagecolorallocate ($im, 233, 14, 91);
imagestring ($im, 5, 5, 5, $n, $txt);
header('Content-Type: image/png');
imagepng($im, null, 9);
imagedestroy($im);
?>
|
Запустите файл frm.php - если будет "опережение", можете бросить в меня камнем.
ge('ajax').innerHTML = '<img src="prel.gif" />'; - это что такое? | |
|
|
|