Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: POST-форма присылает в БД иероглифы.
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » POST-форма присылает в БД иероглифы.

Страниц (2): [1] 2 »
 

1. metra - 13 Января, 2011 - 19:33:27 - перейти к сообщению
В общем есть страница с формой:

CODE (html):
скопировать код в буфер обмена
  1. <form action='add_content.php' method='post'>
  2. Page URL <input type='text' size='30' name='page_url'>
  3. Page title <input type='text' size='60' name='page_title'><br>
  4. <textarea name="editor" id="editor"></textarea>
  5. <input type='submit' value='Add page'></form>"


В поля вводятся русские буквы.
Содержание обработчика формы add_content.php:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         include "mysql_config.php";
  3.         include "login_protect.php";
  4.         if(isset($_SESSION['access_level']) and $_SESSION['access_level'] == 1)
  5.         {
  6.                 mysql_connect($host, $user, $password);
  7.                 mysql_select_db($db);
  8.                
  9.                 $page_url = mysql_real_escape_string($_POST['page_url']);
  10.                 $title = mysql_real_escape_string($_POST['page_title']);
  11.                 $content = mysql_real_escape_string($_POST['editor']);
  12.                 $query = "INSERT INTO `DataBase`.`pages`(`title`, `content`, `page_url`, `access_level_req`) VALUES('".$title."', '".$content."', '".$page_url."', '2');";
  13.                 mysql_query($query);
  14.                
  15.                 $_SESSION['msg'] = "Page was added.";
  16.                 Header("Location: http://site.pro");
  17.         } else
  18.         {
  19.                 $_SESSION['msg'] = "Access is denied.";
  20.                 Header("Location: http://site.pro");
  21.         }
  22. ?>


Текст в БД вставляется видимо в непонятной кодировке, ибо ставил для БД кодировку и utf8 и cp1251. С помощью запросов, и в phpMyAdmin. Т.е. и в phpMyAdmin и при выводе на страницу иероглифы вида "ывпаывдацал ьцвл СЊ".
Важно: если зайти через phpMyAdmin в запись таблицы и уже там ввести значения полей на русском - все нормально отображается. Соответственно я сделал вывод, что POST-запрос присылает в непонятной кодировке.

P.S.: site.pro из кода - пример)
2. SAD - 13 Января, 2011 - 19:38:03 - перейти к сообщению
приходящие данные перекодируйте с помощью
из utf-8 в cp1251
3. metra - 13 Января, 2011 - 19:40:19 - перейти к сообщению
1. SAD, спасибо, неужели без этой функции не обходится ни один скрипт занесения текстовых данный на русском языке в базу данных в мире? Улыбка

2. POST в какой кодировке отсылает всегда?
4. SAD - 13 Января, 2011 - 19:59:45 - перейти к сообщению
metra пишет:
2. POST в какой кодировке отсылает всегда?

какая кодировка страницы
5. metra - 13 Января, 2011 - 20:01:21 - перейти к сообщению
Ставлю в meta UTF-8.
Когда сохраняю страницу UTF-8 без BOM.
6. SAD - 13 Января, 2011 - 20:02:40 - перейти к сообщению
ну вот тогда нужно как раз и конвертить как я сказал
7. metra - 13 Января, 2011 - 20:07:38 - перейти к сообщению
Объясните мне пожалуйста.

Страница в UTF-8, соответственно форма отправляет данные в той же кодировке. Они приходят скрипту в переменные, которые потом используются для вставки в базу данных, которая опять же в urf8_general_ci.
В составе utf8 есть кириллица.

1. Почему при вставке urf8-данных в utf8_general_ci-базу они отображаются иероглифами, а не кириллицей, которая есть в составе кодировки.
2. Зачем кодировать данные в cp1521?
Мне очень важно понять этот внутренний механизм.
8. Саныч - 13 Января, 2011 - 22:40:32 - перейти к сообщению
Дело не в том, в какой кодировке у вас ячейка в базе (хотя в этом тоже, но не самое главное), а в том, в какой кодировке БД "общается" с вами...
пропишите эти строки сразу после подключения к базе
PHP:
скопировать код в буфер обмена
  1. mysql_query('set character_set_client="utf8"');
  2. mysql_query('set character_set_results="utf8"');

должно все быть нормально
9. metra - 14 Января, 2011 - 07:19:51 - перейти к сообщению
Саныч, это единовременно нужно сделать (т.е. в моем случае это нужно прописать в файл install.php, в котором идет создание таблиц и т.п.) или при каждом коннекте?

P.S.: заработало. Без iconv.
10. evgenijj - 15 Января, 2011 - 00:19:52 - перейти к сообщению
metra пишет:
при каждом коннекте

При каждом коннекте
Этими строчками мы сообщаем БД: все данные, которые надо вставить -- в UTF-8, все данные, которые я жду от БД -- должны быть в UTF-8
11. metra - 15 Января, 2011 - 08:24:30 - перейти к сообщению
evgenijj, то есть получается данные операции действуют в рамках mysql_connect и mysql_close (либо по факту завершения работы скрипта - там mysql_close сам вызывается)?
12. SovaBarmak - 23 Января, 2011 - 12:38:35 - перейти к сообщению
У меня та же проблема что и у автора темы, сделал так как сказал Саныч. Теперь вообще жесть) в базу приходят знаки вопроса и на сайт выводятся знаки вопроса. Это если создавать новые данные, а старые на сайте теперь не на русском, а в тех иероглифах что и в базе. Может это как-то связано с тем что хостинг американский?

такие старые: выавыавыа
выаыаывавыа
выа.

З.Ы. Всем спасибо, но помогло прописать так

mysql_query("SET character_set_results='utf8'");
mysql_query("SET NAMES 'utf8'");
13. forward - 17 Марта, 2011 - 23:05:50 - перейти к сообщению
У меня проблема похожая, но описанные здесь методы не помогли решить проблему.
Суть проблемы:
1. Есть html-форма (кодировка файла и заголовок HTML = utf-8), которая отправляет данные в php-скрипт (кодировка файла utf-8)
2. php-скрипт подключается к базе данных MySQL, используя команды:
mysql_query('set character_set_client="utf8"');
mysql_query('set character_set_results="utf8"');
mysql_query('set collation_connection="utf8_general_ci"');
3. php-скрипт вставляет данные в БД (БД создана в utf8_general_ci, таблица создана с DEFAULT CHARSET=utf8)
4. Символы сохраняются в таблице в виде знака ?
P.S. Данными является текст из китайских иероглифов (кириллицу и латынь сохраняет корректно). Плюс если вставлять запись через PhpMyAdmin, то иероглифы сохраняются корректно. А также выборка из БД с уже сохранёнными данными из иероглифов и дальнейшее отображение в браузере происходит корректно. Тестировал на Денвере, у которого в httpd.conf также указал кодировку utf8.

Люди добрые, помогите решить вопрос со вставкой иероглифов из php-скрипта в БД MySQL.
14. STTR - 20 Марта, 2011 - 05:12:32 - перейти к сообщению
Тут все и сразу ...
http://www[dot]herongyang[dot]com/PHP-Chinese/index[dot]html

Забавные работающие рецепты на UTF-8
http://www[dot]herongyang[dot]com/PHP-Ch[dot][dot][dot]MySQL-UTF-8[dot]html
http://www[dot]herongyang[dot]com/PHP-Ch[dot][dot][dot]ng-Literals[dot]html
http://www[dot]herongyang[dot]com/PHP-Ch[dot][dot][dot]o-Web-UTF-8[dot]html

О том, что надо использовать ucs, ucs2, utf16
http://www[dot]cl[dot]cam[dot]ac[dot]uk/~mgk25/unicode[dot]html

http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]-connection[dot]html
gb2312 ... ну и о том, что utf-8 для китайского некоректен)
15. mmmoi09 - 15 Июля, 2012 - 22:52:55 - перейти к сообщению
<form action='add_content.php' method='post'>
Page URL <input type='text' size='30' name='page_url'>
Page title <input type='text' size='60' name='page_title'><br>
<textarea name="editor" id="editor"></textarea>
<input type='submit' value='Add page'></form>"

 

Powered by ExBB FM 1.0 RC1