Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/19: Рейтинг темы: голосов - 19, средняя оценка - 5.00
97 / 6 / 1
Регистрация: 15.04.2013
Сообщений: 40
1

Некорректное отображение данных клиентского приложения Flex

06.05.2013, 13:44. Просмотров 3710. Ответов 17
Метки нет (Все метки)

Пишу клиент-серверное приложение под ios в Adobe Flash Builder 4.6 (тип приложения Flex).
На сервере установлен MySQL+php+apache
На сервере установлена кодировка utf8_general_ci
Проблема заключается в некорректном отображении данных: запись таблицы, созданная через phpmyadmin при попытке чтения во флексовском приложении отображается в виде
???????
- и это касается только кириллицы, цифры и латинские буквы отображаются нормально.
при попытке записи кириллических срок через приложение Flex'a в мою БД, в phpmyadmin данная запись пишется в виде
Сидоров
(цифры и латиница по-прежнему сохраняют свой нормальный вид), а когда я пытаюсь, опять же через клиента, прочитать только что созданную запись - то все отображается в первозданном виде. Значит, проблема заключается с кодировке запросов самого Flex'a.
Помогите, пожалуйста, с решением этой проблемы
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2013, 13:44
Ответы с готовыми решениями:

Некорректное отображение данных
Через программу сделанную в Windows Forms добавляю данные в БД использую MySql. Добавляю какой-то...

Отображение картинки на форме клиентского приложения из базы данных из поля OLE
ПРошу помочь начинающему. Есть клинское приложение связанное с базой данных в acceess. В базе...

Некорректное отображение приложения Win7
Доброго времени суток, уважаемые форумчане! Есть меллкософтное приложение, которым многие...

Связь клиентского приложения с базой данных в интернете
Есть клиентское приложение связанное с базой данных в Аксес. нужно чтобы база данных располагалась...

17
Модератор
2840 / 1690 / 172
Регистрация: 19.02.2011
Сообщений: 6,251
06.05.2013, 15:58 2
minibuilder, а шрифты в проект добавлены корректно? Каким образом происходит отображение данных?
1
97 / 6 / 1
Регистрация: 15.04.2013
Сообщений: 40
06.05.2013, 16:13  [ТС] 3
Каким образом происходит отображение данных?
вот ниже скрин:
1) как запись таблицы отображается в таблице через phpmyadmin
2) и как та же самая запись отображается в клиентском приложении

а шрифты в проект добавлены корректно?
а можно с этого места по-подробнее?
0
Миниатюры
Некорректное отображение данных клиентского приложения Flex  
Модератор
2840 / 1690 / 172
Регистрация: 19.02.2011
Сообщений: 6,251
06.05.2013, 16:41 4
Цитата Сообщение от minibuilder Посмотреть сообщение
utf8_general_ci
А это разве не способ сравнения символов?
Цитата Сообщение от minibuilder Посмотреть сообщение
вот ниже скрин
Все же указанной кодировки не видно.
Цитата Сообщение от minibuilder Посмотреть сообщение
и как та же самая запись отображается в клиентском приложении
Не стоит путать клиентское и серверное приложение. Прежде чем грешить на клиент, проверьте сервер.

Цитата Сообщение от minibuilder Посмотреть сообщение
можно с этого места по-подробнее?
Немножко можно. Для корректного отображения шрифта его (шрифт) необходимо внедрить (Embed). Это можно осуществить рядом способов. Для mxml наиболее востребованным является использование метатега embed.
0
97 / 6 / 1
Регистрация: 15.04.2013
Сообщений: 40
06.05.2013, 16:50  [ТС] 5
TanaTiX, теперь я запутался окончательно. опишите, пожалуйста, что и в каком порядке мне нужно сделать
0
97 / 6 / 1
Регистрация: 15.04.2013
Сообщений: 40
06.05.2013, 16:58  [ТС] 6
На скрине показал, что будет если попытаться сделать запись в таблицу с клиента, причем если потом обратно эту запись прочитать, то она будет выглядеть нормально
0
Миниатюры
Некорректное отображение данных клиентского приложения Flex  
Модератор
2840 / 1690 / 172
Регистрация: 19.02.2011
Сообщений: 6,251
06.05.2013, 17:14 7
minibuilder, теперь я запутался Глянуть бы... Минимальный пример, иллюстрирующий проблему...
1
97 / 6 / 1
Регистрация: 15.04.2013
Сообщений: 40
06.05.2013, 17:30  [ТС] 8
TanaTiX, как мне кажется, проблема заключается в какой-то не состыковке, при отправлении запросов.
клиент, отправляя запрос типа INSERT, походу представляет данные в своей кодировке, которые в таблице показываются кракозябликами.
Когда клиент посылает запрос типа SELECT, то используя свою же кодировку он спокойно может прочитать эти кракозяблики и показать нормальный текст.
по этой теме нашел вот такой вот код
PHP
1
2
3
4
5
$mysqli = mysqli_connect(путь, DATABASE_USERNAME, DATABASE_PASSWORD); 
        mysqli_query("SET NAMES 'utf8';"); 
         mysqli_query("SET CHARACTER SET 'utf8';"); 
         mysqli_query("SET SESSION collation_connection = 'utf8_general_ci';"); 
        mysqli_select_db(DATABASE_NAME);
но куда его вставить в класс пхп я вообще представления не имею, в пхп я не силен(
0
Модератор
2840 / 1690 / 172
Регистрация: 19.02.2011
Сообщений: 6,251
06.05.2013, 17:38 9
minibuilder, я правильно понял, что текст некорректно отображается только в phpMyAdmin-е? Все остальное работает корректно?
0
97 / 6 / 1
Регистрация: 15.04.2013
Сообщений: 40
06.05.2013, 17:47  [ТС] 10
TanaTiX, не только. Использую еще MySQL Administrator - там картина такая же, как и в phpmyadmin
Просто еще будет на серваке будет свое приложение (для администрирования системы - графики, отчеты и т.п.) и я так подозреваю, что при обращении к БД он будет показывать те же самые кракозяблики, если мы не исправим проблему с кодировкой
0
Модератор
2840 / 1690 / 172
Регистрация: 19.02.2011
Сообщений: 6,251
06.05.2013, 18:00 11
Цитата Сообщение от minibuilder Посмотреть сообщение
Использую еще MySQL Administrator - там картина такая же, как и в phpmyadmin
Т.е. проблема с отображением только на серверной части. Думаю стоит двигаться именно в этом направлении. Тему переношу в соответствующий раздел.
0
Администратор
11817 / 5128 / 258
Регистрация: 05.04.2011
Сообщений: 13,861
Записей в блоге: 2
06.05.2013, 18:06 12
minibuilder, у Вас получается смена кодировки с UTF-8 на win1252

Создайте в корневом каталоге Вашего сайта (или приложения - что там лежит) файл .htaccess (если его еще нет) и пропишите в нем директиву

Код
AddDefaultCharset utf-8
2
97 / 6 / 1
Регистрация: 15.04.2013
Сообщений: 40
06.05.2013, 18:35  [ТС] 13
Taatshi, к сожалению, результат остался тем же.
0
Администратор
11817 / 5128 / 258
Регистрация: 05.04.2011
Сообщений: 13,861
Записей в блоге: 2
06.05.2013, 18:38 14
Ну, тогда рассказывайте подробно. Где все лежит, какой хостинг, кто хостер
0
97 / 6 / 1
Регистрация: 15.04.2013
Сообщений: 40
06.05.2013, 20:19  [ТС] 15
сервер установлен на моей машине (wampserver 2.2: Apache 2.2.22, PHP 5.4.3, MySQL 5.5.24) с настроенным доступом по локальной сети.
клиентское приложение пишу в Adobe Flash Builder 4.6 (Мобильный проект Flex, устройство для тестирования iPod Touch 4G)
При создании приложение выбираю тип сервера приложения "PHP"
После создается в проекте новая служба типа PHP, где стандартными методами создается php класс
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
<?php
 
/**
 *  README for sample service
 *
 *  This generated sample service contains functions that illustrate typical service operations.
 *  Use these functions as a starting point for creating your own service implementation. Modify the 
 *  function signatures, references to the database, and implementation according to your needs. 
 *  Delete the functions that you do not use.
 *
 *  Save your changes and return to Flash Builder. In Flash Builder Data/Services View, refresh 
 *  the service. Then drag service operations onto user interface components in Design View. For 
 *  example, drag the getAllItems() operation onto a DataGrid.
 *  
 *  This code is for prototyping only.
 *  
 *  Authenticate the user prior to allowing them to call these methods. You can find more 
 *  information at http://www.adobe.com/go/flex_security
 *
 */
class EmplService {
 
    var $username = "root";
    var $password = "123qwe";
    var $server = "192.168.0.3";
    var $port = "3306";
    var $databasename = "test";
    var $tablename = "empl";
 
    var $connection;
 
    
    /**
     * The constructor initializes the connection to database. Everytime a request is 
     * received by Zend AMF, an instance of the service class is created and then the
     * requested method is invoked.
     */
    public function __construct() {
        $this->connection = mysqli_connect(
                                $this->server,  
                                $this->username,  
                                $this->password, 
                                $this->databasename,
                                $this->port
                            );
 
        $this->throwExceptionOnError($this->connection);
    }
 
    /**
     * Returns all the rows from the table.
     *
     * Add authroization or any logical checks for secure access to your data 
     *
     * @return array
     */
    public function getAllEmpl() {
 
        
        $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename");        
        $this->throwExceptionOnError();
        
        mysqli_stmt_execute($stmt);
        $this->throwExceptionOnError();
        
        $rows = array();
        
        mysqli_stmt_bind_result($stmt, $row->EmplID, $row->FIO, $row->Addr, $row->Phone, $row->Dept, $row->TabNumb, $row->KlNumb, $row->Posit, $row->Login, $row->Pass);
        
        while (mysqli_stmt_fetch($stmt)) {
          $rows[] = $row;
          $row = new stdClass();
          mysqli_stmt_bind_result($stmt, $row->EmplID, $row->FIO, $row->Addr, $row->Phone, $row->Dept, $row->TabNumb, $row->KlNumb, $row->Posit, $row->Login, $row->Pass);
        }
        
        mysqli_stmt_free_result($stmt);
        mysqli_close($this->connection);
    
        return $rows;
    }
 
    /**
     * Returns the item corresponding to the value specified for the primary key.
     *
     * Add authorization or any logical checks for secure access to your data 
     *
     * 
     * @return stdClass
     */
    public function getEmplByID($itemID) {
        
        $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename where EmplID=?");
        $this->throwExceptionOnError();
        
        mysqli_stmt_bind_param($stmt, 'i', $itemID);        
        $this->throwExceptionOnError();
        
        mysqli_stmt_execute($stmt);
        $this->throwExceptionOnError();
        
        mysqli_stmt_bind_result($stmt, $row->EmplID, $row->FIO, $row->Addr, $row->Phone, $row->Dept, $row->TabNumb, $row->KlNumb, $row->Posit, $row->Login, $row->Pass);
        
        if(mysqli_stmt_fetch($stmt)) {
          return $row;
        } else {
          return null;
        }
    }
 
    /**
     * Returns the item corresponding to the value specified for the primary key.
     *
     * Add authorization or any logical checks for secure access to your data 
     *
     * 
     * @return stdClass
     */
    public function createEmpl($item) {
 
        $stmt = mysqli_prepare($this->connection, "INSERT INTO $this->tablename (FIO, Addr, Phone, Dept, TabNumb, KlNumb, Posit, Login, Pass) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
        $this->throwExceptionOnError();
 
        mysqli_stmt_bind_param($stmt, 'ssiiiisss', $item->FIO, $item->Addr, $item->Phone, $item->Dept, $item->TabNumb, $item->KlNumb, $item->Posit, $item->Login, $item->Pass);
        $this->throwExceptionOnError();
 
        mysqli_stmt_execute($stmt);     
        $this->throwExceptionOnError();
 
        $autoid = mysqli_stmt_insert_id($stmt);
 
        mysqli_stmt_free_result($stmt);     
        mysqli_close($this->connection);
 
        return $autoid;
    }
 
    /**
     * Updates the passed item in the table.
     *
     * Add authorization or any logical checks for secure access to your data 
     *
     * @param stdClass $item
     * @return void
     */
    public function updateEmpl($item) {
    
        $stmt = mysqli_prepare($this->connection, "UPDATE $this->tablename SET FIO=?, Addr=?, Phone=?, Dept=?, TabNumb=?, KlNumb=?, Posit=?, Login=?, Pass=? WHERE EmplID=?");      
        $this->throwExceptionOnError();
        
        mysqli_stmt_bind_param($stmt, 'ssiiiisssi', $item->FIO, $item->Addr, $item->Phone, $item->Dept, $item->TabNumb, $item->KlNumb, $item->Posit, $item->Login, $item->Pass, $item->EmplID);     
        $this->throwExceptionOnError();
 
        mysqli_stmt_execute($stmt);     
        $this->throwExceptionOnError();
        
        mysqli_stmt_free_result($stmt);     
        mysqli_close($this->connection);
    }
 
    /**
     * Deletes the item corresponding to the passed primary key value from 
     * the table.
     *
     * Add authorization or any logical checks for secure access to your data 
     *
     * 
     * @return void
     */
    public function deleteEmpl($itemID) {
                
        $stmt = mysqli_prepare($this->connection, "DELETE FROM $this->tablename WHERE EmplID = ?");
        $this->throwExceptionOnError();
        
        mysqli_stmt_bind_param($stmt, 'i', $itemID);
        mysqli_stmt_execute($stmt);
        $this->throwExceptionOnError();
        
        mysqli_stmt_free_result($stmt);     
        mysqli_close($this->connection);
    }
 
 
    /**
     * Returns the number of rows in the table.
     *
     * Add authorization or any logical checks for secure access to your data 
     *
     * 
     */
    public function count() {
        $stmt = mysqli_prepare($this->connection, "SELECT COUNT(*) AS COUNT FROM $this->tablename");
        $this->throwExceptionOnError();
 
        mysqli_stmt_execute($stmt);
        $this->throwExceptionOnError();
        
        mysqli_stmt_bind_result($stmt, $rec_count);
        $this->throwExceptionOnError();
        
        mysqli_stmt_fetch($stmt);
        $this->throwExceptionOnError();
        
        mysqli_stmt_free_result($stmt);
        mysqli_close($this->connection);
        
        return $rec_count;
    }
 
 
    /**
     * Returns $numItems rows starting from the $startIndex row from the 
     * table.
     *
     * Add authorization or any logical checks for secure access to your data 
     *
     * 
     * 
     * @return array
     */
    public function getEmpl_paged($startIndex, $numItems) {
        
        $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename LIMIT ?, ?");
        $this->throwExceptionOnError();
        
        mysqli_stmt_bind_param($stmt, 'ii', $startIndex, $numItems);
        mysqli_stmt_execute($stmt);
        $this->throwExceptionOnError();
        
        $rows = array();
        
        mysqli_stmt_bind_result($stmt, $row->EmplID, $row->FIO, $row->Addr, $row->Phone, $row->Dept, $row->TabNumb, $row->KlNumb, $row->Posit, $row->Login, $row->Pass);
        
        while (mysqli_stmt_fetch($stmt)) {
          $rows[] = $row;
          $row = new stdClass();
          mysqli_stmt_bind_result($stmt, $row->EmplID, $row->FIO, $row->Addr, $row->Phone, $row->Dept, $row->TabNumb, $row->KlNumb, $row->Posit, $row->Login, $row->Pass);
        }
        
        mysqli_stmt_free_result($stmt);     
        mysqli_close($this->connection);
        
        return $rows;
    }
    
    
    /**
     * Utility function to throw an exception if an error occurs 
     * while running a mysql command.
     */
    private function throwExceptionOnError($link = null) {
        if($link == null) {
            $link = $this->connection;
        }
        if(mysqli_error($link)) {
            $msg = mysqli_errno($link) . ": " . mysqli_error($link);
            throw new Exception('MySQL Error - '. $msg);
        }       
    }
}
 
?>
а дальше уже идет автоматизированная работа по использованию класса

Добавлено через 1 час 10 минут
многие советуют добавать
PHP
1
mysql_query('SET NAMES utf8');
сразу после установки соединения, но я не силен в пхп, поэтому не знаю, куда это нужно вставлять и поможет ли это вообще
0
8 / 8 / 2
Регистрация: 19.02.2013
Сообщений: 23
07.05.2013, 02:14 16
Я не уверен, но, и как бы глупо это не звучало, у меня была подобная проблема... оказалось, что из flesh кириллица приходит в кодировке win1251. Попробуй конвертировать те строки, что приходят из flesh из win1251 в utf-8. Для этого в php файле для каждой пришедшей строки написать следующее $string = mb_convert_encoding($string, "windows-1251", "utf-8"); где $string - это переменная содержащая строку, пришедшую из flash. В твоём случае наверное будет выглядеть так: в функциях createEmpl и updateEmpl перед mysqli_stmt_bind_param для каждого $item->'имя' пропиши $item->'имя' = mb_convert_encoding($item->'имя', "windows-1251", "utf-8");
1
97 / 6 / 1
Регистрация: 15.04.2013
Сообщений: 40
08.05.2013, 01:25  [ТС] 17
aleksandroparin, идея очень хорошая, у меня уже что-то получается - правда кракозяблики есть, но уже другие. буду уже двигаться в этом направлении
0
8 / 8 / 2
Регистрация: 19.02.2013
Сообщений: 23
09.05.2013, 04:51 18
Погоди... я вспомнил кое-что...тогда у меня кракозябли были из-за того, что я файлы с компа загружал на сервак.. на серваке utf-8, а на компе всё в win1251... поэтому мне и пришлось перекодировку сделать, а у тебя, как я вижу, данные вводятся в самой флешке, поэтому mb_convert_encoding может и не помочь. Я перечитал все ответы, которые тебе присылали и не заметил ни одного, где бы тебе советовали проверить кодировку самого текстового файлика php. Посмотри в редакторе.. Если на сервере utf-8, то и все файлы php должны быть в utf8, подпись unicod BOM выключена, и иметь форму приведения к UNICODE "С"(каноническая декомпозиция и последующая каноническая композиция). Её можно проверить и поменять в текстовом редакторе в котором php код пишешь. У меня в DreamWeaver настройки кодировки страницы можно найти в меню Изменить->Свойства страницы->название/кодировка... Сам про неё постоянно забываю)))

Добавлено через 2 минуты
Само-собой, если кодировка самого php файла была не правильной, то убирай mb_convert_encoding, а то опять кракозябли вылезут
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2013, 04:51

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Некорректное отображение приложения в Graphic Layout и на телефоне
Должно быть : Добавлено через 9 минут На эмуляторе все корректно отбражается на телефоне...

Некорректное отображение данных в stringgrid
Здравствуйте. Строю в Делфи график и при этом вывожу значения x и y в таблицу. В итоге данные как...

Некорректное отображение данных в консоли!
Есть кодик. namespace LearningProject { public class Money { public decimal...

QSerialPort некорректное отображение данных
Пытаюсь забрать данные с Arduino, и иногда это получается иногда нет...Понял что проблема именно в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.