Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Записи в БД на русском языке (https://javascript.ru/forum/server/27957-zapisi-v-bd-na-russkom-yazyke.html)

9xakep 01.05.2012 14:51

Записи в БД на русском языке
 
Как сделать записи в БД на русском, что нужно сделать, где какие кодировки, уже часа 2 хожу по сайтам, в слепую тыкаю, но ничего не выходит:



9xakep 01.05.2012 15:20

Нашел решение, думаю многим понадобиться:
$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'");

Gvozd 01.05.2012 15:53

Цитата:

Сообщение от 9xakep
Нашел решение, думаю многим понадобиться:

на скриншоте выше вы используете сравнение utf8_general_ci, а в коде используете кодировку cp1251
Такое решение будет работать не совсем корректно.
Использовать стоит сравнение из семейства соответсвующих используемой кодировке

И учитывая, что вы используете кодировку cp1251, то вы не сможете использовать символы не из латиницы и кириллицы
В вашем случае более странным, чем использование кириллицы для пароля, может показать использование только кириллицы и латиницы в пароле

9xakep 01.05.2012 17:17

Gvozd,
насколько я понял, ты хочешь сказать, что я не смогу использовать латиницу?

Да и это пока тупость, согласен, я просто хочу сделать чат, вот и задумался, как буду сообщения сохранять, и не стал создавать что-то новое, сделал все на странице регистрации, естественно потом все номрмально сделаю
P.S. не ты писал выше? 102-106 записи

Gvozd 01.05.2012 17:57

Цитата:

Сообщение от 9xakep
насколько я понял, ты хочешь сказать, что я не смогу использовать латиницу?

нет, я такого не говорил.
я сказал, что вы не сможете использовать ничего кроме кириллицы и латиницы
Например написать пароль на немецком или иврите
Цитата:

Сообщение от 9xakep
P.S. не ты писал выше? 102-106 записи

я даже не знаю где находится сайт для которого ты это делаешь
хотя сейчас начал догадываться что речь о твоем проекте в подписи

9xakep 01.05.2012 18:04

Gvozd,
пароль на иврите :blink:
=====
Cейчас поменял кодировку на ср1251, но немецкий все также не читается, или я опять тебя не так понял :write:
=====
Цитата:

хотя сейчас начал догадываться что речь о твоем проекте в подписи
да о нем, сейчас делаю возможность добавления аватарок)

Gvozd 01.05.2012 18:08

Цитата:

Сообщение от 9xakep
пароль на иврите

чем пароль на иврите хуже пароля на русском?
Цитата:

Сообщение от 9xakep
Cейчас поменял кодировку на ср1251, но немецкий все также не читается, или я опять тебя не так понял

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

9xakep 01.05.2012 18:12

Gvozd,
просто в жизни бы не догадался использовать пароль на иврите...тогда уж на китайском или японском лучше...правда без инета его не наберешь, если конечно не носить с собой его, чтобы скопировать
======
1) Не легче на js создать ограничения?
2) Как в случае чего добавить поддержку всех языков? Мне для сообщений понадобиться

Gvozd 01.05.2012 18:23

Цитата:

Сообщение от 9xakep
в жизни бы не догадался использовать пароль на иврите...

Но ведь на русском догадались)
Намекаю: пароль на любом национальном шрифте - глупость по определению. Но если уж и разрешать какой-нибудь из национальных шрифтов, то разрешать все языки.
Цитата:

Сообщение от 9xakep
1) Не легче на js создать ограничения?

у вас уже на уровне базы стоит ограничение
я говорю не о том, что вам нужно ввести проверку или поставить ограничение, а о том, что вы уже ввели весьма странное ограничение, выбрав кодировку cp1251 для пароля
Цитата:

Сообщение от 9xakep
Как в случае чего добавить поддержку всех языков? Мне для сообщений понадобиться

Выбрать кодировку UTF8, и одно из сравнений из семейства utf8_*, например utf8_general_ci
Если выберете однобайтовую кодировку, то поддерживать она будет только ограниченный список языков
Если выберете неправильное сравнение, то у вас будет неправильно работать выборка с сортировкой
PS кодировка и сравнение -разные вещи. в гугле об этом можно прочитать, если что

9xakep 01.05.2012 18:30

