Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [PHP] Есть ли ошибка в коде? Код работает в IE&Opera, но не в Firefox 
V
    Опции темы
Eugene82
  Дата 23.10.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 30.5.2005
Где: г. Ростов-на-Дону

Репутация: нет
Всего: нет



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

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

Есть на нашем сайте страница запроса забытого пароля по имеющемуся мылу. Вся проблема всего лишь в следующем: на странице есть 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");
}

?>


БЛИН! Волшебство какое-то!!! Неделю бился с глюком, от отчания уже и на форум Firefox написал - а ОНО ЗАРАБОТАЛО!!! Вот как мне узнать что это было и быть уверенным что не повториться? Ведь было не у меня одного - пользователи жаловались...

Это сообщение отредактировал(а) Eugene82 - 24.10.2008, 10:47
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.