ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

PHP & MySQL проблем енкодинга
  #1  
Старый 21.04.2010, 15:48
Аватар для ^_WhitE_DeMoN_^
^_WhitE_DeMoN_^
Познающий
Регистрация: 01.03.2009
Сообщений: 85
Провел на форуме:
272527

Репутация: 19
Question PHP & MySQL проблем енкодинга

Юзаю Mihalism Multi Forum Host + phpBB 3.0.7-PL1, пытаюсь передать базе (MySQL, COLLATE=utf8_bin) данныe на кириллице, но как не крути (енкодинг базы и файлов) - всегда вылазят йероглифы

Подозирою что виноваты скрипты работы с базой...
Но знаний по MySQL не хватает.

database.php:
PHP код:
<?php

    
class mfhclass_mysql_driver
    
{
        function 
connect($host "localhost"$username$password$database$new_link NULL)
        {
            global 
$mfhclass;
            
$connection_id mysql_connect($host$username$passwordtrue);
            
            if (
is_resource($connection_id) == false) {
                
$this->error();
            } else {
                if (
mysql_select_db($database$connection_id) == false) {
                    
$this->error();
                } else {
                    if (
is_resource($this->root_connection) == false) {
                        
$this->root_connection $connection_id;
                    } else {
                        if (
$mfhclass->funcs->is_null($new_link) == false) {
                            if (
is_array($this->alt_connections) == true) {
                                
$this->alt_connections = array();
                            }
                            
$this->alt_connections[$new_link] = $connection_id;
                        }
                    }
                }
            }
            
            return 
$connection_id;
        }

        function 
close()
        {
            if (
is_resource($this->root_connection) == true) {
                
mysql_close($this->root_connection);
            }
            
            if (
is_array($this->alt_connections) == true) {
                foreach (
$this->alt_connections as $id => $connection) {
                    
mysql_close($this->alt_connections[$id]);
                }
            }
        }
            
        function 
set_database_connection($database_id 1) {
            global 
$mfhclass;
            if (
$database_id != && $mfhclass->funcs->is_null($database_id) == false) {
                
$database_info $this->fetch_array($this->query("SELECT * FROM `mfh_forum_databases` WHERE `database_id` = '{$database_id}';"));
                
$this->connect($database_info['sql_host'], $database_info['sql_username'], $database_info['sql_password'], $database_info['sql_database'], $database_info['database_id']);
            }
        }

        function 
query($query$connection_id NULL)
        {
            global 
$mfhclass;
            if (
is_resource($this->root_connection) == false) {
                
$this->connect($mfhclass->info->config['sql_host'], $mfhclass->info->config['sql_username'], $mfhclass->info->config['sql_password'], $mfhclass->info->config['sql_database']);
            }
            
            
$query str_replace("<# QUERY_LIMIT #>", ((($mfhclass->info->current_page $mfhclass->info->config['max_results']) - $mfhclass->info->config['max_results']).", {$mfhclass->info->config['max_results']}"), $query);
            if (
$mfhclass->info->config['sql_tbl_prefix'] != "mmh_" && $mfhclass->funcs->is_null($mfhclass->info->config['sql_tbl_prefix']) == false){
                
$query preg_replace("/mmh_(\S+?)([\s\.,]|$)/", ($mfhclass->info->config['sql_tbl_prefix']."\\1\\2"), $query);
            }
            
            if (
$mfhclass->funcs->is_null($connection_id) == false && $connection_id != 1) {
                
$this->set_database_connection($connection_id);
                if (
is_resource($this->alt_connections[$connection_id]) == false) {
                    
$this->error($query"Unknown alternate connection id: {$connection_id}");
                }
            }
            
            
$this->query_result mysql_query($query, (($mfhclass->funcs->is_null($connection_id) == false && $connection_id != 1) ? $this->alt_connections[$connection_id] : $this->root_connection));

            if (
$this->query_result == false) {
                
$this->error($query);
            } else {
                return 
$this->query_result;
            }
        }

        function 
total_rows($query_id)
        {
            return 
mysql_num_rows($query_id);
        }

        function 
fetch_array($query_id$result_type MYSQL_ASSOC)
        {
            return 
mysql_fetch_array($query_id$result_type);
        }

        function 
error_number()
        {
            global 
$mfhclass;
            return ((
$mfhclass->funcs->is_null(mysql_error()) == false) ? mysql_errno() : "Unknown Error Number");
        }

        function 
error($query "No Query Executed"$custom_error NULL)
        {
            global 
$mfhclass;
            
$error_message = (($mfhclass->funcs->is_null($custom_error) == false) ? $custom_error mysql_error());
            
$error_html "\t\t\t<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">
            <html>
                <head>
                    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />
                    <title>MySQL Error</title>
                    <style type=\"text/css\">
                            * { font-size: 100%; margin: 0; padding: 0; }
                        body { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 75%; margin: 10px; background: #FFFFFF; color: #000000; }
                        a:link, a:visited { text-decoration: none; color: #005fa9; background-color: transparent; }
                        a:active, a:hover { text-decoration: underline; }                        
                        textarea { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; border: 1px dashed #000000; background: #FFFFFF; padding: 5px; background: #f4f4f4; }
                    </style>
                </head>
                <body>
                    <p>
                        <b>MySQL Driver Error</b>
                        <br /><br />
                        A MySQL error has occurred. 
                        Please copy the output shown below and email it immediately to <a href=\"mailto:
{$mfhclass->input->server_vars['server_admin']}\">{$mfhclass->input->server_vars['server_admin']}</a>.
                        <br /><br />
                        <textarea readonly=\"readonly\" rows=\"15\" cols=\"40\" style=\"width:500px;\">Time Encountered: "
.date("F j, Y, g:i:s a")."\nIP Address: {$mfhclass->input->server_vars['remote_addr']}\rError: {$error_message}\nError Number: ".$this->error_number()."\nQuery Executed: {$query}</textarea>
                    </p>        
                </body>
            </html>"
;
            exit(
$error_html);
            return;
        }
    }

?>
и часть от install_queries.php (импортируемые данные в ДБ):

PHP код:
<?php
    
...
    
    
$mfhclass->db->install_queries[] = "DROP TABLE IF EXISTS `{$mfhclass->input->post_vars['access_name']}_acl_groups`;";

...

    
$mfhclass->db->install_queries[] = "CREATE TABLE `{$mfhclass->input->post_vars['access_name']}_acl_groups` (
      `group_id` mediumint(8) unsigned NOT NULL default '0',
      `forum_id` mediumint(8) unsigned NOT NULL default '0',
      `auth_option_id` mediumint(8) unsigned NOT NULL default '0',
      `auth_role_id` mediumint(8) unsigned NOT NULL default '0',
      `auth_setting` tinyint(2) NOT NULL default '0',
      KEY `group_id` (`group_id`),
      KEY `auth_opt_id` (`auth_option_id`),
      KEY `auth_role_id` (`auth_role_id`)
    ) CHARACTER SET `utf8` COLLATE `utf8_bin`
      ENGINE=MyISAM ;"
;

    
$mfhclass->db->install_queries[] = "INSERT INTO `{$mfhclass->input->post_vars['access_name']}_acl_groups` (`group_id`, `forum_id`, `auth_option_id`, `auth_role_id`, `auth_setting`) VALUES (1, 0, 85, 0, 1);";

...

?>
Если в VALUES есть кириллица - она записывается йероглифами...

Спасибо что прочли до конца =) Сейчас - ПОМОГИТЕ !
 
Ответить с цитированием

  #2  
Старый 21.04.2010, 15:50
Аватар для Byte_
Byte_
Участник форума
Регистрация: 07.09.2008
Сообщений: 139
Провел на форуме:
351188

Репутация: 65
По умолчанию

честно говоря читать весь код не стал, просто была проблема с кодировкой в связке phpbb3 и самописного скрипта, решил с помощью iconv результат запроса из базы.
 
Ответить с цитированием

  #3  
Старый 21.04.2010, 15:51
Аватар для ZnikiR
ZnikiR
Участник форума
Регистрация: 14.01.2009
Сообщений: 194
Провел на форуме:
798217

Репутация: 44
Отправить сообщение для ZnikiR с помощью ICQ
По умолчанию

1 попробуй в самом документе
PHP код:
<?php
header
("Content-Type: text/html; charset=utf-8"); 
?>
+
перед перед записью в бд (я делаю при конекте)
выполни запрос
$query= "SET NAMES utf8";
$result = mysql_query($query) or die("Query failed : " . mysql_error());

Обязательно отпишись

Последний раз редактировалось ZnikiR; 21.04.2010 в 15:54..
 
Ответить с цитированием

  #4  
Старый 21.04.2010, 16:31
Аватар для ^_WhitE_DeMoN_^
^_WhitE_DeMoN_^
Познающий
Регистрация: 01.03.2009
Сообщений: 85
Провел на форуме:
272527

Репутация: 19
По умолчанию

Цитата:
Сообщение от Byte_  
честно говоря читать весь код не стал, просто была проблема с кодировкой в связке phpbb3 и самописного скрипта, решил с помощью iconv результат запроса из базы.
Насколько знаю - лишняя нагрузка на сервер...
Но опять вариант, хоть корявый
 
Ответить с цитированием

  #5  
Старый 21.04.2010, 17:33
Аватар для ^_WhitE_DeMoN_^
^_WhitE_DeMoN_^
Познающий
Регистрация: 01.03.2009
Сообщений: 85
Провел на форуме:
272527

Репутация: 19
По умолчанию

Помоему решил проблем (еще тестирую)

database.php
PHP код:
...
        function 
connect($host "localhost"$username$password$database$new_link NULL)
        {
            global 
$mfhclass;
            
$connection_id mysql_connect($host$username$passwordtrue);
            
            if (
is_resource($connection_id) == false) {
                
$this->error();
            } else {
                if (
mysql_select_db($database$connection_id) == false) {
                    
$this->error();
                } else {
                    @
mysql_query("SET NAMES 'utf8'"$connection_id);
                    if (
is_resource($this->root_connection) == false) {
                        
$this->root_connection $connection_id;
                    } else {
                        if (
$mfhclass->funcs->is_null($new_link) == false) {
                            if (
is_array($this->alt_connections) == true) {
                                
$this->alt_connections = array();
                            }
                            
$this->alt_connections[$new_link] = $connection_id;
                        }
                    }
                }
            }
            
            return 
$connection_id;
        }

        function 
close()
... 
Спасибо ZnikiR
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP, PERL, MySQL, JavaScript 186 21.02.2010 02:41
Защита БД MySQL от SQL инъекций с помощью GreenSQL xcedz Администрирование 5 02.04.2009 21:46
Безопасность в Php, Часть Iii k00p3r Чужие Статьи 0 11.07.2005 19:02
Защищаем Php. Шаг за шагом. k00p3r Чужие Статьи 0 13.06.2005 11:31
Защищаем MySql. Шаг за шагом k00p3r Чужие Статьи 0 13.06.2005 11:18



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