Перейти к публикации

Кодировка соединения с БД или AJAX логин


Рекомендованные сообщения

Друзья, проблема непонятная встала предо мной.

Делаю логин на сайт с помощью 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);

	}

Изменено пользователем lifestar
Ссылка на сообщение
Поделиться на других сайтах

Проблема решилась добавлением строчки

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

}

Или это не равнозначная замена?

Ссылка на сообщение
Поделиться на других сайтах

Или это не равнозначная замена?

это не равнозначиная замена, если вы используете класс AJAX который в DLE, то он передает текст в unicode а не в UTF-8

Нет ответа от БД, то есть условия не истины.

Если же я сделаю так:

DLE использует двойной хеш md5(md5("пароль"))

Ссылка на сообщение
Поделиться на других сайтах

это не равнозначиная замена, если вы используете класс AJAX который в DLE, то он передает текст в unicode а не в UTF-8
Спасибо, тогда заменять не будем.

DLE использует двойной хеш md5(md5("пароль"))
Это у меня было учтено. Проблема была оказывается именно в имени пользователя, которое было в кодировке UTF-8 отчегото
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...