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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: POST-форма присылает в БД иероглифы.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Гуглил, юзал поиск - не смог найти решения данной проблемы.
metra
Отправлено: 13 Января, 2011 - 19:33:27
Post Id



Гость


Покинул форум
Сообщений всего: 85
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




В общем есть страница с формой:

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 из кода - пример)

(Отредактировано автором: 13 Января, 2011 - 19:34:19)

 
 Top
SAD Модератор
Отправлено: 13 Января, 2011 - 19:38:03
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




приходящие данные перекодируйте с помощью
из utf-8 в cp1251
 
 Top
metra
Отправлено: 13 Января, 2011 - 19:40:19
Post Id



Гость


Покинул форум
Сообщений всего: 85
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




1. SAD, спасибо, неужели без этой функции не обходится ни один скрипт занесения текстовых данный на русском языке в базу данных в мире? Улыбка

2. POST в какой кодировке отсылает всегда?

(Отредактировано автором: 13 Января, 2011 - 19:40:48)

 
 Top
SAD Модератор
Отправлено: 13 Января, 2011 - 19:59:45
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




metra пишет:
2. POST в какой кодировке отсылает всегда?

какая кодировка страницы
 
 Top
metra
Отправлено: 13 Января, 2011 - 20:01:21
Post Id



Гость


Покинул форум
Сообщений всего: 85
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




Ставлю в meta UTF-8.
Когда сохраняю страницу UTF-8 без BOM.
 
 Top
SAD Модератор
Отправлено: 13 Января, 2011 - 20:02:40
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




ну вот тогда нужно как раз и конвертить как я сказал
 
 Top
metra
Отправлено: 13 Января, 2011 - 20:07:38
Post Id



Гость


Покинул форум
Сообщений всего: 85
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




Объясните мне пожалуйста.

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

1. Почему при вставке urf8-данных в utf8_general_ci-базу они отображаются иероглифами, а не кириллицей, которая есть в составе кодировки.
2. Зачем кодировать данные в cp1521?
Мне очень важно понять этот внутренний механизм.
 
 Top
Саныч
Отправлено: 13 Января, 2011 - 22:40:32
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Дело не в том, в какой кодировке у вас ячейка в базе (хотя в этом тоже, но не самое главное), а в том, в какой кодировке БД "общается" с вами...
пропишите эти строки сразу после подключения к базе
PHP:
скопировать код в буфер обмена
  1. mysql_query('set character_set_client="utf8"');
  2. mysql_query('set character_set_results="utf8"');

должно все быть нормально


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
metra
Отправлено: 14 Января, 2011 - 07:19:51
Post Id



Гость


Покинул форум
Сообщений всего: 85
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




Саныч, это единовременно нужно сделать (т.е. в моем случае это нужно прописать в файл install.php, в котором идет создание таблиц и т.п.) или при каждом коннекте?

P.S.: заработало. Без iconv.
 
 Top
evgenijj
Отправлено: 15 Января, 2011 - 00:19:52
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




metra пишет:
при каждом коннекте

При каждом коннекте
Этими строчками мы сообщаем БД: все данные, которые надо вставить -- в UTF-8, все данные, которые я жду от БД -- должны быть в UTF-8

(Отредактировано автором: 15 Января, 2011 - 00:21:51)

 
 Top
metra
Отправлено: 15 Января, 2011 - 08:24:30
Post Id



Гость


Покинул форум
Сообщений всего: 85
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




evgenijj, то есть получается данные операции действуют в рамках mysql_connect и mysql_close (либо по факту завершения работы скрипта - там mysql_close сам вызывается)?
 
 Top
SovaBarmak
Отправлено: 23 Января, 2011 - 12:38:35
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




У меня та же проблема что и у автора темы, сделал так как сказал Саныч. Теперь вообще жесть) в базу приходят знаки вопроса и на сайт выводятся знаки вопроса. Это если создавать новые данные, а старые на сайте теперь не на русском, а в тех иероглифах что и в базе. Может это как-то связано с тем что хостинг американский?

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

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

mysql_query("SET character_set_results='utf8'");
mysql_query("SET NAMES 'utf8'");

(Отредактировано автором: 23 Января, 2011 - 13:07:19)

 
 Top
forward
Отправлено: 17 Марта, 2011 - 23:05:50
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




У меня проблема похожая, но описанные здесь методы не помогли решить проблему.
Суть проблемы:
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.

(Отредактировано автором: 17 Марта, 2011 - 23:10:58)

 
 Top
STTR
Отправлено: 20 Марта, 2011 - 05:12:32
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




 
 Top
mmmoi09
Отправлено: 15 Июля, 2012 - 22:52:55
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




<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>"
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB