PHPБ MySQL и кодировка

djdiplomat
На сайте с 05.08.2009
Offline
136
899

ДД!

Проблема такая - нужно определить кодировку переменной. В дальнейшем эта переменная будет использоваться для поиска по БД.

$a=$_POST['apoint'];
echo "Результат".$a."<br>".$string;

Слово результат выводится нормально, а вот переменная $a представляет кракозяблы.

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

$result = mysql_query("SELECT nomer FROM nomera WHERE `osti` LIKE '%$apoint%'",$db);

Вопрос: Как определить кодировку переменной $a и переделать ее в нужную?

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#1

после подключения к Базе первым запросом сделайте

$db = mysql_connect($db_server, $db_username, $db_password);//подключение к базе
mysql_query('set names cp1251',$db);

cp1251 это если кодировка ВИН-1251. Узнать ее можно, открыв файл, в котором находится указанный Вами код. Юзайте правильный текстовый редактор. Там вверху есть "Кодировки"... Вообщем разберетесь.

Подпись))
djdiplomat
На сайте с 05.08.2009
Offline
136
#2

Спасибо, одну проблему решил, но!

Почему то такая фигня - после этого текст (не из базы, а обычный, который идет после обработчика в тегах <P> стал кракозяблами.

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

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#3

Вы приведите все к одной кодировке.

То есть, кодировка в СЕТ НЭЙМС и кодировка файла, в котором код - должны быть ОДИНАКОВЫМИ

Да, и еще. Не забывайте говорить клиенту(браузеру), в какой кодировке Вы ему отдаете контент(страницу).

1) В .htaccess написать AddDefaultCharset

2) Из ПХП файла послать заголовок с указанием кодировки

3) Мета-тэги(игнорируются, если пункт 1 и/или 2 выполнены).

E
На сайте с 21.09.2009
Offline
283
#4

djdiplomat, при POST кодировка таже что и страница с которой пост пришел. Милованов Ю.С правильно пишет если кодировка utf-8 (вот я попарился с этим) обязательно в начале страницы выдавать хеадер с кодировкой utf-8

djdiplomat
На сайте с 05.08.2009
Offline
136
#5

Господа, прошу проявить терпение ко мне. (Я только начинаю изучать SQL)

Прогу запускаю в денвере.

Значит есть два файла:

Вот первый:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Выборка по условию</title>
</head>

<body>
<p> Что ищем?</p>
<form action="find.php" method="post" target="_blank">

<select name="apoint">
<option value="Авиаторов">Авиаторов</option>
<option value="Свободы">Свободы</option>
</select>
<input name="submit" type="submit" value="***1053;***1072;***1081;***1090;***1080;" />

</form>
</body>
</html>

Вот обработчик

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php
$a=$_POST['apoint'];
echo "Переменная имеет значение ".$a."<br>";

$db = mysql_connect ('localhost','root',''); // Соединяемся с БД
mysql_query("SET NAMES utf8", $db); // Определяем кодировку
mysql_select_db('find',$db); // Выбираем таблицу find


$result = mysql_query("SELECT nomer FROM nomera WHERE `ostanovki` LIKE '%$a%'",$db); // подаем запрос на поиск поля
$myrow = mysql_fetch_array($result); // Считываем первый элемент
echo $myrow['nomer']; // Выводим значение колонки номер если поиск успешен
?>
</body>
</html>

Поля в базе:

ID | nomer | ostanovki

1 | 34 | Авиаторов Свободы Радуга

2 | 19 | Свободы Русское поле

3 | 5 | Авиаторов Свободы Транспортная

Что получается: Если выполнять запрос прямо в MyAdmin SELECT nomer FROM nomera WHERE `ostanovki` LIKE '%$a%' заменив $а на %Авиаторов%, то выдает две записи (как и должно быть).

Если выполнять через пхп файлы, то возвращает пустой результат. (раньше результат был, но с кракозяблами)

Я своей башкой делаю вывод, что какое-то несоответствие в кодировке между бд и файлами, но чет не знаю как исправить.

PS работаю в денвере.

E
На сайте с 21.09.2009
Offline
283
#6

djdiplomat, в самое начало обработчика вставьте

<?php

header('Content-Type: text/html; charset=utf-8');

?>

и зачем ставить target="_blank" пугать пользователями взрывом нового окна?:)

Промолчу про конект к база там нужно убедится что соединение состоялось и нет ошибок.

переменная $a тоже не проверенна а вдруг инъекция?

после

$result = mysql_query("SELECT nomer FROM nomera WHERE `ostanovki` LIKE '%$a%'",$db); // подаем запрос на поиск поля

сделать

if(!$result) exit('error'); // если выдаст ошибку при выборке записи остановить скрипт

теперь если нет ошибок и в выборке есть хоть одна запись

if($result && mysql_num_rows($result) > 0) // обрабатываем

{

while($cat = mysql_fetch_array($result))

{

echo $cat['nomer']."<br />";

}

}

во конце по идее нужно обнулить выборку но тут сами найдете что делать

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий