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]   

> Без описания
Frants
Отправлено: 12 Марта, 2012 - 13:42:57
Post Id


Новичок


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


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




Учусь по книге Лауры Томсон и Люка Веллинга «Разработка веб-приложений на PHP и MySQL , 4-е издание». Все было хорошо, все получалось, пока не дошло дело до баз данных. В этой книге абсолютно ничего не сказано про кодирвки; я даже PDF версии предыдущих изданий скачал и делал поиск по ключевым словам типа «charset», «utf8», « cp1251» и т.д. Ничего. Я не понимаю как можно было авторам упустить этот столь важный момент в создании сайтов и почему в интернете все так рекомендуют эту книгу.
Вы, наверно, уже поняли: у меня не отображается кириллица ни в MySQL monitor, ни в браузере. Лезут кракозябры.
4 дня подряд я гуглил и пытался отладить тот код, который дается в книге. У меня получилось создать базу данных, содержимое в которой корректно отображается в MySQL monitor,а также в браузере, но как бы это не было смешно: я не помню что я конкретно я сделал. Да и нормально с этой моей БД работает только один php-сценарий, а остальные будто не видят ее.
В общем, ребята, прошу вашей помощи. Я вкратце изложу весь процесс, который дан в книге.
1) Предлагается создать базу данных через MySQL monitor командой CREATE DATABASE books;
Создал.
2) Выхожу из MySQL monitor командой quit и создаю таблицы из файла bookorama.sql командой mysql –uroot -Dbooks –ppass@word1 < bookorama.sql
Содержимое файла bookorama.sql:

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE customers
  2. ( customerid int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3.   name char(50) NOT NULL,
  4.   address char(100) NOT NULL,
  5.   city char(30) NOT NULL
  6. );
  7.  
  8. CREATE TABLE orders
  9. ( orderid int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  10.   customerid int UNSIGNED NOT NULL,
  11.   amount float(6,2),
  12.   date date NOT NULL
  13. );
  14.  
  15. CREATE TABLE books
  16. (  isbn char(13) NOT NULL PRIMARY KEY,
  17.    author char(50),
  18.    title char(100),
  19.    price float(4,2)
  20. );
  21.  
  22. CREATE TABLE order_items
  23. ( orderid int UNSIGNED NOT NULL,
  24.   isbn char(13) NOT NULL,
  25.   quantity tinyint UNSIGNED,
  26.  
  27.   PRIMARY KEY (orderid, isbn)
  28. );
  29.  
  30. CREATE TABLE book_reviews
  31. ( isbn char(13) NOT NULL PRIMARY KEY,
  32.   review text
  33. );


Создал.
3) Вставляем данные в нашу БД из файла book_insert.sql командой mysql –uroot –Dbooks –ppass@word1 < book_insert.sql
Содержимое файла book_insert.sql:

CODE (SQL):
скопировать код в буфер обмена
  1. USE books;
  2.  
  3. INSERT INTO customers VALUES
  4.   (3, "Саша Валентей", "12, ул. Гудвина", "г. Изумрудный"),
  5.   (4, "Ева Легкая", "34, пр. Незнайки", "г. Солнечный"),
  6.   (5, "Слава Моргунов", "56, пер. Поттера", "пгт Хогвартс");
  7.  
  8. INSERT INTO orders VALUES
  9.   (NULL, 3, 69.98, "2008-04-02"),
  10.   (NULL, 1, 49.99, "2008-04-15"),
  11.   (NULL, 2, 74.98, "2008-04-19"),
  12.   (NULL, 3, 24.99, "2008-05-01");
  13.  
  14. INSERT INTO books VALUES
  15.   ("5-8459-0046-8", "Майкл Морган", "Java 2. Руководство разработчика", 34.99),
  16.   ("5-8459-1082-X", "Кристофер Негус", "Linux. Библия пользователя", 24.99),
  17.   ("5-8459-1134-6", "Марина Смолина", "CorelDRAW X3. Самоучитель", 24.99),
  18.   ("5-8459-0426-9", "Родерик Смит", "Сетевые средства Linux", 49.99);
  19.  
  20. INSERT INTO order_items VALUES
  21.   (1, "5-8459-0046-8", 2),
  22.   (2, "5-8459-0426-9", 1),
  23.   (3, "5-8459-0426-9", 1),
  24.   (3, "5-8459-1134-6", 1),
  25.   (4, "5-8459-1082-X", 3);
  26.  
  27. INSERT INTO book_reviews VALUES
  28.   ("5-8459-0046-8", "Книга Моргана написана исключительно понятно и может счи-таться одной из лучших базовых книг по Java.");
  29.  

Получилось.
4) Заходим обратно в MySQL monitor:
- выбираем нашу БД командой use books;
-пробуем посмотреть содержимое таблицы customers командой select * from customers;
И вот тут лезут каракули вместо букв русского алфавита.
5) Открываем файл search.html:

CODE (html):
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3.   <title>Магазин "Буквофил" – Поиск в каталоге</title>
  4. </head>
  5.  
  6. <body>
  7.   <h1>Магазин "Буквофил" - Поиск в каталоге</h1>
  8.   <form action="results.php" method="post">
  9.     Выберите тип поиска:    <select name="searchtype">
  10.       <option value="author">По автору</option>
  11.       <option value="title">По названию</option>
  12.       <option value="isbn">По ISBN</option>
  13.     </select>
  14.         Введите информацию для поиска:    <input type="text" name="searchterm" size="40" />
  15.         <input type="submit" name="submit" value="Найти" />
  16.   </form>
  17.  
  18. </body>
  19. </html>
  20.  

