Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: AJAX
 
 автор: NoCash   (16.03.2010 в 13:08)   письмо автору
 
 

имеется такой код

<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';

?> 

вроде все хорошо работает но не так как нужно
подскажите как вывезти окошечко об ошибке что код введен не верно??

  Ответить  
 
 автор: sim5   (16.03.2010 в 13:30)   письмо автору
 
   для: NoCash   (16.03.2010 в 13:08)
 

>как вывезти окошечко

Самовывозом )
Проверяйте, ошибка ли, и просто, это alert(), а круче, это рядом с каптчей. Я так полагаю это к ней имеет отношение?
Вопросы об окошечках в разделе HTML. )

  Ответить  
 
 автор: NoCash   (16.03.2010 в 13:38)   письмо автору
 
   для: sim5   (16.03.2010 в 13:30)
 

да да я решил что действительно рядом с капчей это прикольно смотриться)))

  Ответить  
 
 автор: Рома   (16.03.2010 в 13:49)   письмо автору
 
   для: NoCash   (16.03.2010 в 13:38)
 

Так а в чем проблема? Где поставите <div id="myid"></div>, там и выведет сообщение

  Ответить  
 
 автор: sim5   (16.03.2010 в 14:02)   письмо автору
 
   для: NoCash   (16.03.2010 в 13:38)
 

Не знаю насколь прикольно, а вот, что разумно, это да.
И какая проблема вывести в любой элмент помещенный рядом с капчей сообщение?
Причем - echo 'kod neveren';, вот это зачем? Не лучше ли возвращить некий код ошибки, например 13, а сам ведь текст ошибки постоянен, зачем же его гнать клиенту? Да сообственно, если что-то вернулось, то это только ошибка и может быть, иначе все ОК.

  Ответить  
 
 автор: NoCash   (27.03.2010 в 10:18)   письмо автору
 
   для: sim5   (16.03.2010 в 14:02)
 

а не подскажете как вот это сделать Не лучше ли возвращить некий код ошибки, например 13, ну или хотябы натолкнуть в нужную сторону,
просто внимательно не посмотрел результат капчи. в моем случае если даже ответ будет дан правельный то все равно скажут что код не верен((

  Ответить  
 
 автор: sim5   (27.03.2010 в 10:30)   письмо автору
 
   для: NoCash   (27.03.2010 в 10:18)
 

Если речь идет только о каптче, то не стоит заморачиваться, возвращайте текст. Что касается кода ошибки, то в чем сложность, если a не равна b дать ответ не "no", а 0 например, а на клиенте написать соответствующее?

  Ответить  
 
 автор: NoCash   (27.03.2010 в 10:56)   письмо автору
 
   для: sim5   (27.03.2010 в 10:30)
 

сложность состоит в нескольких случаях.
1. ссессия опережает картинку на стр. т.е если на картинке написано 2+2. правиьный ответ будет не 4 а то число которое будет выведено на след картинке т.е на картинке написано 2+2 обновляем появляется картинка с примером 3+5 дак вот ответ 8 будет правильный в случае с предыдущем примером
2. проверка формы происходит на все поля и отдельно на капчу если все поля будут вписаны правльно кроме капчи то обьявления все равно подается даже несмотря на то что ответ в капче не верный

  Ответить  
 
 автор: sim5   (27.03.2010 в 11:24)   письмо автору
 
   для: NoCash   (27.03.2010 в 10:56)
 

>ссессия опережает картинку на стр.

Как это понять? Отдаете каптчу пользователю, это открывается страница, запоминайте код. Какие тут могут быть опережения?

2. Выдавайте ошибки только для полей в которых они есть, кто же вас заставляет делать обратное.

  Ответить  
 
 автор: NoCash   (27.03.2010 в 11:41)   письмо автору
 
   для: sim5   (27.03.2010 в 11:24)
 

обьясняю открылась страничка с капчей на каритнике нарисован пример например 3+2 при вводе ответа 5 вывдетеся сообще что пример решен не верно. для того что бы узнать какой же ответ записан в сессии вывожу ее на экран и вижу что ответ не 5 а например 8 обновляю страничку и вижу пример 4+4. не сложно догадаться что в ссессию записывает значение следующей картинки.
вот в этом и возникла проблемма
что каксается 2 проблеммы то все поля проверяются javascript'ом а капча AJAX'ом. и если поля пустые то выводятся сообщения что они пустые в том числе и капча но вот как заствить что бы скрипт останавливался если пример с капчи решен не верно я реализвать не могу
если можно подскажите пожайлуста

  Ответить  
 
 автор: sim5   (27.03.2010 в 12:04)   письмо автору
 
   для: NoCash   (27.03.2010 в 11:41)
 

Вы сами эти проблемы создаете, выдавя их за правило. Подуйме лучше, проблемы исчезнут.

Проверять все нужно на сервере, а проверку на клиенте рассматривать только как сервис.

  Ответить  
 
 автор: NoCash   (27.03.2010 в 12:44)   письмо автору
 
   для: sim5   (27.03.2010 в 12:04)
 

в обще я рассчитывал на помощь профессионала а не на тупое вали и думай

  Ответить  
 
 автор: sim5   (27.03.2010 в 12:58)   письмо автору
 
   для: NoCash   (27.03.2010 в 12:44)
 

А кто же за вас думать должен? Я не знаю чего вы там накодили и почему у вас каша получается, поэтому конкретно ничего сказать не могу, но вот то, что логики в вашем коде нет, в этом я уверен. Не зная вашего кода могу лишь сказать следующее:

Страница с формой:
1. На этой странице вы просто продолжаете сессию, ничего в нее не записывая, что касается каптчи.
2. Отдаете форму пользователю, в котором атрибут src изображения каптчи, это запрос к скрипту генерирующему каптчу.

Скрипт генерации каптчи:
1. Формирует случайный код записывая его в СЕССИЮ и помещает на изображение.
2. Отдает изображение пользователю.

Обработка запросов пользователя:
1. Обработчик формы получает запрос от пользователя с введенным кодом.
2. Считывает код из сессии установленный скриптом генерации каптчи и сверяет с кодом введенным пользователем.
3. Выдает результат проверки.

Если пользователь просит обновить изображение каптчи, то запрос опять должен идти к скрипту генерации каптчи, обновлением кода на изображении и в СЕССИИ.

В этом случае может быть ОПЕРЕЖЕНИЕ/ОТСТАВАНИЕ?

  Ответить  
 
 автор: NoCash   (27.03.2010 в 13:08)   письмо автору
 
   для: 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>


вот таким вот образом у меня все сделано впринципе сдлеано все по тем же самым пунктикам как вы сказали

  Ответить  
 
 автор: sim5   (27.03.2010 в 13:14)   письмо автору
 
   для: NoCash   (27.03.2010 в 13:08)
 

Вы меня достали, ей богу. Дело не вашем AJAX, а во взаимодействии (синхронизации) всех составляющих, которое у вас напрочь отсутсвует. Как все должно взаимодействовать, я вам написал. Не должно быть никаких опережений!

  Ответить  
 
 автор: NoCash   (27.03.2010 в 13:45)   письмо автору
 
   для: sim5   (27.03.2010 в 13:14)
 

с сесиией разобрался) спс)) а вот со второй проблеммой может что нибудь предложите?

  Ответить  
 
 автор: sim5   (27.03.2010 в 14:01)   письмо автору
 
   для: NoCash   (27.03.2010 в 13:45)
 

