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 :: Версия для печати :: Неправильное отображение данных из базы
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Неправильное отображение данных из базы

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

1. D1mOn - 12 Февраля, 2008 - 11:53:19 - перейти к сообщению
Здарова всем!

Проблема вот в чём:
Когда я добавляю данные в базу, они добавляются туда, почему-то в виде HTML спецсимволов (пример &6433; типа того) и когда вывожу данные из базы они отображаются нормально на странице, но в коде страницы все равно отображаются эти спецсимволы ((( Как можно занести данные в нормальном виде, и чтобы они были везде нормального вида? Подскажите, пожалуйста. Тип поля ТЕКСТ, сравнение cp1251_ukrainian_ci
2. evgenijj - 12 Февраля, 2008 - 11:58:05 - перейти к сообщению
D1mOn пишет:
Когда я добавляю данные в базу

Какие данные? Откуда?
3. D1mOn - 12 Февраля, 2008 - 14:42:55 - перейти к сообщению
Создаю запрос на ПХП вида

CODE (text):
скопировать код в буфер обмена
  1.  
  2. mysql_query("insert into table (name,pop,enter_date) values ($name,$pop,$now)",$db);
  3.  


данные приходят из обычной формы.

И еще когда заношу в базу без проверки с htmlspecialchars(), при выводе выводит нормально, но с этой функцией выводит спецсимволы HTML ((((
4. evgenijj - 12 Февраля, 2008 - 14:55:54 - перейти к сообщению
D1mOn пишет:
данные приходят из обычной формы

Что приходит из формы? Есть подозрение, что для страницы неправильно указан charset. Поэтому приходят они в UNICODE.
D1mOn пишет:
И еще когда заношу в базу без проверки с htmlspecialchars(), при выводе выводит нормально, но с этой функцией выводит спецсимволы HTML

А с твоей точки зрения - зачем эта функция?
5. D1mOn - 12 Февраля, 2008 - 15:04:57 - перейти к сообщению
Кодировка у страницы такая
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

А про htmlspecialchars():
Почему она русские символы переводит в спецсимволы? И когда я вывожу все это чудо из базы на страничку получается белиберда вида &..... и т.д. ( Как мне решить эту проблемку? )
6. evgenijj - 12 Февраля, 2008 - 15:25:48 - перейти к сообщению
D1mOn пишет:

Почему она русские символы переводит в спецсимволы?

Она не русские символы переводит, а обрабатывает последовательности типа
& # 1040; & # 1041; & # 1042; & # 1043; - т.е. то, что и должна делать.

Цитата:
Кодировка у страницы такая
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

Это у страницы, содержащей форму?
7. valenok - 12 Февраля, 2008 - 17:17:33 - перейти к сообщению
ЧУДО Здесь
А потом скажете где именно проблема, а мы скажем как решить.
8. D1mOn - 13 Февраля, 2008 - 05:20:33 - перейти к сообщению
evgenijj

Да, это у страницы с формой.

Цитата:
Она не русские символы переводит, а обрабатывает последовательности типа
& # 1040; & # 1041; & # 1042; & # 1043; - т.е. то, что и должна делать.


Тогда что мне лучше использовать вместо этой функции? Или что исправить чтобы всей этой белиберды не было? Не могу же я без защиты давать юэерам записывать данные в базу!

valenok

Ошибок в скрипте нет, просто где-то что-то неправильно )
9. evgenijj - 13 Февраля, 2008 - 09:56:03 - перейти к сообщению
Думаю, проблема в следующем. В форму вводятся символы, которых нет в указанной для страницы кодировке. Поэтому все данные отсылаются на сервер в UNICODE. Если есть нужда вводить такие символы, то надо переходить на UTF-8.

Еще один вариант - Apache. Даже если мы приписали на странице
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
Apache может добавить в заголовок HTTP свое сообщение про кодировку (например, ISO-8859-1). Исправить это можно указав свою кодировку в файле .htaccess командой AddDefaultCharset.
10. valenok - 13 Февраля, 2008 - 12:38:54 - перейти к сообщению
Ошибка это когда чтото не так.
Так что найдите в каком именно месте чтото не так.
(Добавление)
Вообщем вы узнайте что приходит на сервер, а что он записывает в БД
а то похоже у вас 3 кодировки указаны разные.
11. Eihwaz - 13 Февраля, 2008 - 16:42:49 - перейти к сообщению
2D1mOn:
Если используете какую-то функцию, то хотя бы посмотрите, что она делает, и какие принимает параметры. Скорее всего то, что вы ищете это:

На http://www.php.net есть описание.
12. D1mOn - 14 Февраля, 2008 - 06:58:55 - перейти к сообщению
Спасиба всем!!!
Нашел решение. Код мне дали косячный. Написал сам и все заработало!

И еще вопросик)
Насколько этот код безопасен:

CODE (text):
скопировать код в буфер обмена
  1.  
  2. $server_name='localhost';
  3. $user_name='root';
  4. $user_password='';
  5. $db_name='database';
  6.  
  7. $db = mysql_connect($server_name,$user_name,$user_password);
  8. $res = mysql_select_db($db_name,$db);
  9.  
  10. mysql_query ("set character_set_client='cp1251'");
  11. mysql_query ("set character_set_results='cp1251'");
  12. mysql_query ("set collation_connection='cp1251_general_ci'");
  13.  
  14. $name = htmlspecialchars($name, ENT_QUOTES, "cp1251");
  15. $text = nl2br(htmlspecialchars($text, ENT_QUOTES, "cp1251"));
  16.  
  17. $now=date('Y-m-d H:i:s',mktime(gmdate('H')+10,gmdate('i'),gmdate('s'),gmdate('m'),gmdate('d'),gmdate('Y')));
  18.  
  19. mysql_query("insert into table (name,text,pop,enter_date) values ('$name','$text',0,'$now')", $db);
  20.  
  21.  
?
(Добавление)
И еще малюсенький вопросик )

В phpMyAdmin мне пишет:

Цитата:

Директива $cfg['PmaAbsoluteUri'] должна быть установлена в Вашем конфигурационном файле!
Ваш конфигурационный файл содержит настройки (пользователь root без пароля), которые относятся к привилегированному пользователю MySQL (по умолчанию). Ваш MySQL сервер запущен с этими настройками по умолчанию, открытый для вторжений, поэтому Вам настоятельно рекомендуется устранить эту дыру в безопасности.
The mbstring PHP extension was not found and you seem to be using multibyte charset. Without mbstring extension phpMyAdmin is unable to split strings correctly and it may result in unexpected results.


Чтобы это значило?
13. evgenijj - 14 Февраля, 2008 - 08:43:16 - перейти к сообщению
D1mOn пишет:
Нашел решение.

Ты бы написал, в чем проблема была. Откуда брались испорченные данные? А то тема на две страницы - а полезной информации ноль.

D1mOn пишет:
Директива $cfg['PmaAbsoluteUri'] должна быть установлена в Вашем конфигурационном файле!

В файле libraries/config.default.php заменить строку
$cfg['PmaAbsoluteUri'] = '';
на
$cfg['PmaAbsoluteUri'] = 'http://myserver.com/phpmyadmin/';

D1mOn пишет:
Ваш конфигурационный файл содержит настройки (пользователь root без пароля)

Ты работаешь с сервером БД от имени пользователя root и без пароля. Надо создать еще одного пользователя и назначить ему необходимые права для работы с БД. Кратко смысл в следующем. При установке MySQL создается БД mysql. Эта БД содержит таблицы user и host. В таблице host указаны хосты, с которых можно соединяться с сервером БД, а в таблице user - пользователи, которые могут соединяться с этих хостов.

В phpMyAdmin имя и пароль пользователя задаются директивами
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';
в файле libraries/config.default.php

Вообще, в последних версиях phpMyAdmin два файла конфигурации:
libraries/config.default.php - содержит настройки по умолчанию
config.inc.php - переопределяет настройки по умолчанию
14. D1mOn - 14 Февраля, 2008 - 10:39:06 - перейти к сообщению
Вот вам исходник этого скрипта.
Качайте и смотрите
15. evgenijj - 14 Февраля, 2008 - 11:48:09 - перейти к сообщению
Долбануть бы тебя чем-нибудь тяжелым по башке, чтобы голову людям не морочил:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.   // библиотека перекодировки текста
  3.   function unicode ($s) { if ( (ord($s)>=192) & (ord($s)<=255) ) $hexvalue=dechex(ord($s)+848); if ($s=="Ё") $hexvalue="401"; if ($s=="ё") $hexvalue="451"; return("&#x0".$hexvalue.";");}
  4.   function utf_encode ($s) { return(preg_replace("/[А-яЁё]/e","unicode('\\0')",$s));}
  5. ?>

 

Powered by ExBB FM 1.0 RC1