Пробуем сделать поиск. Поиск работает, но нормально отображаются только латинские буквы и цифры. Кириллица – каракули.
Код файла-обработчика result.php:

PHP:
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3.   <title>Магазин "Буквофил" – Результаты поиска</title>
  4. </head>
  5. <body>
  6. <h1>Магазин "Буквофил" - Результаты поиска</h1>
  7. <?PHP
  8.   // создание коротких имен переменных
  9.   $searchtype = $_POST['searchtype'];
  10.   $searchterm = trim($_POST['searchterm']);
  11.  
  12.   if (!$searchtype || !$searchterm) {
  13.      echo 'Вы не ввели параметры поиска. Вернитесь' .
  14.           ' на предыдущую страницу и повторите ввод.';
  15.      exit;
  16.   }
  17.  
  18.     $searchtype = addslashes($searchtype);
  19.     $searchterm = addslashes($searchterm);
  20.   }
  21.  
  22.   @ $db = new mysqli('localhost', 'bookorama', 'bookorama123', 'books');
  23.   $errn = mysqli_connect_errno();
  24.      echo 'Ошибка: Не удалось установить соединение' .
  25.           ' с базой данных. Повторите попытку позже.';
  26.      exit;
  27.   }
  28.  
  29.   $query = "select * from books where ".$searchtype." like '%".$searchterm."%'";
  30.   $result = $db->query($query);
  31.   $num_results = $result->num_rows;
  32.   echo "<p>Найдено книг: ".$num_results."</p>";
  33.  
  34.   for ($i = 0; $i < $num_results; $i++) {
  35.      $row = $result->fetch_assoc();
  36.      echo "<p><strong>".($i+1).". Название: ";
  37.      echo htmlspecialchars (stripslashes($row['title']));
  38.      echo "</strong><br />Автор: ";
  39.      echo stripslashes($row['author']);
  40.      echo "<br />ISBN: ";
  41.      echo stripslashes($row['isbn']);
  42.      echo "<br />Цена: ";
  43.      echo stripslashes($row['price']);
  44.      echo "</p>";
  45.   }
  46.  
  47.   $result->free();
  48.   $db->close();
  49. ?>
  50.  
  51. </body>
  52. </html>
  53.  

Вот и все. Что да как я менял и пробовал - писать не буду. Думаю, тем, кто разбирается в этом, сказать что делать проще, чем читать кучу моего хлама.
Использованные программы:
-MySQL 5.5.21
-PHP 5.3.9
-Apache2.2
Кодировки в файле my.ini, находящегося в дериктории C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5 следующие:
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
Файлы bookorama.sql и book_insert.sql в ANSI кодировке.
 
 Top
Css-community
Отправлено: 13 Марта, 2012 - 09:16:28
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2012  
Откуда: Саранск


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




Попробуйте после подключения к базе выполнить запрос
 
 Top
Dezmont
Отправлено: 15 Марта, 2012 - 09:54:23
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Июль 2010  


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




Проверьте кодировки:
1. Кодировки созданных таблиц.
2. Кодировки файлов php, которые работают с базой.
3. Кодировку, которую выставляет браузер для html страницы. Должна быть utf8

*.sql файлы тоже конвертируйте в utf8
 
 Top
DeepVarvar Супермодератор
Отправлено: 15 Марта, 2012 - 10:05:57
Post Id



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


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


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




Frants пишет:
Лауры Томсон и Люка Веллинга
так это ж нерусь - у них нет проблем с кодировкой, вот и не пишут про неё Радость
 
 Top
Frants
Отправлено: 15 Марта, 2012 - 11:18:06
Post Id


Новичок


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


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




Dezmont пишет:
Проверьте кодировки:
1. Кодировки созданных таблиц.
2. Кодировки файлов php, которые работают с базой.
3. Кодировку, которую выставляет браузер для html страницы. Должна быть utf8

*.sql файлы тоже конвертируйте в utf8


В этом и была проблема, теперь все работает. Спасибо! Хи
 
 Top
snikers987
Отправлено: 15 Марта, 2012 - 11:28:28
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


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




$mysqli->set_charset('utf8');

вообще тема достаточно изжована.


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Frants
Отправлено: 15 Марта, 2012 - 11:32:46
Post Id


Новичок


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


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




snikers987 пишет:
$mysqli->set_charset('utf8');


и совсем не это...
 
 Top
snikers987
Отправлено: 15 Марта, 2012 - 11:47:23
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


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




Frants пишет:
snikers987 пишет:
$mysqli->set_charset('utf8');


и совсем не это...


Да, конечно, Вам это не подходит, не стоит слушать советов написаных в официальной документации.

(Отредактировано автором: 15 Марта, 2012 - 11:48:38)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Frants
Отправлено: 15 Марта, 2012 - 13:34:27
Post Id


Новичок


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


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




У меня таблицы были не в тех кодировках созданы, см. выше. А set names - это первое, что я пробовал сделать.
 
 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