Цитата:

Сообщение от гвоздик
Но ведь на русском догадались)

Цитата:

Сообщение от хакер
Да и это пока тупость, согласен, я просто хочу сделать чат, вот и задумался, как буду сообщения сохранять, и не стал создавать что-то новое, сделал все на странице регистрации, естественно потом все номрмально сделаю

Цитата:

Сообщение от гвоздь
Выбрать кодировку UTF8

:D :D !pokerface! Я полдня просидел с utf-8, и это не смешно, и на ней не работал русский язык..были кракозябы

Gvozd 01.05.2012 18:49

Цитата:

Сообщение от 9xakep
Сообщение от гозар

Это форум так глючит, или вы специально мои цитаты переписываете на чужое имя?)
Цитата:

Сообщение от 9xakep
!pokerface! Я полдня просидел с utf-8, и это не смешно, и на ней не работал русский язык..были кракозябы

значит что-то вы делали неправильно
например, возможно исходные данные, помещаемые в БД были в неверной кодировке
Учитывая, что вы додумались страницу регистрации создать в CP1251, то данные присланные из браузера не могли бы быть обработанными в иной кодировке, если вы их конечно не перевели в нормальную кодировку. А вы наверняка не перевели, иначе проблема бы не было.

Итак, что нужно сделать:
везде использовать UTF-8
страница с формой регистрации должна быть в UTF-8, а не CP1251, как щаз
для этой страницы должны быть указаны HTTP-заголовки, указывающие кодировку, и соответствующий META_тег. кодировка - UTF-8
скрипт принимающий данные, также в UTF-8
И база также, в UTF-8

9xakep 01.05.2012 18:56

Gvozd,
Цитата:

Это форум так глючит, или вы специально мои цитаты переписываете на чужое имя?)
сори, это я ваши логины вечно путаю)
=======
ок, спасибо, попробую

Gvozd 01.05.2012 19:04

Цитата:

Сообщение от 9xakep
сори, это я ваши логины вечно путаю)

а зачем вы логины переписываете?
форум их прекрасно подставляет в сообщение, когда вы его выделяете(в хроме так точно)
даже если вам движок форума не подставил логин, то зачем его дописывать?

9xakep 01.05.2012 19:31

Gvozd,
просто цитату сделал посредством bb кодов, имена сам решил дописать, если тебя как-то обидело извини :/

Gvozd 01.05.2012 20:01

Цитата:

Сообщение от 9xakep
если тебя как-то обидело извини

да не, ниче страшного

jsuse 17.05.2012 21:27

Цитата:

Сообщение от Gvozd (Сообщение 172233)
Выбрать кодировку UTF8, и одно из сравнений из семейства utf8_*, например utf8_general_ci

Чтобы не создавать новую тему, спрошу здесь.

Скажите, вот phpmyadmin предлагает более 10 видов кодировок utf-8. Только 3 из них кажутся нейтральными: utf8_general, utf8_unicode и utf8_bin. Какую одну из них следует использовать?

Gvozd 17.05.2012 22:25

jsuse,
Это о предлагает не кодировки, а сравнения
сравнение будет влиять на то, в каком порядке выводить записи, если вы отсортируете их по текстовому полю.
а кодировка во всех случаях - одна и та же - Utf8
Если нету какой-то специфики, то берите utf8_general_ci

B@rmaley.e><e 17.05.2012 22:36

Пароль вообще хранить в БД не нужно.

Раед 17.05.2012 22:40

Цитата:

Сообщение от B@rmaley.e><e
Пароль вообще хранить в БД не нужно.

И где же его хранить? В защищённых файлах?

jsuse 17.05.2012 22:59

Цитата:

Сообщение от Gvozd (Сообщение 175081)
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

Цитата:

Сообщение от Раед
И где же его хранить? В защищённых файлах?

Не нужно его хранить вообще. Хранить нужно солёный хеш.

Gvozd 17.05.2012 23:27

jsuse,
полагаю, вы изменили только сравнение, не изменив кодировку

http://www.lissyara.su/articles/free...ysql_charsets/
Читать полностью, а особенно часть про "Что делать, если данные внесены в неправильной кодировке"

9xakep 18.05.2012 15:49

