Просмотр полной версии : Записи в БД на русском языке
Как сделать записи в БД на русском, что нужно сделать, где какие кодировки, уже часа 2 хожу по сайтам, в слепую тыкаю, но ничего не выходит:
http://s019.radikal.ru/i633/1205/3d/1f9f0e34f517.jpg
http://s019.radikal.ru/i604/1205/fe/0bc0691902fe.png
http://s018.radikal.ru/i505/1205/6d/a5ebc0070086.png
Нашел решение, думаю многим понадобиться:
$con = mysql_connect('localhost', 'gmoryes_login', '*****'); // Подсоединяемся к БД
if(mysql_select_db('gmoryes_login', $con))
{
// в самом начале прописываем это:
mysql_query("SET CHARACTER SET cp1251")or die(mysql_error());
mysql_query("SET NAMES cp1251")or die(mysql_error());
mysql_query ("SET character_set_client='cp1251'");
mysql_query ("SET character_set_results='cp1251'");
mysql_query ("SET collation_connection='cp1251_general_ci'");
Нашел решение, думаю многим понадобиться:
на скриншоте выше вы используете сравнение utf8_general_ci, а в коде используете кодировку cp1251
Такое решение будет работать не совсем корректно.
Использовать стоит сравнение из семейства соответсвующих используемой кодировке
И учитывая, что вы используете кодировку cp1251, то вы не сможете использовать символы не из латиницы и кириллицы
В вашем случае более странным, чем использование кириллицы для пароля, может показать использование только кириллицы и латиницы в пароле
Gvozd,
насколько я понял, ты хочешь сказать, что я не смогу использовать латиницу?
http://s019.radikal.ru/i613/1205/2a/ec43c8d60e8f.png
Да и это пока тупость, согласен, я просто хочу сделать чат, вот и задумался, как буду сообщения сохранять, и не стал создавать что-то новое, сделал все на странице регистрации, естественно потом все номрмально сделаю
P.S. не ты писал выше? 102-106 записи
насколько я понял, ты хочешь сказать, что я не смогу использовать латиницу?
нет, я такого не говорил.
я сказал, что вы не сможете использовать ничего кроме кириллицы и латиницы
Например написать пароль на немецком или иврите
P.S. не ты писал выше? 102-106 записи
я даже не знаю где находится сайт для которого ты это делаешь
хотя сейчас начал догадываться что речь о твоем проекте в подписи
Gvozd,
пароль на иврите :blink:
=====
Cейчас поменял кодировку на ср1251, но немецкий все также не читается, или я опять тебя не так понял :write:
=====
хотя сейчас начал догадываться что речь о твоем проекте в подписи
да о нем, сейчас делаю возможность добавления аватарок)
пароль на иврите
чем пароль на иврите хуже пароля на русском?
Cейчас поменял кодировку на ср1251, но немецкий все также не читается, или я опять тебя не так понял
и не должен.
Если ты задаешь кодировку CP1251, то значит тебе доступны символы только из русского языка и латиницы.
немецкий язык, благодаря умляутам не может быть записан в этой кодировке
Gvozd,
просто в жизни бы не догадался использовать пароль на иврите...тогда уж на китайском или японском лучше...правда без инета его не наберешь, если конечно не носить с собой его, чтобы скопировать
======
1) Не легче на js создать ограничения?
2) Как в случае чего добавить поддержку всех языков? Мне для сообщений понадобиться
в жизни бы не догадался использовать пароль на иврите...
Но ведь на русском догадались)
Намекаю: пароль на любом национальном шрифте - глупость по определению. Но если уж и разрешать какой-нибудь из национальных шрифтов, то разрешать все языки.
1) Не легче на js создать ограничения?
у вас уже на уровне базы стоит ограничение
я говорю не о том, что вам нужно ввести проверку или поставить ограничение, а о том, что вы уже ввели весьма странное ограничение, выбрав кодировку cp1251 для пароля
Как в случае чего добавить поддержку всех языков? Мне для сообщений понадобиться
Выбрать кодировку UTF8, и одно из сравнений из семейства utf8_*, например utf8_general_ci
Если выберете однобайтовую кодировку, то поддерживать она будет только ограниченный список языков
Если выберете неправильное сравнение, то у вас будет неправильно работать выборка с сортировкой
PS кодировка и сравнение -разные вещи. в гугле об этом можно прочитать, если что
Но ведь на русском догадались)
Да и это пока тупость, согласен, я просто хочу сделать чат, вот и задумался, как буду сообщения сохранять, и не стал создавать что-то новое, сделал все на странице регистрации, естественно потом все номрмально сделаю
Выбрать кодировку UTF8
:D :D !pokerface! Я полдня просидел с utf-8, и это не смешно, и на ней не работал русский язык..были кракозябы
Сообщение от гозар
Это форум так глючит, или вы специально мои цитаты переписываете на чужое имя?)
!pokerface! Я полдня просидел с utf-8, и это не смешно, и на ней не работал русский язык..были кракозябы
значит что-то вы делали неправильно
например, возможно исходные данные, помещаемые в БД были в неверной кодировке
Учитывая, что вы додумались страницу регистрации создать в CP1251, то данные присланные из браузера не могли бы быть обработанными в иной кодировке, если вы их конечно не перевели в нормальную кодировку. А вы наверняка не перевели, иначе проблема бы не было.
Итак, что нужно сделать:
везде использовать UTF-8
страница с формой регистрации должна быть в UTF-8, а не CP1251, как щаз
для этой страницы должны быть указаны HTTP-заголовки, указывающие кодировку, и соответствующий META_тег. кодировка - UTF-8
скрипт принимающий данные, также в UTF-8
И база также, в UTF-8
Gvozd,
Это форум так глючит, или вы специально мои цитаты переписываете на чужое имя?)
сори, это я ваши логины вечно путаю)
=======
ок, спасибо, попробую
сори, это я ваши логины вечно путаю)
а зачем вы логины переписываете?
форум их прекрасно подставляет в сообщение, когда вы его выделяете(в хроме так точно)
даже если вам движок форума не подставил логин, то зачем его дописывать?
Gvozd,
просто цитату сделал посредством bb кодов, имена сам решил дописать, если тебя как-то обидело извини :/
если тебя как-то обидело извини
да не, ниче страшного
Выбрать кодировку UTF8, и одно из сравнений из семейства utf8_*, например utf8_general_ci
Чтобы не создавать новую тему, спрошу здесь.
Скажите, вот phpmyadmin предлагает более 10 видов кодировок utf-8. Только 3 из них кажутся нейтральными: utf8_general, utf8_unicode и utf8_bin. Какую одну из них следует использовать?
jsuse,
Это о предлагает не кодировки, а сравнения
сравнение будет влиять на то, в каком порядке выводить записи, если вы отсортируете их по текстовому полю.
а кодировка во всех случаях - одна и та же - Utf8
Если нету какой-то специфики, то берите utf8_general_ci
B@rmaley.e><e
17.05.2012, 22:36
Пароль вообще хранить в БД не нужно.
Пароль вообще хранить в БД не нужно.
И где же его хранить? В защищённых файлах?
jsuse,
Если нету какой-то специфики, то берите utf8_general_ci
Спасибо, так и сделал. Но что-то русский все равно не выводит. Уже слава богу не кракозябры, а только ?????? вопросительные знаки, но все равно не выводит.
У меня была windows-1251 везде. И на доктайпе html-страницы, и база данных (сама БД была windows-1251), каждая таблица БД w-1251 и каждая ячейка таблицы, где имелся текст, тоже w-1251. И текст на русском выводился из БД нормально.
Теперь перевел все на utf-8, и доктайп html-страниц, и базу данных, и таблицы в БД, и ячейки в таблицах (и charecter set и collation, все сделал utf-8_general_ci). Попересохранял все файлы через Блокнот, там есть опция "сохранить в utf-8". А все равно русский текст из БД не вытаскивает, превращает в ?????. Что еще может быть, не подскажите, что мог пропустить?
Но правда не все еще таблицы и ячейки поменял. Сменил только кодировку всей БД и одной из таблиц, из которой беру русскую инфу на вывод. Другие остались пока win-1251. Но они не связаны с измененной таблицей. Не думаю, что это может влиять.
Спасибо.
B@rmaley.e><e
17.05.2012, 23:02
И где же его хранить? В защищённых файлах?Не нужно его хранить вообще. Хранить нужно солёный хеш.
jsuse,
полагаю, вы изменили только сравнение, не изменив кодировку
http://www.lissyara.su/articles/freebsd/www/mysql_charsets/
Читать полностью, а особенно часть про "Что делать, если данные внесены в неправильной кодировке"
Раед,
нет, его нужно схранить также, но в БД отправлять md5, при логине, хешируешь, то что ввел юзер, и сравниваешь, если хеши совпадают, то пароль правильный
http://s58.radikal.ru/i160/1205/d4/55ed99919b19.png
jsuse,
http://www.lissyara.su/articles/freebsd/www/mysql_charsets/
Читать полностью, а особенно часть про "Что делать, если данные внесены в неправильной кодировке"
Gvozd, Хочу поблагодарить за ссылку. Ценнейшая статья. Я из одной этой статьи понял больше о кодировке, чем из всех книг и форумов, которые читал до этого. Разобрался, настроил, работает. Спасибо)
Интересно, что, если вызывать просмотр переменных кодировки в PhpMyAdmin и в командной строке, то результат разный. PhpMyAdmin показывает не верный, а командная строка верный. Это на всякий случай, если кому понадобится. Не доверять PhpMyAdmin, проверять в командной строке.
Вот, что показывает phpMyAdmin. По нему получается, что все правильно:
http://www.ljplus.ru/img4/a/_/a_ya_vishe/phpma.jpg
А на самом деле так:
http://www.ljplus.ru/img4/a/_/a_ya_vishe/cmd.jpg
Интересно, что, если вызывать просмотр переменных кодировки в PhpMyAdmin и в командной строке, то результат разный. PhpMyAdmin показывает не верный, а командная строка верный. Это на всякий случай, если кому понадобится. Не доверять PhpMyAdmin, проверять в командной строке.
Если не ошибаюсь эти настройки зависят пользователя
PMA у вас возможно запущен из-под root-а, а в командной строке вы работаете из обычного пользователя.
Попробуйте из командной строки зайти root-ом, либо в PMA в конфигах вбить логин-пароль другого пользователя, и картина изменится, надо полагать
Не нужно его хранить вообще. Хранить нужно солёный хеш.
А собственно говоря почему?
Как предлагаете восстанавливать пароль? Отправлять на мыло сгенерированный, а потом чтобы юзер вбивал что хотел опять, тот же самый пароль?
Если кто-то кроме вас может получить доступ к вашей БД, то абсолютно без разницы хранить пароль или хэш.
Gozar,
Почему это без разницы? Единственно что он сделает, так это вставит хеш пароль в куки, но на это легко защиту сделать, достаточно их каждый раз перезаписывать. Про забыл пароль, некоторые сайты делают так:
1) создают ссылку для создания нового пароля
2) добавляют новый пароль введенный юзером
А если хранить чистый пароль в БД, то при чужом попадании в нее, можно зайти в аккаунт другого юзера
B@rmaley.e><e
20.05.2012, 23:15
Отправлять на мыло сгенерированныйДа.Если кто-то кроме вас может получить доступ к вашей БД, то абсолютно без разницы хранить пароль или хэш.Нет, разница огромна. При правильном использовании хешей, конечно.
Почему это без разницы?
Патамушта!
При правильном использовании хешей, конечно.
Это разговор ни о чём. Разницы нет.
Я даже могу выделить это красным:
Если кто-то кроме вас имеет доступ к таблице с паролями или хэшами, то вы уже удод (http://ru.wikipedia.org/wiki/%D0%A3%D0%B4%D0%BE%D0%B4) и поздно пить боржоми.
B@rmaley.e><e
21.05.2012, 00:34
Что-то не вижу красного.
И разница есть. Хотя бы в том, что юзеры любят использовать один пароль на многих сайтах.
Что-то не вижу красного.
Тот кто не видит обычного и красного не увидит.
И разница есть. Хотя бы в том, что юзеры любят использовать один пароль на многих сайтах.
И какое это имеет отношение как хранить пароли в БД и к тому что посторонним не место в БД? Юзверы пусть делают что хотят, это их дело. Из сферической сферы обсуждение так и не вышло. Разницы нет.
Если кто-то кроме вас имеет доступ к таблице с паролями или хэшами, то вы уже удод и поздно пить боржоми.
пользователи использующие сложные пароли все еще будут защищены, даже при хищении базы с солеными хешами
B@rmaley.e><e
21.05.2012, 07:27
И какое это имеет отношение как хранить пароли в БД и к тому что посторонним не место в БД?Я где-то говорил про посторонних в БД?
Не вижу смысла в дальнейшем обсуждении, Вы всё равно не привели ни одного стоящего аргумента.
Дело в том что навредить могут необязательно посторонние. Не читали историй про злобных и обиженных уволенных админов?)
не привели ни одного стоящего аргумента.
Вы вообще не привели ни одного аргумента.
Не читали историй про злобных и обиженных уволенных админов?)
Нет, не читал.
B@rmaley.e><e
21.05.2012, 16:12
Вы вообще не привели ни одного аргумента.То, что Вы игнорируете мои посты, не означает, что я не привёл аргументы.юзеры любят использовать один пароль на многих сайтах
Да хранить можно как угодно... главное перед регистрацией предупреждать надо пользователя о том что пароль будет виден администратору сайта и т.п. А там уж пользователь сам решит стоит свой вездешний вбивать или что-то новое придумать.. Вот этим меня вконтакт раздражает, тем что пароли хранит как есть, но не предупреждает об этом юзверей. Я лишь узнал об этом когда восстанавливал свой пароль, а они мне его обратно прислали как есть на мыло. То есть не новый сгенереный, а старый.
Gozar,
аргументы:
1) Если зайдет кто-нибудь посторнний в БД, то сможет взять пароль юзера
2) Юзерам неприятно то чувство, что к их аккаунту есть доступ от администратора, хотя понимают, что читать он перписку чью-нибудь не будет
3) Зачем хранить в открытом виде вообще, если можно хранить в более защищенном?
B@rmaley.e><e,
Это не аргумент, поэтому я и проигнорировал. Меня так же не интересует на какой стороне спит пользователь. Это его сугубо личное дело. У многих пароль написан на стикере приклееном в монитору.
Юзерам неприятно то чувство, что к их аккаунту есть доступ от администратора, хотя понимают
Ничего они не понимают и нужно всегда осознавать, что админ имеет доступ к твоей переписке. Там где начинаются деньги заканчиваются сопли про защищённость. Поэтому вконтакте плевать на то, как хранить пароли.
1) Если зайдет кто-нибудь посторнний в БД, то сможет взять пароль юзера
Эка невидаль, паролько не главное. Можно спокойно делать что угодно на сайте и без пароля юзверя, а имея доступ к БД вообще наплевать на пароли.
Развели тут демагогию про защищённость и секретность. Давайте без показушности. Хранение паролей имеет ряд преимуществ и недостатков.
Недостаток:
1. Можно получить доступ к многим аккаунтам одновременно, если нет дополнительной защиты. Это пожалуй самый серьезный недостаток.
Преимущество:
1. Не нужно морочить пользователю голову и заставлять его трахать себе мозг ссылками с новыми паролями. Это одно из самых серьезных преимуществ. Единицы не любят получать пароли и тысячи любят получать их, а не тратить время на процедуры "криворуких программистов", которые придумывают всемозможные "издевательства" для бедных пользователей.
Любое действо имеет ряд перимуществ и недостатков.
B@rmaley.e><e
21.05.2012, 20:49
доступ к БДДоступ к БД бывает разный. С помощью SQL-inj можно утянуть интересные данные, но очень редко удаётся изменить их.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot