Здравствуйте, уважаемые знатоки!

Хотелось бы найти у вас помощь так как всю голову сломали в поисках ошибки.

Есть на нашем сайте страница запроса забытого пароля по имеющемуся мылу http://sunr.ru/index.php?act=forgot_pass. Вся проблема всего лишь в следующем: на странице есть human test - "введите 4 цифры с картинки" - так вот, в IE, Opera этот код работает, а в Firefox нет - значение созданой для данной проверки переменной после показа картинки меняется на другое и после нажатия кнопки "Ок" выводится сообщения "Необходимо ввести код подтверждения."

Заменяли сессии на куки. Заметили что в кук пишется левое число - не соответствующее картинке. Ещё было замечено что вроде как сначала пишется правильное значение, а потом перезаписывается новым.

Ну и возможно почему-то просто не отрабатывает код присваивания значения
$_SESSION['dfp']=$itogo; (аналогично c setcookie ('dfp',$itogo); )

А в ИЕ и Опере работает и с сессиями и с кукисами!!!

Помогите, пожалуйста, разобраться - это глюк Firefox'a или PHP или ошибка в коде? Хотя эксперты утверждают, что код правильный. :whiteflag:

Не охота пользователей Файрфокс обламывать! И пересаживать на ИЕ и Оперу... :mad:

Выделить код

Код:

<?
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
очень странная у вас какая-то система проверки - проверочный код можно получить из исходного кода страницы. я бы на вашем месте переписал это совершенно иначе.
кстати, у меня форма работает правильно - при вводе неправильного кода ругается, если ввести правильно - ругается только на неправильный email

Al_H
бред какой