Показать сообщение отдельно
Старый 25.07.2011, 15:05
#1
Любитель
 
Пол: Мужской
Адрес: Киев
Инвестирую в: Свой бизнес
Регистрация: 15.05.2007
Сообщений: 796
Благодарностей: 87
Проблема с кодировкой при выполнении фунции insert

Как я успел убедить - это длвольно распространенная проблема, но решения так и не нашел! Суть в том, что на определенной странице вызывается файл comment.php cо следующим кодом:
PHP код:
<? require_once 'blocks/commetsbd.php';

$sql = "
        SELECT id, parent_id, name, comment, website, avatar,
        DATE_FORMAT(date_add, '%d %M %Y %H:%i') as date_add
        FROM commets";

$query = mysql_query($sql);

while($row = mysql_fetch_assoc($query))
{
    $data[$row[id]] = $row; 
}

function mapTree($dataset) {
    $tree = array(); 
    
    
    foreach ($dataset as $id=>&$node) {    
        if (!$node['parent_id']) {
            $tree[$id] = &$node;
        } else { 
        
            $dataset[$node['parent_id']]['childs'][$id] = &$node; //
             
        }
    }

    return $tree;
}  


 
function commentsToTemplate($comment)
{
 
    ob_start();  
      

        include 'comment_template.php';                     
    
    $comments_string =  ob_get_contents();
    ob_end_clean(); 
    
    return $comments_string;
   

   
function commentsString($data)
     {
        foreach($data as $w) 
        {
         $string .= commentsToTemplate($w);
         }
         
        return $string; 
     } 
           
$data = mapTree($data);
$comments = commentsString($data);
$data = null;
 


?>
И вызываемый из ява скрипта файл, который вставляет введенную информацию в БД с таким кодом:
PHP код:
<?php

      
      sleep
(1); // Установим задержку выполнения в 3с, только для того, чтобы увидеть в браузере картинку лоадера при отправке данных))   
      
      
      
if($_POST[parent_id])  $parent_id preg_replace('/\D+/i',''$_POST[parent_id]);
      else 
$parent_id 0;        
           
      
$author trim($_POST[author]);
      
$comment trim($_POST[comment]);
      
$ava trim($_POST[ava]);
      
$web trim($_POST[web]);
      
      
/* Если имя или комментарий не заполнены, прервем выполнение скрипта и вернем массив 
      с ошибками преобразованный в строку формата JSON c сообщением об ошибке
      Мы не просто укажем js-скрипту, что у нас возникла ошибка, но также передадим сообщение и имя поля,
      которое не заполнено (или заполнено неверно, если вы решите реализовать доп. проверку)
      Конечно, можно реализовать проверку на строне клиента и не позволять человеку вообще отправлять 
      незаполненную форму, но проверка на стороне сервера обязательна */
      
      
if(!$author)   $error[author] = Please type your name!';
      if(!$comment)  $error[comment] = '
Please type your comment!';
      
  
      
      // Сохраняем данные в БД
      
      require_once '
blocks/commetsbd.php';  
            $sql = "INSERT INTO commets (parent_id, name, comment,  website, avatar, date_add) VALUES ($parent_id, '
$author', '$comment', '$web', '$ava', NOW())";
      
      $result = mysql_query($sql);
      if(!$result) 
      {
        $error[] = '
Error';
        exit(json_encode($error));
      }
      exit();

 

?>
Но при вставке в БД все передается в иероглифах, хотя везде кодировка стоит cp1251, когда на странице, которая делает вывод из базы ставишь utf8 - текст выводится нормально, а вот все остальное иероглифами!

Помогите исправить проблему так, чтоб не менять всю кодировку на utf8/
OrlandO вне форума
Перейти в тему этого сообщения: Проблема с кодировкой при выполнении фунции insert