С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/68: Рейтинг темы: голосов - 68, средняя оценка - 4.97
2 / 2 / 2
Регистрация: 11.03.2012
Сообщений: 48
1

Кириллица не отображается (PHP и MySQL)

12.03.2012, 15:27. Показов 12591. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Учусь по книге Лауры Томсон и Люка Веллинга «Разработка веб-приложений на 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:
SQL
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
CREATE TABLE customers
( customerid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name CHAR(50) NOT NULL,
  address CHAR(100) NOT NULL,
  city CHAR(30) NOT NULL
);
 
CREATE TABLE orders
( orderid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  customerid INT UNSIGNED NOT NULL,
  amount FLOAT(6,2),
  DATE DATE NOT NULL
);
 
CREATE TABLE books
(  isbn CHAR(13) NOT NULL PRIMARY KEY,
   author CHAR(50),
   title CHAR(100),
   price FLOAT(4,2)
);
 
CREATE TABLE order_items
( orderid INT UNSIGNED NOT NULL,
  isbn CHAR(13) NOT NULL,
  quantity tinyint UNSIGNED,
 
  PRIMARY KEY (orderid, isbn)
);
 
CREATE TABLE book_reviews
( isbn CHAR(13) NOT NULL PRIMARY KEY,
  review text
);
Создал.
3) Вставляем данные в нашу БД из файла book_insert.sql командой mysql –uroot –Dbooks –ppass@word1 < book_insert.sql
Содержимое файла book_insert.sql:
SQL
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
USE books;
 
INSERT INTO customers VALUES
  (3, "Саша Валентей", "12, ул. Гудвина", "г. Изумрудный"),
  (4, "Ева Легкая", "34, пр. Незнайки", "г. Солнечный"),
  (5, "Слава Моргунов", "56, пер. Поттера", "пгт Хогвартс");
 
INSERT INTO orders VALUES
  (NULL, 3, 69.98, "2008-04-02"),
  (NULL, 1, 49.99, "2008-04-15"),
  (NULL, 2, 74.98, "2008-04-19"),
  (NULL, 3, 24.99, "2008-05-01");
 
INSERT INTO books VALUES
  ("5-8459-0046-8", "Майкл Морган", "Java 2. Руководство разработчика", 34.99),
  ("5-8459-1082-X", "Кристофер Негус", "Linux. Библия пользователя", 24.99),
  ("5-8459-1134-6", "Марина Смолина", "CorelDRAW X3. Самоучитель", 24.99),
  ("5-8459-0426-9", "Родерик Смит", "Сетевые средства Linux", 49.99);
 
INSERT INTO order_items VALUES
  (1, "5-8459-0046-8", 2),
  (2, "5-8459-0426-9", 1),
  (3, "5-8459-0426-9", 1),
  (3, "5-8459-1134-6", 1),
  (4, "5-8459-1082-X", 3);
 
INSERT INTO book_reviews VALUES
  ("5-8459-0046-8", "Книга Моргана написана исключительно понятно и может счи-таться одной из лучших базовых книг по Java.");
Получилось.
4) Заходим обратно в MySQL monitor:
- выбираем нашу БД командой use books;
-пробуем посмотреть содержимое таблицы customers командой select * from customers;
И вот тут лезут каракули вместо букв русского алфавита.
5) Открываем файл search.html:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<html>
<head>
  <title>Магазин "Буквофил" – Поиск в каталоге</title>
</head>
 
<body>
  <h1>Магазин "Буквофил" - Поиск в каталоге</h1>
  <form action="results.php" method="post">
    Выберите тип поиска:<br />
    <select name="searchtype">
      <option value="author">По автору</option>
      <option value="title">По названию</option>
      <option value="isbn">По ISBN</option>
    </select>
    <br />
    Введите информацию для поиска:<br />
    <input type="text" name="searchterm" size="40" />
    <br />
    <input type="submit" name="submit" value="Найти" />
  </form>
 
</body>
</html>
Пробуем сделать поиск. Поиск работает, но нормально отображаются только латинские буквы и цифры. Кириллица – каракули.
Код файла-обработчика result.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
<html>
<head>
  <title>Магазин "Буквофил" – Результаты поиска</title>
