lifestar 18 Опубликовано: 3 сентября 2007 Рассказать Опубликовано: 3 сентября 2007 (изменено) Друзья, проблема непонятная встала предо мной. Делаю логин на сайт с помощью AJAX. Как отправлять переменные в скрипт понятно, рассмотрим сам скрипт, который отчастиявляется копией sitelogin.php Проблема в строчке $member_id = $db->super_query("SELECT * FROM user_list where name='".$name."' and password='".md5($pass)."'"); Нет ответа от БД, то есть условия не истины. Если же я сделаю так: $member_id = $db->super_query("SELECT * FROM user_list where name='Вася' and password='abc98f6bc9f6d8c4a6d97616d7f1e5сс'"); Тогда всё в порядке - условие выполняется и я получаю user_id. Конечно дело в том, что не выполняются условия WHERE. Для проверки переменных имени и пароля ,я перед этой строчкой писал echo $name и md5($pass). Визуально всё в порядке с точностью до символа. В чём дело подскажите товарищи? Грешил на кодировку и тут обнаружил интересную вещь.. Если записать так: $member_id = $db->super_query("SELECT * FROM user_list where name='".$name."' and password='".md5($pass)."'"); echo $db->character_set_name(); die(); То скрипт напечатает мне latin1 что удивительно, ведь скрипт работает с БД с кодировкой cp1251 Господа программисты, подскажите в чём затык? P.S. для того, чтобы работала функция character_set_name() в класс работы с БД было прописано: function character_set_name() { return mysqli_character_set_name($this->db_id); } Изменено 3 сентября 2007 пользователем lifestar Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 4 сентября 2007 Рассказать Опубликовано: 4 сентября 2007 Автор Проблема решилась добавлением строчки$t = iconv("UTF-8", "cp1251", $t); в функцию convert_unicode () в связи с чем у меня вопрос. Можно ли функциюfunction convert_unicode($t, $to = 'windows-1251') { $to = strtolower($to); if ($to == 'utf-8') { $t = preg_replace( '#%u([0-9A-F]{1,4})#ie', "decode_to_utf8(hexdec('\\1'))", utf8_encode($t) ); $t = urldecode ($t); } else { $t = preg_replace( '#%u([0-9A-F]{1,4})#ie', "'&#' . hexdec('\\1') . ';'", $t ); $t = urldecode ($t); $t = @html_entity_decode($t, ENT_NOQUOTES, $to); $t = iconv("UTF-8", "cp1251", $t); } return $t; } Заменить наfunction convert_charset($t, $from, $to = 'windows-1251') { $t = iconv($from, $to, $t); return $t; } Или это не равнозначная замена? Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 4 сентября 2007 Рассказать Опубликовано: 4 сентября 2007 Или это не равнозначная замена? это не равнозначиная замена, если вы используете класс AJAX который в DLE, то он передает текст в unicode а не в UTF-8Нет ответа от БД, то есть условия не истины. Если же я сделаю так: DLE использует двойной хеш md5(md5("пароль")) Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 4 сентября 2007 Рассказать Опубликовано: 4 сентября 2007 Автор это не равнозначиная замена, если вы используете класс AJAX который в DLE, то он передает текст в unicode а не в UTF-8Спасибо, тогда заменять не будем. DLE использует двойной хеш md5(md5("пароль"))Это у меня было учтено. Проблема была оказывается именно в имени пользователя, которое было в кодировке UTF-8 отчегото Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.