Простая форма HTML с проблемой кодирования функции POST to SQL? - PullRequest
1 голос
/ 06 июня 2010

У меня есть простая HTML-форма, которая отправляет информацию с помощью функции POST. Но когда информация содержит символы кириллицы, в таблице в MySql вместо текста появляются символы «Ð ° Ð ·Ð» Ð ° Ð · Ð ° Таблица находится на utf-8_general_ci, сайт на кодировке UTF-8. Я визуализирую результат из этой таблицы с

$query = "
  SELECT ".$db->nameQuote('ingredients')."
    FROM ".$db->nameQuote('other')."
    ORDER by id DESC
  ";
$db->setQuery($query);
$ingredients = $db->loadResult();

Я не могу понять, как заставить форму отправлять кириллические символы правильно. Или где проблема вообще? Как правильно подобрать этих персонажей? Или как их правильно отправить?

----------------- EDIT -----------------------

Я не мог понять, куда положить

mysql_query("SET CHARACTER SET utf8"); mysql_query("SET NAMES utf8");

Итак, я вставляю свой код здесь. Сначала простая форма:

<form action="insert.php" method="post" onsubmit="return checkForm(this)" target="_top">
<table>

<tr>
<td colspan="2">
<ul>
<li> Добавете необходимите за рецептата съставки</li>
<li> Моля попълнете всички полета коректно</li>
<li> Полетата маркирани с (*) са задължителни</li>
</ul>
</td>
</tr>

<tr>
<td>
Количество (порции)*: 
</td>
<td>
<input type="text" name="quantity" />
</td>
</tr>

<tr>
<td>
Съставки*: 
</td>
<td>
<input type="text" name="ingredients" />
</td>
</tr>

<tr>
<td>
Време за приготвяне*:
</td>
<td>
<input type="text" name="timing" /><br />
</td>
</tr>

<tr>
<td></td>
<td>
<input type="submit" value="Напред" class="button validate" />
</td>
</tr>
</table>
</form>

И синтаксис извлечения внутри моего файла insert.php:

$query = "
  SELECT ".$db->nameQuote('quantity')."
    FROM ".$db->nameQuote('other')."
    ORDER by id DESC

  ";
$db->setQuery($query);
$quantity = $db->loadResult();

$query = "
  SELECT ".$db->nameQuote('ingredients')."
    FROM ".$db->nameQuote('other')."
    ORDER by id DESC
  ";
$db->setQuery($query);
$ingredients = $db->loadResult();

$query = "
  SELECT ".$db->nameQuote('timing')."
    FROM ".$db->nameQuote('other')."
    ORDER by id DESC
  ";
$db->setQuery($query);
$timing = $db->loadResult();

Ответы [ 5 ]

1 голос
/ 07 июня 2010

Попробуйте установить словосочетание?

 mysql_query("SET CHARACTER SET utf8");
 mysql_query("SET NAMES utf8");
0 голосов
/ 07 июня 2010

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

0 голосов
/ 07 июня 2010

Вы должны поместить только один запрос, SET NAMES один, в ваш класс $ db, сразу после оператора select db. используя не функцию mysql_query (), а функцию, которую вы используете для выполнения всех других запросов.

Вы можете опубликовать здесь оператор connect, используемый в вашем классе БД?

0 голосов
/ 07 июня 2010

Дважды проверьте вашу базу данных. Я использовал сопоставление utf8_unicode_ci для русского, эстонского (умлауты) и т. Д. И убедился, что формы также публикуются в UTF-8, без проблем.

И если вы храните несколько многобайтовых UTF-8-компонентов в PHP, лучше всего убедиться, что внутренняя кодировка PHP также подходит:

mb_internal_encoding("UTF-8");
mb_http_output("UTF-8");
ob_start("mb_output_handler");

И да, как ребята заявили здесь, я также использую

@mysql_query("SET NAMES 'utf8'");

в классе базы данных условно для MySQL 4.x , но не для MySQL 5. Там отлично работает, об ошибке сообщалось для 4.1, если я правильно помню.

0 голосов
/ 07 июня 2010

азазаза появляется потому, что вы интерпретируете поток UTF-8, содержащий азазаза, как ISO-8859-1. Убедитесь, что вы установили кодировку клиента в UTF-8, чтобы база данных знала, что вы отправляете ей поток UTF-8.

Выдайте выписку

SET NAMES UTF8
...