Сергей Добросклонов
|
|
« : 10-04-2010 18:41 » |
|
Для скрипта проверки формы "на лету" написал скрипт, но есть косяк: если в поле написано латиницей, то всё хорошо, если же кириллицей, то в любом случае скрипт говорит, что ник свободен. Мой запрос выглядит так: $this->mMysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE); $query = $this->mMysqli->query('SELECT nik FROM users WHERE nik="'.$value.'"'); if ($this->mMysqli->affected_rows > 0) { $answer = 'Этот ник уже занят.'; return $answer; }
В интернете видел пример, там после подключения сразу написали: $mMysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD,DB_DATABASE); [b]$mMysqli->query("SET CHARACTER SET cp1251");[/b]
Но мне эта строчка не очень то помогла. Как быть?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #1 : 10-04-2010 18:48 » |
|
а в базе как хранятся?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
|
Sla
|
|
« Ответ #3 : 10-04-2010 19:08 » |
|
А чем доказать можешь?
Покажи
SELECT nik FROM users WHERE
и
$value в одинаковой кодировке
С другой стороны, если ты используешь аякс, то возможны проблемы
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
RXL
|
|
« Ответ #4 : 11-04-2010 09:37 » |
|
Лучше начать с Там и кодировку таблицы и столбца можно увидеть.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Сергей Добросклонов
|
|
« Ответ #5 : 11-04-2010 09:44 » |
|
Что-то я вообще не понял что мне делать?
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #6 : 11-04-2010 10:03 » |
|
|
|
« Последнее редактирование: 11-04-2010 10:04 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Сергей Добросклонов
|
|
« Ответ #7 : 11-04-2010 16:44 » |
|
Я просто не пойму, вот это: Куда писать? Можете показать как полностью запрос должен выглядеть?
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #8 : 11-04-2010 18:23 » |
|
Барин, читай тщательнее!
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Сергей Добросклонов
|
|
« Ответ #9 : 11-04-2010 18:47 » |
|
Да вроде внимательно читал. Может я совсем замотался и туплю, но я что-то не догоняю. Ссылка, которая выше указана, ведёт на эту же страницу. Можно так ещё раз от начала и до конца?
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #10 : 12-04-2010 03:30 » |
|
Барин, да-да - еще много-много раз, до полного просветления мозгов.
Зачем тебе давать советы, если ты их не видишь?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Сергей Добросклонов
|
|
« Ответ #11 : 12-04-2010 13:23 » |
|
Я объясняю ситуацию! По той паре строк нихрена не понятно! Просто прошу привести полный пример, а не одну строку в которой написано: SET CHARACTER SET cp1251. Что это, куда, к чему вообще? Под целым примером я подразумеваю: допустим: строка с подключением к бд, затем допустим строки с установкой кодировки, сам запрос. В таком духе короче. Потому что я пробовал вписывать "SET CHARACTER SET cp1251" в разном порядке: до создания подключения к базе, после, перед запросом и так далее. И ничего не вышло.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #12 : 12-04-2010 14:55 » |
|
Cперва выполни приведенные ниже запросы и покажи здесь результаты, а потом будем обсуждать. SHOW CREATE TABLE твоя_таблица;
SHOW VARIABLES LIKE ' character\_set\_%';
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Сергей Добросклонов
|
|
« Ответ #13 : 12-04-2010 19:01 » |
|
Я наверное плохо умею объяснять. Так как я так и не понял, я написал такую вещь: <?php $db = mysql_connect ("localhost","story","password"); mysql_select_db ("story",$db); $result = mysql_query("SHOW CREATE TABLE users"); $myrow = mysql_fetch_array($result); echo $myrow[0]; ?>
На страницу выводится слово "users". Я не знаю что там должно было появиться. Так что если не трудно, напиши мне пример в таком же подробном формате как у меня. Вторую строчку вообще не понял куда писать.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #14 : 12-04-2010 19:09 » |
|
а сделать религия не позволяет?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Сергей Добросклонов
|
|
« Ответ #15 : 12-04-2010 19:44 » |
|
Я просто не в курсе был, что надо 1 ставить, а не 0. Обычно в таких случаях информация хранится в нулевом элементе массива. С единицей вот что выдаёт: CREATE TABLE `users` ( `id` int(4) NOT NULL auto_increment, `nik` varchar(30) default NULL, `password` varchar(15) NOT NULL, `name` varchar(20) NOT NULL, `family` varchar(20) NOT NULL, `date_rozd` varchar(12) NOT NULL, `city` varchar(25) NOT NULL, `icq` int(9) NOT NULL, `skype` varchar(50) NOT NULL, `msn` varchar(50) NOT NULL, `email` varchar(50) NOT NULL, `url` varchar(50) NOT NULL, `photo` varchar(255) default 'img/standart_avatar.png', `active` int(1) NOT NULL, `date_reg` varchar(12) NOT NULL, `date_last` varchar(12) NOT NULL, `status` varchar(10) NOT NULL, `timestamp` int(12) default '0', `mess_col` int(4) NOT NULL, `story_col` int(2) NOT NULL, `img_col` int(3) NOT NULL, `rep` int(3) NOT NULL, `read_story` int(3) NOT NULL, `author_col` int(3) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=cp1251
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #16 : 12-04-2010 19:51 » |
|
Барин, скажи, ты в этой каше что-нибудь понял бы? У тебя консольный доступ есть? Если есть, запускай там: mysql -u твой_логин -p -h хост_mysql Вот там и выполняй команды. Когда постишь на форум код или что-то еще форматированное, оборачивай его тегами [code] [/code] Вопрос вдогонку: какая кодировка используется на странице?
|
|
« Последнее редактирование: 12-04-2010 19:55 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Сергей Добросклонов
|
|
« Ответ #17 : 12-04-2010 20:13 » |
|
С кодом я что-то не подумал в этот раз. На странице используется windows-1251. На счёт консольного режима я не знаю. У меня сервак Апач. Я пользуюсь только 3-мя ссылками: Start Denwer, Stop Denver, Restart Denver. Где там ещё какие функции я не знаю. Если конечно ты расскажешь по подробнее как это, что и как туда зайти, то можно попробывать то, что ты написал.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #18 : 12-04-2010 20:17 » |
|
win+r cmd cd Z:\usr\local\mysql-5.1\bin\
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Сергей Добросклонов
|
|
« Ответ #19 : 12-04-2010 20:48 » |
|
Выполнил то что было написано в последнем сообщении.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #20 : 12-04-2010 20:56 » |
|
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Сергей Добросклонов
|
|
« Ответ #21 : 12-04-2010 21:04 » |
|
Ввёл: mysql -u story -p -h localhost_mysql Мне вывелось: mysql: Character set 'cp1251' is not a compiled character set and is not specifi ed in the '\usr\local\mysql5\share\charsets\Index.xml' file
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #22 : 13-04-2010 03:14 » |
|
Уже хоть что-то.
Какая версия Денвера?
Попробуй такую команду (результат - сюда): mysqld --version
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Сергей Добросклонов
|
|
« Ответ #23 : 13-04-2010 16:59 » |
|
mysqld Ver 5.0.45-community-nt for Win32 on ia32 (MySQL Community Edition (GPL)
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #24 : 13-04-2010 20:04 » |
|
Старая - года 4 давности. Сейчас актуальна 5.0.90 - рекомендую обновить либо MySQL отдельно, либо скачать свежий Денвер. Не имеет смысла выделываться и искать глюки (а может и не глюки, а твои ошибки, но тебя порой фиг поймешь), если они давно решены. Сперва обновись, а потом ждем таки вывода этого: https://forum.shelek.ru/index.php/topic,24042.msg232058.html#msg232058
|
|
« Последнее редактирование: 13-04-2010 20:06 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Сергей Добросклонов
|
|
« Ответ #25 : 17-04-2010 08:58 » |
|
Решил я свою проблему. Всё что надо было - написать такую вещь: <?php // как было объяснено в источнике: ява-скрипт корректно работает только с utf-8 // в этой строке указано, что значение в windows-1251, но для обработчика перекодировать в utf-8 $value = iconv('utf-8', 'cp1251', $value); // затем выполнить запрос $query = $this->mMysqli->query('SELECT nik FROM users WHERE nik="'.$value.'" LIMIT 1'); ?>
Сам я конечно не знаю. Может что не так понял, но главное что это работает!
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #26 : 17-04-2010 09:03 » |
|
Барин, вот в том то и дело, что ничего не понял. Следовательно, ценность опыта нулевая...
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Sla
|
|
« Ответ #27 : 17-04-2010 09:08 » |
|
RXL, ну почему же, понятно... ajax'ом отправляет запрос на сервер, а он (аякс) работает с utf-8 в базе данные хранятся в cp1251 требуется перекодировка входных данных.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #28 : 17-04-2010 09:09 » |
|
а вот это - бред SELECT nik FROM users WHERE nik="'.$value.'" LIMIT 1
nik должен быть уникальным в таблице
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
RXL
|
|
« Ответ #29 : 17-04-2010 09:15 » |
|
И не только - обязательно делать mysql_escape_string() - иначе это цель для SQL-injections.
Слав, это не очевидно. По хорошему, надо анализировать заголовки на предмет установления кодировки запроса.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|