А что за проблема - ОК приема формы при неверном вводе кода каптчи?

  Ответить  
 
 автор: NoCash   (27.03.2010 в 14:09)   письмо автору
 
   для: 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<|| 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 == )
    
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);
}
?>

  Ответить  
 
 автор: sim5   (27.03.2010 в 14:16)   письмо автору
 
   для: NoCash   (27.03.2010 в 14:09)
 

Я это рассматривать даже не буду - все, что передает форма нужно проверять обязательно на сервере, и решение принимать или нет данные, принимать на сервере. JS-проверка, это только для удобства пользователя. Мне ничего не стоит снести ее к черту со страницы и что тогда?

  Ответить  
 
 автор: NoCash   (27.03.2010 в 14:20)   письмо автору
 
   для: sim5   (27.03.2010 в 14:16)
 

я понимаю что это не безопасно но я человек подневольный мне сказали сделать так я сделал. вот возникла проблема в совмешений капчи я застрял уже 3 день парюсь ничего не получается(

  Ответить  
 
 автор: sim5   (27.03.2010 в 14:30)   письмо автору
 
   для: NoCash   (27.03.2010 в 14:20)
 

Объясните тому, кто вам сказал, что если решение об ОК будет принимать JavaScript, то ОК будет 100% ВСЕГДА.
Отправляете данные на сервер, проверили, все ОК и каптча ОК, записываем или еще что-то, а пока все не будет ОК - нет. Вот и вся проблема. А вышеприведенный код, это JS-сценарий, я хоть и знаю JS, но извините, не хочу в нем копаться, тем более проблема у вас не в методе проверки полей (они у вас могут быть и верные), а в принятии решения о записи данных на сервере.

  Ответить  
 
 автор: NoCash   (27.03.2010 в 14:33)   письмо автору
 
   для: sim5   (27.03.2010 в 14:30)
 

ну да лана спс за помощь и за терпение))

  Ответить  
 
 автор: sim5   (27.03.2010 в 13:44)   письмо автору
 
   для: 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 ($im255255255);
$txt imagecolorallocate ($im2331491);
imagestring ($im555,  $n$txt);
header('Content-Type: image/png');
imagepng($imnull9);
imagedestroy($im);
?>

Запустите файл frm.php - если будет "опережение", можете бросить в меня камнем.

ge('ajax').innerHTML = '<img src="prel.gif" />'; - это что такое?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования