Чтение RSS каналов

Форум

Открыть Ответить

Ajax и кодировка текста после DB-запроса

5

5
1
21.07.2010 14:52:4821.07.2010 15:06:15
Привет всем, такая вот у меня проблемка...

Делаю редактирование текста на аяксе, по примеру как на форуме этого сайта (редактирование своего сообщения), только у меня - редактирование описания товара в интернет-магазине. Суть проста: DIV, в него заключено само описание, при нажатии "Редактировать", вызывается ajax-функция (перенаправление на php-функцию, в которой описание заново берется из бд), затем это описание появляется в теге textarea, и тд.. так вот - после того, как скрипт запросит из БД описание - все русские символы предстают как знаки вопроса. Кодировка сайта и базы - win1251. В чем дело?

картиночка - http://s002.radikal.ru/i200/1007/ac/bb3bcff70e13.jpg


Пробую:
$text = iconv("utf-8", "windows-1251", $text);


не помогает. Поле textarea появляется пустым.


Версия системы: SLAED CMS 2.6 Lite
Версия PHP: PHP 4
Сервер: Сервер в интернете
3.92

3.92
2
21.07.2010 15:18:08
Кажется, проблема решена.

Помогла строка:

$text = mb_convert_encoding($text, "utf-8", "windows-1251");
3.92

3.92
3
21.07.2010 17:42:2121.07.2010 17:44:13
Новая проблема... самая важная... Копаюсь тут полдня уже, а ничего не выходит. Не сохраняет она в базу данных!

Помогите чем можете, где ошибка?

Вот куски кода:

JS:



var ajax = new sack();

function WhenLoading(obj) {
var e = document.getElementById("rep"+obj);
e.innerHTML = "<center><img src=\"images/misc/loading.gif\"></center>";
}

function LoadPost(ld, obj) {
var form = document.getElementById("form"+obj);
ajax.setVar("go", form.go.value);
ajax.setVar("op", form.op.value);
ajax.setVar("id", form.id.value);
ajax.setVar("text", form.text.value);
ajax.requestFile = "ajax.php";
ajax.method = form.method.value;
ajax.element = "rep"+obj;
if (ld == '1') {
ajax.onLoading = WhenLoading(obj);
} else {
ajax.onLoading = "";
}
ajax.runAJAX();
}

function LoadGet(ld, obj, go, op, id, typ, mod, text) {
ajax.setVar("go", go);
ajax.setVar("op", op);
ajax.setVar("id", id);
ajax.setVar("typ", typ);
ajax.setVar("mod", mod);
ajax.setVar("text", text);
ajax.requestFile = "ajax.php";
ajax.method = "GET";
ajax.element = "rep"+obj;
if (ld == '1') {
ajax.onLoading = WhenLoading(obj);
} else {
ajax.onLoading = "";
}
ajax.runAJAX();
}



PHP:
function editpost() {
	global $db;

	$lid = (isset($_POST['id'])) ? ((isset($_POST['id'])) ? intval($_POST['id']) : "") : ((isset($_GET['id'])) ? intval($_GET['id']) : "");
	$obj = "for".$lid."";
	$go = 3;
	$op = "editpost";

	$result = $db->sql_query("SELECT lid, shortdescription from asershop_products where lid=$lid");
	list($lid, $text) = $db->sql_fetchrow($result);

	$text = mb_convert_encoding($text, "utf-8", "windows-1251");

	$code = "<form id=\"form".$obj."\" method=\"post\" action=\"ajax.php\">"
	."<input type=\"hidden\" name=\"method\" value=\"POST\">"
	."<input type=\"hidden\" id=\"go\" name=\"go\" value=\"".$go."\">"
	."<input type=\"hidden\" id=\"op\" name=\"op\" value=\"editpost\">"
	."<input type=\"hidden\" id=\"id\" name=\"id\" value=\"".$lid."\">"
	."<textarea id=\"text\" name=\"text\" cols=\"65\" rows=\"20\">".$text."</textarea>"
	."<div style=\"clear: both;\"><input type=\"submit\" value=\"".mb_convert_encoding(Применить, "utf-8", "windows-1251")."\" OnClick=\"LoadPost('1', '".$obj."'); return false;\" OnDblClick=\"LoadPost('1', '".$obj."'); return false;\" title=\"".mb_convert_encoding(Применить, "utf-8", "windows-1251")."\" class=\"ebutton\"></form>"
	
	."<input type=\"submit\" value=\"".mb_convert_encoding(Отмена, "utf-8", "windows-1251")."\" OnClick=\"LoadGet('1', '".$obj."', '".$go."', 'showpost', '".$lid."', '".$typ."', '".$mod."', ''); return false;\" OnDblClick=\"LoadGet('1', '".$obj."', '".$go."', 'showpost', '".$lid."', '".$typ."', '".$mod."', ''); return false;\" title=\"".mb_convert_encoding(Отмена, "utf-8", "windows-1251")."\" class=\"bbutton\"></div>";
echo $code;


	$db->sql_query("UPDATE asershop_products SET shortdescription='$text' WHERE lid='$lid'");
}


Версия системы: SLAED CMS 2.6 Lite
Версия PHP: PHP 4
Сервер: Сервер в интернете
3.92

3.92
4
21.07.2010 17:59:0521.07.2010 18:00:25
Вот то что в конце - $db->sql_query("UPDATE.... - если эту строку не убрать, то даже если просто кликнуть по кнопке "редактировать", и обновить страницу, вместо читаемого текста появятся крякозябры (То есть в базе всё таки значение поля shortdescription будет перезаписано). Причем в поле можно писать любые символы, латиницу, цифры, без разницы, всё равно будут крякозыбры, которые запишутся в базу, и с каждым сохранением их будет становится больше, независимо от того, что я ввел например английские слова, то есть скрипт как то своей жизнью будет жить чтоли)
3.92

3.92
5
21.07.2010 18:48:0021.07.2010 18:56:31
Goshan, аякс всегда работает на utf-8, следовательно текст после вывода через аякс и до записи в БД нужно конвертировать в win-1251.
Чтобы говорить конкретно где и когда конвертировать кодировки, нужно работать с Вашим скриптом, но в любом случае дело только в них...
Идеальный вариант, это когда текст конвертируется перед выводом через Аякс в utf-8, после обработки происходит обратная конвертация в win-1251 и так далее.
Попробуйте перед textarea сделать принудительную конвертацию:
Header("Content-Type: text/html; charset=windows-1251");
3.97

3.97
6
21.07.2010 18:59:1421.07.2010 19:14:46
Думаете, в бд не записывается из-за кодировки? А ошибки в моем коде есть? Я вроде всё приложил, что использую. Т.к. я не шарю в аяксе впринципе, ошибки там по-любому есть.
3.92

3.92
7
21.07.2010 19:05:3321.07.2010 19:09:44
В БД не записывается? Нет, кодировка при записи в БД не при чем, в БД без разницы что записывать, если это текстовое поле.
Нужно копаться в скрипте, пробовать, посмотрю попозже, пока нет времени...
ps: Вы посмотрите напрямую в таблицу, записывается что-то или нет вообще...
3.97

3.97
8
21.07.2010 19:16:24
напрямую по моему тоже не сохраняет, если имеется ввиду сделать через ajax.php?lid=303&op=editpost бла бла...
3.92

3.92
9
23.07.2010 23:13:02
GRAFLEKX, не появилось ли у вас каких-либо мыслей? Смайл - 17

Вопрос еще весьма актуален, никак не удается вникнуть до конца в суть аякс-машины )))))
3.92

3.92
10
24.07.2010 13:26:1825.07.2010 20:35:39
Goshan, Вы бы скинули целиком весь модуль со всеми его файлами, базой и Вашими исправлениями, его надо тестировать в локали, а из двух кусков, которые Вы выложили в этом посте, ни чего рабочего не соберешь, самому воссоздать окружение модуля не реально.

Можете скинуть мне на graf76[собака]yandex.ru?
3.97

3.97
Открыть Ответить
Хотите опробовать SLAED CMS в действии?

Технологии

PHP MySQL HTML 5 CSS 3 jQuery jQuery UI

Контакты

  • D-49179, Deutschland
    Ostercappeln, Im Siek 6
  • +49 176 61966679

  • https://slaed.net
Идеи и предложения
Обратная связь