</head>
<body>
<h1>Магазин "Буквофил" - Результаты поиска</h1>
<?php
  // создание коротких имен переменных
  $searchtype = $_POST['searchtype'];
  $searchterm = trim($_POST['searchterm']);
 
  if (!$searchtype || !$searchterm) {
     echo 'Вы не ввели параметры поиска. Вернитесь' .
          ' на предыдущую страницу и повторите ввод.';
     exit;
  }
 
  if (!get_magic_quotes_gpc()) {
    $searchtype = addslashes($searchtype);
    $searchterm = addslashes($searchterm);
  }
 
  @ $db = new mysqli('localhost', 'bookorama', 'bookorama123', 'books');
  $errn = mysqli_connect_errno();
  if (mysqli_connect_errno()) {
     echo 'Ошибка: Не удалось установить соединение' . 
          ' с базой данных. Повторите попытку позже.';
     exit;
  }
 
  $query = "select * from books where ".$searchtype." like '%".$searchterm."%'";
  $result = $db->query($query);
  $num_results = $result->num_rows;
  echo "<p>Найдено книг: ".$num_results."</p>";
 
  for ($i = 0; $i < $num_results; $i++) {
     $row = $result->fetch_assoc();
     echo "<p><strong>".($i+1).". Название: ";
     echo htmlspecialchars (stripslashes($row['title']));
     echo "</strong><br />Автор: ";
     echo stripslashes($row['author']);
     echo "<br />ISBN: ";
     echo stripslashes($row['isbn']);
     echo "<br />Цена: ";
     echo stripslashes($row['price']);
     echo "</p>";
  }
 
  $result->free();
  $db->close();
?>
 
</body>
</html>
Вот и все. Что да как я менял и пробовал - писать не буду. Думаю, тем, кто разбирается в этом, сказать что делать проще, чем читать кучу моего хлама.
Использованные программы:
-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 кодировке.

Прилагаю используемые файлы:
Вложения
Тип файла: rar Source.4th Edition.rar (2.2 Кб, 37 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2012, 15:27
Ответы с готовыми решениями:

Неправильно отображается кириллица в php
Тем очень много, но такой не увидел, если что сори... Вобщем читаю книгу Ларри Ульмана &quot;Основы...

MySQL: не отображается кириллица
:( Можно ли подружить БД с VB.net Вот на скрине имена столбцов на кирилице крякозябло...

TexStudio: не отображается кириллица
Начал разбираться в Техе, и тут такой, может кто объяснить, в чем я туплю?

Кириллица отображается кракозябрами
Добрый день, решил запустить Lazarus на виртуалке, создал проект, откомпилировал запускаю всё идёт...

2
2439 / 2290 / 595
Регистрация: 27.05.2011
Сообщений: 7,817
12.03.2012, 19:52 2
каждый день ктото пишет тему про кодировку , первый запрос в базу "SET NAMES utf8"
0
2 / 2 / 2
Регистрация: 11.03.2012
Сообщений: 48
12.03.2012, 20:48  [ТС] 3
Цитата Сообщение от crautcher Посмотреть сообщение
каждый день ктото пишет тему про кодировку , первый запрос в базу "SET NAMES utf8"
Ага, и от каждого слышу про "SET NAMES utf8", будто от чего-то другого кодировка не зависит.

Проблему решил, при создании указав по умолчанию кодировку каждой таблицы utf8 и изменив кодировку всех html и php страниц на ANSI as UTF-8.

А все сет нэймс тычут...
0
12.03.2012, 20:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2012, 20:48
Помогаю со студенческими работами здесь

Кириллица отображается крякозябрами
Создал консольное приложение, считывающее информацию из текстового файла. В файле текст...

Не отображается кириллица в консоли
Что делать?

Почему не отображается кириллица?
сохранено в utf-8 без BOM, &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;Моя первая страничка&lt;/title&gt; ...

Не отображается кириллица в DOS
Здравствуйте! У меня в чистой DOS, в программах, не отображается кириллица. DOS 6.22, ставил на...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru