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 :: проблема с кодировкой php, mysql

 PHP.SU

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


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

> Без описания
ecSpl01t
Отправлено: 02 Мая, 2012 - 11:26:18
Post Id


Новичок


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


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




Здравствуйте. Я не знаю, выбрал ли я правильный раздел для задавания вопроса или нет....
я не знал куда еще можно было написать такой вопрос...
Ну вот и сам вопрос:

Проблема заключается в кодировке комментариев. Сайт сам по себе на кодировке cp1251, форма комментариев на utf8. Что-то я не знаю как правильно выразится, расскажу сам процесс...
То есть когда я добавляю заявку/комментарий он сразу показывает его в cp1251 без обновление страницы (скрин1- слева), после обновление страницы я вижу уже кодировку в utf8(скрин1-справа), если зайди в phpmyadmin после добавление комментария то мы увидим (скрин 2) иероглифы, не зависимо от кодировки.
Я так понял, что отправка комментария сама по себе кривая, отсылает из php в mysql в utf8.
Сам вопрос, как сделать так, чтобы отсылал в cp1251?

http://upyourpic[dot]org/images/2012[dot][dot][dot]4/px3e1tdt1a[dot]png -скрин1
http://upyourpic[dot]org/images/2012[dot][dot][dot]4/kjzdmhfrgr[dot]png -скрин2

comment.class.php
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?php  
  3. class Comment
  4. {
  5.         private $data = array();
  6.        
  7.         public function __construct($row)
  8.         {
  9.                 /*
  10.                 /       Конструктор
  11.                 */
  12.                
  13.                 $this->data = $row;
  14.         }
  15.        
  16.         public function markup()
  17.         {
  18.                 /*
  19.                 /       Данный метод выводит разметку XHTML для комментария
  20.                 */
  21.                
  22.                 // Устанавливаем псевдоним, чтобы не писать каждый раз $this->data:
  23.                 $d = &$this->data;
  24.                
  25.                 $link_open = '';
  26.                 $link_close = '';
  27.                
  28.                 if($d['url']){
  29.                        
  30.                         // Если был введн URL при добавлении комментария,
  31.                         // определяем открывающий и закрывающий теги ссылки
  32.                        
  33.                         //$link_open = '<a href="'.$d['url'].'">';
  34.                         //$link_close =  '</a>';
  35.                 }
  36.                 $sostav = '<b>СоставЫЫЫasdddd:</b>';
  37.                 // Преобразуем время в формат UNIX:
  38.                 $d['dt'] = strtotime($d['dt']);
  39.                
  40.                 // Нужно для установки изображения по умолчанию:
  41.                 $url = 'http://'.dirname($_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]).'/img/default_avatar.gif';
  42.                
  43.                 return '
  44.                
  45.                         <div class="comment">
  46.                                 <div class="avatar">
  47.                                         '.$link_open.'
  48.                                         <img src="http://cup.acantari.org.ua/images/default_avatar.gif" />
  49.                                         '.$link_close.'
  50.                                 </div>
  51.                                
  52.                                 <div class="name"><b>Название команды:</b> '.$link_open.$d['name'].$link_close.'</div>
  53.                                 <div class="sostav">'.$sostav.$link_open.$d['sostav'].$link_close.'</div><br>
  54.                                 <div class="contact"><b>Контакты:</b>'.$link_open.$d['contact'].$link_close.'</div>
  55.                                 <div class="date" title="Added at '.date('H:i \o\n d M Y',$d['dt']).'">'.date('d M Y',$d['dt']).'</div>
  56.                                 <p>'.$d['conntact'].'</p>
  57.                         </div>
  58.                 ';
  59.         }
  60.        
  61.         public static function validate(&$arr)
  62.         {
  63.                 /*
  64.                 /       Данный метод используется для проверки данных отправляемых через AJAX.
  65.                 /
  66.                 /       Он возвращает true/false в зависимости от правильности данных, и наполняет
  67.                 /       массив $arr, который преается как параметр либо данными либо сообщением об ошибке.
  68.                 */
  69.                
  70.                 $errors = array();
  71.                 $data   = array();
  72.                
  73.                 // Используем функцию filter_input, введенную в PHP 5.2.0
  74.                
  75.                 if(!($data['sostav'] = filter_input(INPUT_POST,'sostav',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
  76.                 {
  77.                         $errors['sostav'] = 'Пожалуйста, введите полный Состав.';
  78.                 }
  79.                 if(!($data['pravila'] = filter_input(INPUT_POST,'pravila',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
  80.                 {
  81.                         $errors['pravila'] = 'Пожалуйста, выберете да/нет.';
  82.                 }
  83.        
  84.                
  85.                 // Используем фильтр с возвратной функцией:
  86.                
  87.                 if(!($data['contact'] = filter_input(INPUT_POST,'contact',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
  88.                 {
  89.                         $errors['contact'] = 'Пожалуйста, введите контакты.';
  90.                 }
  91.                
  92.                 if(!($data['name'] = filter_input(INPUT_POST,'name',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
  93.                 {
  94.                         $errors['name'] = 'Пожалуйста, введите название команды.';
  95.                 }
  96.                
  97.                 if(!empty($errors)){
  98.                        
  99.                         // Если есть ошибки, копируем массив $errors в $arr:
  100.                        
  101.                         $arr = $errors;
  102.                         return false;
  103.                 }
  104.                
  105.                 // Если данные введены правильно, подчищаем данные и копируем их в $arr:
  106.                
  107.                 foreach($data as $k=>$v){
  108.                         $arr[$k] = mysql_real_escape_string($v);
  109.                 }
  110.                
  111.                 // email дожен быть в нижнем регистре:
  112.                
  113.                 $arr['sostav'] = strtolower(trim($arr['sostav']));
  114.                
  115.                 return true;
  116.                
  117.         }
  118.  
  119.         private static function validate_text($str)
  120.         {
  121.                 /*
  122.                 /       Данный метод используется как FILTER_CALLBACK
  123.                 */
  124.                
  125.                 if(mb_strlen($str)<1)
  126.                         return false;
  127.                
  128.                 // Кодируем все специальные символы html (<, >, ", & .. etc) и преобразуем
  129.                 // символ новой строки в тег <br>:
  130.                
  131.                
  132.                
  133.                 // Удаляем все оставщиеся символы новой строки
  134.                 $str = str_replace(array(chr(10),chr(13)),'',$str);
  135.                
  136.                 return $str;
  137.         }
  138.  
  139. }
  140.  
  141. ?>
  142.  


submit.php
CODE (text):
скопировать код в буфер обмена
  1. <?php
  2.  
  3. // Сообщение об ошибке:
  4. error_reporting(E_ALL^E_NOTICE);
  5.  
  6. include "connect.php";
  7. include "comment.class.php";
  8.  
  9. /*
  10. /       Данный массив будет наполняться либо данными,
  11. /       которые передаются в скрипт,
  12. /       либо сообщениями об ошибке.
  13. /*/
  14.  
  15. $arr = array();
  16. $validates = Comment::validate($arr);
  17.  
  18. if($validates)
  19. {
  20.         /* Все в порядке, вставляем данные в базу: */
  21.  
  22.         mysql_query("INSERT INTO comments(name,sostav,pravila,contact)
  23.                                         VALUES (
  24.                                                 '".$arr['name']."',
  25.                                                 '".$arr['sostav']."',
  26.                                                 '".$arr['pravila']."',
  27.                                                 '".$arr['contact']."'
  28.                                         )");
  29.        
  30.         $arr['dt'] = date('r',time());
  31.         $arr['id'] = mysql_insert_id();
  32.        
  33.         /*
  34.         /       Данные в $arr подготовлены для запроса mysql,
  35.         /       но нам нужно делать вывод на экран, поэтому
  36.         /       готовим все элементы в массиве:
  37.         /*/
  38.        
  39.         $arr = array_map('stripslashes',$arr);
  40.        
  41.         $insertedComment = new Comment($arr);
  42.  
  43.         /* Вывод разметки только-что вставленного комментария: */
  44.  
  45.         echo json_encode(array('status'=>1,'html'=>$insertedComment->markup()));
  46.  
  47. }
  48. else
  49. {
  50.         /* Вывод сообщений об ошибке */
  51.         echo '{"status":0,"errors":'.json_encode($arr).'}';
  52. }
  53.  
  54. ?>


connect.php
CODE (text):
скопировать код в буфер обмена
  1. <?php
  2.  
  3. /* Конфигурация базы данных */
  4.  
  5. $db_host                = 'localhost';
  6. $db_user                = 'root';
  7. $db_pass                = '************';
  8. $db_database    = 'fastcup';
  9.  
  10. /* Конец секции */
  11.  
  12.  
  13. $link = @mysql_connect($db_host,$db_user,$db_pass) or die('Не могу установить соединение с базой данных');
  14.  
  15. mysql_query ("set character_set_client='cp1251'");
  16. mysql_query ("set character_set_results='cp1251'");
  17. mysql_query ("set collation_connection='cp1251_general_ci'");  
  18. mysql_select_db($db_database,$link);
  19.  
  20. ?>
 
 Top
DeepVarvar Супермодератор
Отправлено: 02 Мая, 2012 - 11:33:55
Post Id



Активный участник


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


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




 
 Top
9xakep
Отправлено: 02 Мая, 2012 - 20:53:46
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Апр. 2012  


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




 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB