[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблемы с поиском Кодировка видимо
Xes
Почитал уже все и визде не помогоает.
Была кодировка cp1251, на локалке все работает ищит по базе нормально.

Залил на сайт искать перестала. Для БД на сервере задал

ALTER DATABASE `a7601568_dblist` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci
все равно не пашет.

Все пишут что cp1251 устарела решил переделать в utf8. Переделал в процесе перееделки кнечно вылезали кракозяблы, но с этим разобрался вся инфа из базы выводиться нормально, да и сами сраницы переделал в utf8 т.к. весь текст превратился в кракозяблы сних так была кодировка ansi.

Вот что у меня сейчас но поиск всеравно не работает на сервере.

Для БД на серваке задал
ALTER DATABASE `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

все файлы страниц которые были зделаны в CoffeeCup передал в utf8.

Базу данных с локалки экспортировал (сам файл формата utf8), в файле у таблиц заменил текст на
 ENGINE=MyISAM DEFAULT CHARSET=utf8;


Заливаю на сервак получаю таблцы как пологается в utf8.
Текст читается норм.

В страницах прописано:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta
http-equiv="Content-Language" content="ru">


После подключения к БД
mysql_query("SET CHARACTER SET 'utf8'");


Страницы отображаються нормально текст, читаемый и тот что на странице и тот что взят из БД нормально.
Но поиск не работает т.е. не находит что надо. На локалке все работало под cp1251.
Какого хрена ему еще надо? Уже визде прописал все что говорят.[b][/b]



Спустя 4 часа, 57 минут, 35 секунд (17.04.2011 - 14:10) Michael написал(а):
А в phpmyadmin если поисковый запрос вбиваешь - ищет нормально?

Спустя 51 минута, 1 секунда (17.04.2011 - 15:01) Xes написал(а):
Ээ я удивлен...
Тоже ни че не находит, хотя сайт на локалке работает когда ввожу искомое сочитаание в форму.

Полный код на php выглядит так:

$search = htmlspecialchars($_POST['search']);
$query = "SELECT * FROM table1 where (concat(gorodru, name, adres) like '%$search%') and (CURDATE()<dview) ORDER BY dsort";
$sql = mysql_query($query, $db);
if (mysql_num_rows($sql)>0) // Если кол-во записей не ноль
{
while ($sqlrow=mysql_fetch_array($sql))
{



Попробывл ввести в phpmyadmin запрос :
SELECT * FROM table1 where gorodru like 'мо'

Количество записей 0 чтобы это значило, у меня ведь есть Запись['gorodru']=Москва ?

Тут показалось нашел косяк, ткнул "Server: localhost" так другая сортировка задана, поменял на cp1251 все равно даже этот простенький запрос с like не проходит. Опять растроился :( :D

----
Так ладно я уже не знаю что думать вот такой запрос ни чего не дает
SELECT * FROM `table1` WHERE gorodru='Москва' 

Нижеследующий запрос выводит все ок, все же латиница ...
SELECT * FROM `table1` WHERE goroden=moskva

Спустя 25 минут, 35 секунд (17.04.2011 - 15:26) Игорь_Vasinsky написал(а):
Я не понял, у тя щас сайт и БД в какой кодировке?

Спустя 11 минут, 50 секунд (17.04.2011 - 15:38) Xes написал(а):
// Данные для mysql сервера
$dbhost = 'localhost'; // Хост
$dbuser = 'admin'; // Имя пользователя
$dbpassword = '123'; // Пароль
$dbname = 'listhotel'; // Имя базы данных
// Подключаемся к mysql серверу
$db = mysql_connect($dbhost, $dbuser, $dbpassword);
mysql_query("SET CHARACTER SET 'cp1251'");
// Выбираем нашу базу данных
mysql_select_db($dbname, $db);


<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta
http-equiv="Content-Language" content="ru">


Запрос:
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
Выводт следующее:
Variable_name 	Value 
collation_connection cp1250_general_ci
collation_database cp1251_general_ci
collation_server cp1251_general_ci

Спустя 21 минута, 8 секунд (17.04.2011 - 15:59) Игорь_Vasinsky написал(а):
Хорошо, а в PMA (на хостинге) посмотри как данные хранятся. В читабельном?

Спустя 15 минут, 8 секунд (17.04.2011 - 16:14) Xes написал(а):
Да, нормальные руские буквы.
Нет ... куда там хостинг у меня на локалке вопрос то теперь даже возник че за дурь то такая. Сайт на локалке работате, в PMA
делаю запрос
SELECT * FROM `table1` WHERE gorodru='Москва'
Нет ответа ---- хотя должен быть
SELECT * FROM `table1` WHERE goroden=moskva
Есть ответ.

Спустя 2 часа, 44 секунды (17.04.2011 - 18:15) Игорь_Vasinsky написал(а):
Цитата
SELECT * FROM table1 where gorodru like 'мо'


может так надо было:

SELECT * FROM `table` WHERE `gorodru` LIKE '%мо%'


лучше сразу привыкать к синтаксису и держаться стиля


А по поводу нет результатов:

Покажи хотябы кусочек с INSERT из дампа

Спустя 2 минуты, 21 секунда (17.04.2011 - 18:18) Игорь_Vasinsky написал(а):
Причём учитывай регистр, есле не сделал поиск не регистрозависимым.

Спустя 29 минут, 7 секунд (17.04.2011 - 18:47) Xes написал(а):
CREATE TABLE IF NOT EXISTS `hotels` (
`idhotel` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`name` char(100) NOT NULL,
`goroden` char(50) NOT NULL,
`gorodru` char(50) NOT NULL,
`adres` char(255) DEFAULT NULL,
`tip` char(30) DEFAULT NULL,
`files` char(20) DEFAULT NULL,
`filesbig` char(20) DEFAULT NULL,
`title` char(150) DEFAULT NULL,
`description` char(255) DEFAULT NULL,
`keywords` char(255) DEFAULT NULL,
`vip` tinyint(1) DEFAULT NULL,
`dadd` date DEFAULT NULL,
`dview` date DEFAULT NULL,
`dsort` date DEFAULT NULL,
`contfio` char(150) DEFAULT NULL,
`contemail` char(50) DEFAULT NULL,
PRIMARY KEY (`idhotel`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;

--
-- Dumping data for table `hotels`
--

INSERT INTO `hotels` (`idhotel`, `name`, `goroden`, `gorodru`, `adres`, `tip`, `files`,
`filesbig`, `title`, `description`, `keywords`, `vip`, `dadd`, `dview`, `dsort`, `contfio`, `contemail`) VALUES
(1, 'Гостиничный комплекс КОСМОС', 'moskva', 'Москва', 'Россия, г. Москва, ул. Проспект
Мира, 150', 'Гостиница', '0000s.php', '0000.php', 'Гостиница КОСМОС', 'Гостиница КОСМОС',
'Гостиница КОСМОС', NULL, '2011-04-14', '2011-04-30', '2011-04-30', 'Иванов Иван Иванович',
'ivan@mail.ru'),
(2, 'Гостиница Альбатрос', 'sochi', 'Сочи', 'Сочи, п. Вардане, ул. Молодежная, 22',
'Гостиница', '0001s.php', NULL, NULL, NULL, NULL, NULL, '2011-04-16', '2011-12-01',
'2011-04-01', 'Демина Регина', 'demreg@mail.ru');


Я уже 10 раз туда сюда перегнал ...
Вобщем то я не путаюсь о чем говорю, но боюсь вам уже не понятно ....

Вот возник вопрос передела все в utf-8
В мета теге прописал <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> а браузер паразит не переключаеться автомато, переключаешь кодировку все ок. Ну это на локалке пока что.

---
Вы мне скажите сраз в какой лучше кодировке доума доводит в utf-8 или cp1251
Я полагаю что utf-8 Если так довайте я шас все к обшему знаменателю приведу (utf-8) и тогда будем говорить об одном. А то так долго я буду отлаживать разговариваем о прошлом а у меня уже utf8 , а потом наоборот.
Вообщем через пол часика приведу все к uf8 на локалке и на серваке.
--
%Мо% насчет этого да я накосячил надо было проценты ставить. Вобщем убегаю ... но ровно через пол часа все будет в utf8 и там тогда все еще раз обсудим.

Спустя 4 минуты, 3 секунды (17.04.2011 - 18:51) Игорь_Vasinsky написал(а):
Понятно.

Если ищешь не полное совпадение - то перед и после поискового запроса ставь %

попробуй выполнить

SELECT * FROM `table` WHERE `gorodru` LIKE '%Мо%'

Спустя 9 минут, 11 секунд (17.04.2011 - 19:00) Invis1ble написал(а):
Xes
Задай на всякий случай кодировку для поля, по которому ищешь, явно

Спустя 1 час, 15 минут, 16 секунд (17.04.2011 - 20:15) Xes написал(а):
Переделал все в utf залил на сервер отображется все Ок. Поиска нет. Вот дамп с сервера
CREATE TABLE IF NOT EXISTS `config` (
`updatsum` date DEFAULT NULL,
`allelementdb` smallint(5) unsigned DEFAULT NULL,
`activelementdb` smallint(5) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Dumping data for table `config`
--

INSERT INTO `config` (`updatsum`, `allelementdb`, `activelementdb`) VALUES
('2011-04-17', 2, 2);

Сервак выдает по запросу такое:
Variable_name 	Value 
collation_connection utf8_unicode_ci
collation_database utf8_general_ci
collation_server latin1_general_ci


таблицы везде где тока видно в PMA utf8_general_ci

Подключение к БД
// Подключаемся к mysql серверу
$db = mysql_connect($dbhost, $dbuser, $dbpassword);
mysql_query("SET CHARACTER SET 'utf8'");


<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Все нормально показывает поиска нет.

Запрос на поиск в php
$query = "SELECT * FROM hotels where (concat(gorodru, name, adres) like '%$search%') and (CURDATE()<dview) ORDER BY dsort";

Спустя 4 минуты, 58 секунд (17.04.2011 - 20:20) Invis1ble написал(а):
Xes
Ничего пока по сути сказать не могу, но мой совет такой: сначала добейся корректной работы запроса в PMA, а php-скрипт - это уже второстепенно

Спустя 21 минута, 29 секунд (17.04.2011 - 20:42) Xes написал(а):
Вот такой запрос на срвере проходит и выдает запись.
SELECT * FROM hotels where gorodru like '%мо%'


Видимо мое "мо" из формы php уродуется так что БД его не находит. В PMA текст отображается коректно.
---
Может поможет чем то, с сервака страница приходит нормально но поиск не фурычит. А на локале кракозяблы меняешь ручками кодировку все Ок, обнавляешь опять кракозяблы. Почемуто на локалке не хочет метотег воспринимать. Сайты один к одному только данные к подключению БД разные. Поиск на локалке пашет. ну и запрос кнечно проходит
SELECT * FROM hotels where gorodru like '%мо%


Что то это дает, в плане, косяк гденибуть проглядывается?

Спустя 14 минут, 25 секунд (17.04.2011 - 20:56) Игорь_Vasinsky написал(а):
Цитата
Видимо мое "мо" из формы php уродуется


Ну ты же можешь сделать вывод из поля $search - вот и посмотри что в БД отправляешь.

синтаксис '%мо%' - (проценты) - говорт что искать не точные совпадения: молоко, молот, москва

И если сформировать запрос 'мо' - то единственное совпадение - "мо"

Спустя 7 минут, 16 секунд (17.04.2011 - 21:03) Invis1ble написал(а):
Xes
.htaccess с указанием кодировки по умолчанию имеется в наличие? Если да, то попробуй обратиться в техподдержку хостинга.

Спустя 3 минуты (17.04.2011 - 21:06) Xes написал(а):
SET character_set_client = X;
SET character_set_results = X;
SET character_set_connection = X;
SET collation_connection = Y;

Теперь рассмотрим подробно, для чего нужна каждая из переменных.

character_set_client - указывает, в какой кодировке клиент (скрипт) передает данные серверу.
Примечание: если скрипт самостоятельно не конвертирует данные, то значение этой переменной и charset мета тега должны совпадать:

meta http-equiv="Content-Type" content="text/html; charset=X"

character_set_results - указывает, в какой кодировке сервер будет отдавать данные из БД клиенту (скрипту).

character_set_connection - указывает в какую кодировку нужно перекодировать присланные клиентом данные из кодировки, указанной в character_set_client.
Вот это что такое, для записи в БД или вообще информация прекодируется для сравнения с элементами БД. Чем отличается тогда от character_set_client

collation_connection - указывает сопоставление символов текущей, установленной, кодировки X.

Вот видемо чтото с этим тут завязано.

.htaccess - Написано что поддерживается изменние этого файла, только я про этот момент ни чего не знаю, надо читать. Да и найти его не могу в корне своего сайта...


>>> Ну ты же можешь ....

Пробовал вывести через echo все гуд, выводит мо.

Спустя 34 минуты, 58 секунд (17.04.2011 - 21:41) Игорь_Vasinsky написал(а):
Цитата
Пробовал вывести через echo все гуд, выводит мо


значит и в БД уходит "мо"

Напомни, есть вывод от:

SELECT * FROM `table` WHERE `gorodru` LIKE '%мо%'


и от

SELECT * FROM `table` WHERE `gorodru` LIKE '%Мо%'



из PMA и из формы


Спустя 1 минута (17.04.2011 - 21:42) Игорь_Vasinsky написал(а):
Цитата
значит и в БД уходит "мо"


если ты конечно ни чего другого с переменной до ввода в БД не делаешь...

Спустя 36 минут, 23 секунды (17.04.2011 - 22:19) Xes написал(а):
Ни чего с переменной ни делаю идет вставка в запрос как показано, выше.
SELECT * FROM `table` WHERE `gorodru` LIKE '%Мо%

Запрос и с большой и с маленькой буквы из PMA проходять как на сервере так и налокалке.
Поиск работате тольо на локалке, на сервере поиск через форму не работает.
-------
(Я тут писал что на локалке кракозяблы, написал такую чтуку, браузер поправил кодировку на ту что надо и теперь сам ее определяет. Но на эту страку ругается я ее удалил, но все равно все с кодировка на локалке наладилась. Сейчас разница лишь в том что на серваке не работает поиск из формы.
<?php header('Content-type: text/html; charset=utf-8')?>
)

Тут еще посоветовали заюзать:
mysql_query("set character_set_client='utf8'");
mysql_query("set character_set_results='utf8'");
mysql_query("set collation_connection='utf8_general_ci'");
Завтра попробую.

Спустя 18 часов, 31 минута, 20 секунд (18.04.2011 - 16:50) Xes написал(а):
mysql_query("set character_set_client='utf8'");
mysql_query("set character_set_results='utf8'");
mysql_query("set collation_connection='utf8_general_ci'");


Помогло, поиск заработал !!!!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.