Раед,
нет, его нужно схранить также, но в БД отправлять md5, при логине, хешируешь, то что ввел юзер, и сравниваешь, если хеши совпадают, то пароль правильный

jsuse 20.05.2012 22:11

Цитата:

Сообщение от Gvozd (Сообщение 175096)
jsuse,
http://www.lissyara.su/articles/free...ysql_charsets/
Читать полностью, а особенно часть про "Что делать, если данные внесены в неправильной кодировке"

Gvozd, Хочу поблагодарить за ссылку. Ценнейшая статья. Я из одной этой статьи понял больше о кодировке, чем из всех книг и форумов, которые читал до этого. Разобрался, настроил, работает. Спасибо)

Интересно, что, если вызывать просмотр переменных кодировки в PhpMyAdmin и в командной строке, то результат разный. PhpMyAdmin показывает не верный, а командная строка верный. Это на всякий случай, если кому понадобится. Не доверять PhpMyAdmin, проверять в командной строке.

Вот, что показывает phpMyAdmin. По нему получается, что все правильно:




А на самом деле так:


Gvozd 20.05.2012 22:55

Цитата:

Сообщение от jsuse
Интересно, что, если вызывать просмотр переменных кодировки в PhpMyAdmin и в командной строке, то результат разный. PhpMyAdmin показывает не верный, а командная строка верный. Это на всякий случай, если кому понадобится. Не доверять PhpMyAdmin, проверять в командной строке.

Если не ошибаюсь эти настройки зависят пользователя
PMA у вас возможно запущен из-под root-а, а в командной строке вы работаете из обычного пользователя.
Попробуйте из командной строки зайти root-ом, либо в PMA в конфигах вбить логин-пароль другого пользователя, и картина изменится, надо полагать

Gozar 20.05.2012 22:57

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 175091)
Не нужно его хранить вообще. Хранить нужно солёный хеш.

А собственно говоря почему?
Как предлагаете восстанавливать пароль? Отправлять на мыло сгенерированный, а потом чтобы юзер вбивал что хотел опять, тот же самый пароль?

Если кто-то кроме вас может получить доступ к вашей БД, то абсолютно без разницы хранить пароль или хэш.

9xakep 20.05.2012 23:01

Gozar,
Почему это без разницы? Единственно что он сделает, так это вставит хеш пароль в куки, но на это легко защиту сделать, достаточно их каждый раз перезаписывать. Про забыл пароль, некоторые сайты делают так:

1) создают ссылку для создания нового пароля
2) добавляют новый пароль введенный юзером
А если хранить чистый пароль в БД, то при чужом попадании в нее, можно зайти в аккаунт другого юзера

B@rmaley.e><e 20.05.2012 23:15

Цитата:

Сообщение от Gozar
Отправлять на мыло сгенерированный

Да.
Цитата:

Сообщение от Gozar
Если кто-то кроме вас может получить доступ к вашей БД, то абсолютно без разницы хранить пароль или хэш.

Нет, разница огромна. При правильном использовании хешей, конечно.

Gozar 21.05.2012 00:06

Цитата:

Сообщение от 9xakep
Почему это без разницы?

Патамушта!

Цитата:

Сообщение от B@rmaley.e><e
При правильном использовании хешей, конечно.

Это разговор ни о чём. Разницы нет.

Я даже могу выделить это красным:

Если кто-то кроме вас имеет доступ к таблице с паролями или хэшами, то вы уже удод и поздно пить боржоми.

B@rmaley.e><e 21.05.2012 00:34

Что-то не вижу красного.
И разница есть. Хотя бы в том, что юзеры любят использовать один пароль на многих сайтах.

Gozar 21.05.2012 01:47

Цитата:

Сообщение от B@rmaley.e><e
Что-то не вижу красного.

Тот кто не видит обычного и красного не увидит.

Цитата:

Сообщение от B@rmaley.e><e
И разница есть. Хотя бы в том, что юзеры любят использовать один пароль на многих сайтах.

И какое это имеет отношение как хранить пароли в БД и к тому что посторонним не место в БД? Юзверы пусть делают что хотят, это их дело. Из сферической сферы обсуждение так и не вышло. Разницы нет.

Gvozd 21.05.2012 02:16

Цитата:

Сообщение от Gozar
Если кто-то кроме вас имеет доступ к таблице с паролями или хэшами, то вы уже удод и поздно пить боржоми.

пользователи использующие сложные пароли все еще будут защищены, даже при хищении базы с солеными хешами

B@rmaley.e><e 21.05.2012 07:27

Цитата:

Сообщение от Gozar
И какое это имеет отношение как хранить пароли в БД и к тому что посторонним не место в БД?

Я где-то говорил про посторонних в БД?
Не вижу смысла в дальнейшем обсуждении, Вы всё равно не привели ни одного стоящего аргумента.

Aetae 21.05.2012 08:24

Дело в том что навредить могут необязательно посторонние. Не читали историй про злобных и обиженных уволенных админов?)

Gozar 21.05.2012 12:31

Цитата:

Сообщение от B@rmaley.e><e
не привели ни одного стоящего аргумента.

Вы вообще не привели ни одного аргумента.

Цитата:

Сообщение от Aetae
Не читали историй про злобных и обиженных уволенных админов?)

Нет, не читал.

B@rmaley.e><e 21.05.2012 16:12

Цитата:

Сообщение от Gozar
Вы вообще не привели ни одного аргумента.

То, что Вы игнорируете мои посты, не означает, что я не привёл аргументы.
Цитата:

Сообщение от B@rmaley.e><e
юзеры любят использовать один пароль на многих сайтах


devote 21.05.2012 16:17

Да хранить можно как угодно... главное перед регистрацией предупреждать надо пользователя о том что пароль будет виден администратору сайта и т.п. А там уж пользователь сам решит стоит свой вездешний вбивать или что-то новое придумать.. Вот этим меня вконтакт раздражает, тем что пароли хранит как есть, но не предупреждает об этом юзверей. Я лишь узнал об этом когда восстанавливал свой пароль, а они мне его обратно прислали как есть на мыло. То есть не новый сгенереный, а старый.

9xakep 21.05.2012 16:40

Gozar,
аргументы:
1) Если зайдет кто-нибудь посторнний в БД, то сможет взять пароль юзера
2) Юзерам неприятно то чувство, что к их аккаунту есть доступ от администратора, хотя понимают, что читать он перписку чью-нибудь не будет
3) Зачем хранить в открытом виде вообще, если можно хранить в более защищенном?

Gozar 21.05.2012 19:06

B@rmaley.e><e,
Это не аргумент, поэтому я и проигнорировал. Меня так же не интересует на какой стороне спит пользователь. Это его сугубо личное дело. У многих пароль написан на стикере приклееном в монитору.

Цитата:

Сообщение от 9xakep
Юзерам неприятно то чувство, что к их аккаунту есть доступ от администратора, хотя понимают

Ничего они не понимают и нужно всегда осознавать, что админ имеет доступ к твоей переписке. Там где начинаются деньги заканчиваются сопли про защищённость. Поэтому вконтакте плевать на то, как хранить пароли.

Цитата:

Сообщение от 9xakep
1) Если зайдет кто-нибудь посторнний в БД, то сможет взять пароль юзера

Эка невидаль, паролько не главное. Можно спокойно делать что угодно на сайте и без пароля юзверя, а имея доступ к БД вообще наплевать на пароли.

Развели тут демагогию про защищённость и секретность. Давайте без показушности. Хранение паролей имеет ряд преимуществ и недостатков.

Недостаток:
1. Можно получить доступ к многим аккаунтам одновременно, если нет дополнительной защиты. Это пожалуй самый серьезный недостаток.

Преимущество:
1. Не нужно морочить пользователю голову и заставлять его трахать себе мозг ссылками с новыми паролями. Это одно из самых серьезных преимуществ. Единицы не любят получать пароли и тысячи любят получать их, а не тратить время на процедуры "криворуких программистов", которые придумывают всемозможные "издевательства" для бедных пользователей.

Любое действо имеет ряд перимуществ и недостатков.

B@rmaley.e><e 21.05.2012 20:49

Цитата:

Сообщение от Gozar
доступ к БД

Доступ к БД бывает разный. С помощью SQL-inj можно утянуть интересные данные, но очень редко удаётся изменить их.


Часовой пояс GMT +3, время: 11:07.