Страницы: 1
Здравствуйте, уважаемые знатоки!
Хотелось бы найти у вас помощь так как всю голову сломали в поисках ошибки.
Есть на нашем сайте страница запроса забытого пароля по имеющемуся мылу http://sunr.ru/index.php?act=forgot_pass. Вся проблема всего лишь в следующем: на странице есть human test - "введите 4 цифры с картинки" - так вот, в IE, Opera этот код работает, а в Firefox нет - значение созданой для данной проверки переменной после показа картинки меняется на другое и после нажатия кнопки "Ок" выводится сообщения "Необходимо ввести код подтверждения."
Заменяли сессии на куки. Заметили что в кук пишется левое число - не соответствующее картинке. Ещё было замечено что вроде как сначала пишется правильное значение, а потом перезаписывается новым.
Ну и возможно почему-то просто не отрабатывает код присваивания значения
$_SESSION['dfp']=$itogo; (аналогично c setcookie ('dfp',$itogo); )
А в ИЕ и Опере работает и с сессиями и с кукисами!!!
Помогите, пожалуйста, разобраться - это глюк Firefox'a или PHP или ошибка в коде? Хотя эксперты утверждают, что код правильный.
Не охота пользователей Файрфокс обламывать! И пересаживать на ИЕ и Оперу...
<? if (!isset($startpage)){return;} $HTML_CATALOG="html/"; $CONTENT_NAME="Восстановление пароля"; $CONTENT=FORGOT_PASS_FORM(); require "{$HTML_CATALOG}static.htm"; //****************************************************************************** function FORGOT_PASS_FORM($error=""){ global $DB; $table="logins"; $pattern="/((.)+(@)(.)+(\.).+)/"; $mail=TEXT_2_BD($_POST['mail']); $_SESSION['mail_forgot_pass']=$mail; if ($error==""){ // обработка уже введенного адреса if(!empty($mail)){ if(strcmp($_POST['confirmation'],$_SESSION['dfp'])<>0){ return FORGOT_PASS_FORM("Необходимо ввести код подтверждения.<br>Если Вы вводили код, но видите это сообщение - возможно Вы ввели его неверно или Вы используете Mozilla Firefox. Попробуйте использовать Microsoft Internet Explorer или Opera."); //Расширеное сообщение вставлено после обнаружения ошибки } if (!preg_match($pattern,$mail)){ return FORGOT_PASS_FORM("Проверьте правильность написания e-mail."); } $sql="select * from {$table} where `mail`='{$mail}'"; $DB->query($sql,0); $row = $DB->fetch_row(); if (empty($row['id'])) { return FORGOT_PASS_FORM("Е-mail не найден."); } unset($_SESSION['dfp']); return FORGOT_PASS_MAIL($row['mail'],$row['pass']); } } $itogo=""; for($i=0;$i<4;$i++){ $d=rand(0,9); $itogo.=$d; $contron_pic.="<img src=\"i/digit/{$d}.gif\">"; } $_SESSION['dfp']=$itogo; $errortext=""; if (!$error==''){ $errortext=" <table border=\"0\" cellspacing=\"10\"> <tr><td><img src=\"i/stopnew.gif\"></td><td><b>{$error}</b></td></tr> </table>"; } $text=" {$errortext} <form name=\"registration_f\" method=\"POST\" action=\"../index.php?act=forgot_pass\"> <table border=\"0\"> <tr> <td> E-MAIL указанный при регистрации: </td> <td> <input name=\"mail\" type=\"text\" value=\"{$_SESSION['mail_forgot_pass']}\"> </td> </tr> <tr> <td> Код подтверждения: <div>{$contron_pic}</div> </td> <td> <input name=\"confirmation\" type=\"text\" value=\"\"> </td> </tr> <tr> <td> </td> <td> <input type=\"image\" src=\"i/ok.gif\" class=\"pic1\" onMouseOver=\"this.style.border='1px solid #787878';\" onMouseOut=\"this.style.border='1px solid #FFFFFF';\" > </td> </tr> </table> </form> "; return DEFAULT_CONTENT(compress($text)); } //***************************************************************************** function FORGOT_PASS_MAIL($mail,$pass){ global $MAIL; $from=""; $subj="Интернет-магазин - восстановление пароля"; $to="{$mail}"; $text= "<b style='color:red;'>Интернет-магазин - восстановление пароля</b><br> <hr> Ваш логин: <b>{$mail}</b><br> Ваш пароль: <b>{$pass}<br> <hr>"; $MAIL->SEND_MAIL( $from, $to, $subj, $text); return DEFAULT_CONTENT("Пароль отправлен на <b>{$mail}</b>","info"); } ?>
P.S. На странице основной регистрации подобный код тоже не работает в Firefox (даже 3.0.3 и без дополнений).
===========================
БЛИН! Волшебство какое-то!!! Неделю бился с глюком, от отчания уже и программистам на форум написал и вот сюда - а ОНО ЗАРАБОТАЛО!!! Вот как мне узнать что это было и быть уверенным что не повториться? Ведь было не у меня одного - пользователи жаловались...
Отредактировано Eugene82 (24-10-2008 11:36:03)
Делай добро и бросай его в воду!
Отсутствует
Фокс части сборок картинки грузит по нескольку раз. Поэтому если каждый раз картинка высылается вместе с кодом, завязанным на страницу, она никогда не будет соответствовать - картинка будет перегенерирована.
Отсутствует
Eugene82
очень странная у вас какая-то система проверки - проверочный код можно получить из исходного кода страницы. я бы на вашем месте переписал это совершенно иначе.
кстати, у меня форма работает правильно - при вводе неправильного кода ругается, если ввести правильно - ругается только на неправильный email
Al_H
бред какой
Отсутствует
Страницы: 1