Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировка мешает запросу, Из-за крякозябл не выполняется запрос БД 
V
    Опции темы
kaa
  Дата 28.8.2006, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: -1
Всего: 2



Есть скрипт который принимает от пользователя сообщение и записывает его в бд. Так как с клиентской стороны запрос отправляется Ajax-ом, а он с кирилицей не работает, то я перевожу всё в UTF-8. Имеем следующую картину:

Код

message_in.php?private=y&address=kaa&message=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82


Скрипт составляет запрос используя переданные значения, и преобразует текст в дикие крякозяблы:

Код

INSERT INTO table_message_private(login, address, message, mess_time) values('', 'kaa', 'Привет', '1156710024')


И вот эта 

Код

Привет



портит весь запрос! Усли же передаётся англицкай текст то всё проходит нормально smile
А последняя запятая, когда я копирую запрос в MySQL Tools for 5.0 вабще преврящается в закрывающую кавычку - откуда собственно и трабл

Никто не сталкивался с такой байдой?

Сам скрипт:
Код

<?php
session_start();
require "config.cfg";


$conn = mysql_connect($host_db, $login_db, $password_db) or die ("Íåâîçìîæíî óñòàíîâèòü ñîåäèíåíèå ñ ÁÄ");
if(!mysql_select_db($name_db, $conn))
{
    echo "Íåâîçìîæíî âûáðàòü áàçó äàííûõ";
    exit();
}


$timer = date("U");
if($_REQUEST['private']=='n')
{
    $str_sql = "INSERT INTO table_message_global(login, address, message, mess_time) values('".$_SESSION['login']."', '".$_REQUEST['address']."', '".$_REQUEST['message']."', '".$timer."')";
}
else
{
    $str_sql = "SET NAMES cp1251";    
    if(!mysql_query($str_sql, $conn))
    {
    echo $str_sql;
    echo "ERROR";
    exit();
    }
//Собственно запрос который глючит :(
$str_sql = "INSERT INTO table_message_private(login, address, message, mess_time) values('".$_SESSION['login']."', '".$_REQUEST['address']."', '".$_REQUEST['message']."', '".$timer."')";
    
}


if(!mysql_query($str_sql, $conn))
{
    echo $str_sql;
    echo "ERROR";
    exit();
}


if($_REQUEST['private']=='n')
{
    Header('Location: 2.html');
}
else
{
    echo "OK<br>";
    
}
?>

PM MAIL   Вверх
Vaulter
Дата 28.8.2006, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



kaa, перекодируй.


--------------------
PM MAIL WWW ICQ   Вверх
jzZ
Дата 28.8.2006, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 17.7.2006

Репутация: 1
Всего: 2



PM MAIL   Вверх
Alone
Дата 28.8.2006, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 1
Всего: 6



Зачем? 
аякс нормально справляется с кодировками... Все зависит от того, какую библиотеку для работы с аяксом ты используешь...


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
kaa
Дата 28.8.2006, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: -1
Всего: 2



Alone, 
А поподробнеее...  smile

Добавлено @ 23:57 
jzZ, Что-то нехочется чужие функции брать - у мя цель проекта, скажем так, генеральная тренировкаsmile Сам хачу весь код набрать, да.... А видно таки придётся тянуть, спаибо за ссылочку smile
PM MAIL   Вверх
jzZ
Дата 29.8.2006, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 17.7.2006

Репутация: 1
Всего: 2



kaa
Стандартная функция php такая же как и mysql_query, просто  у тебя сообщение передается методом GET, как я заметил, причем выводится туда в виде urlencode, (это обратная функция), может поэтосу у тебя там кракозяблы?
PM MAIL   Вверх
AztEK
Дата 29.8.2006, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 6
Всего: 18



Действительно, может POST'ом передавать?


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Alone
Дата 29.8.2006, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 1
Всего: 6



Народ, да вы чего? smile причем тут ГЕТ/ПОСТ? 

Во первых, если документ в УТФ8, то соответственно должна быть выставлена кодировка в заголовке страницы <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Это первый и самый надежный вариант решения задачи.

Далее, твой mysql сервер, естественно работает в кодировке отличной от утф8, да и база скорее всего тоже. В этом случае определись: будет ли у тебя единая кодировка для сайта и БД или нет.
В противном случае, данные, которые ты будешь получать от клиента (неважно аяксом или ГЕТ/ПОСТом) придется перекодировать в соответствующую кодировку БД.

Цитата

Что-то нехочется чужие функции брать 

Не переживай, это не чужие функции а самые что ни на есть родные smile пхп-шные.

Цитата

у мя цель проекта, скажем так, генеральная тренировка

Ну, одно другому не мешает... smile Познавать чужой код тоже бывает полезно. А если библиотека зарекомендовала себя с хорошей стороны, то работать с ней как с черным ящиком - обычное дело. 

Я для своих целей использую вот этот продукт
Изучай, будут вопросы пиши. Отвечу.


пример использования - добавление товара в корзину. (рабочий каталог - манекены)

Это сообщение отредактировал(а) Alone - 30.8.2006, 09:30


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
kaa
Дата 29.8.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: -1
Всего: 2



Alone, Не, документ не в UTF-8... Кстати насчёт кодировки БД  -ща попробую её всю в cp1251 нафих зделать!

зы: а ссылочка битая...
PM MAIL   Вверх
Alone
Дата 30.8.2006, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 1
Всего: 6



Не спеши с экспериментами, "горячий парень" smile
Лучше покажи код, который у тебя занимается отправкой данных от клиента на сервер, используя аякс.


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
kaa
Дата 30.8.2006, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: -1
Всего: 2



Так, эксперимент провёл - всё стало в ажуре кроме одного: скрипт видит приходящее сообщение отправляемое Аяксом КРЯКОЗЯБЛАМИ, собственно это же он в бд и записывает smile

Код вот:
Код

function ClickButtonRequest()
    {
        //Отправляем  сообщение на сервер
        CreateXMLHttpRequest();
        var message_address = document.forms["private_form"].elements["address"].value;
        var message_text = document.forms["private_form"].elements["message"].value;
        var str = "message_in.php?private=y&address=" + message_address + "&message=" + message_text;
        str = encodeURI(str);
//Строка которая выводит составленное сообщение для контроля
//в форму ввода текста сообщения        
//var message_text = document.forms["private_form"].elements["message"].value = str;
        XRH.open("GET", str);
        XRH.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
//Обработчика нетуть
        //XRH.onreadystatechange = EventRequest;
        XRH.send(null); 
    }


Как не спешить? Проект третью неделю "стынет" smile
PM MAIL   Вверх
kaa
Дата 31.8.2006, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: -1
Всего: 2



Как я понимаю, у меня PHP неправильно декодирует UTF-8.
Никто незнает почему это может быть и как от этого избавиться?
PM MAIL   Вверх
kaa
Дата 31.8.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: -1
Всего: 2



Alone, Прочитал вашу ссылку.. Интересно, но мне показалось сложновато... Плюс переводить почти готовый проект на новые рельсы - сомнительная выгода smile
Кстати, говарят с кодировками отличными от cp-1251 и KOI8-R помогает справится расширение PHP iconv. Никто про такое не слышал? Что за зверь, с чем едят, мне оно поможет?
PM MAIL   Вверх
kaa
Дата 31.8.2006, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: -1
Всего: 2



В общем, если кому интересно, проблемв решилась следующей командой:

Код

$str_sql = iconv("UTF-8", "cp1251", $str_sql);



PM MAIL   Вверх
Alone
Дата 31.8.2006, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 1
Всего: 6



Прошу прощенья,  поздно прочитал. 

Цитата

Alone, Прочитал вашу ссылку.. Интересно, но мне показалось сложновато... Плюс переводить почти готовый проект на новые рельсы - сомнительная выгода

Ну, как сказать...  Учитывая сомнительную работоспособность того что сейчас есть - лучше потратить 1час (ровно столько мне понадобилось для прочтения и написания тестов) и потом существенно облегчить себе жизнь smile Тем более, что описываемая библиотека "атлична" справляется с проблемами кодировок. А уж как на поъем проста - так и говорить не приходится smile


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0986 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.