Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2012, 04:42   #1
Frants
Пользователь
 
Регистрация: 12.01.2012
Сообщений: 19
По умолчанию Кириллица не отображается корректно(PHP и MySQL)

Учусь по книге Лауры Томсон и Люка Веллинга «Разработка веб-приложений на 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:
Код:
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:
Код:
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.");
Получилось.
Frants вне форума Ответить с цитированием
Старый 12.03.2012, 04:46   #2
Frants
Пользователь
 
Регистрация: 12.01.2012
Сообщений: 19
По умолчанию

(На форуме ограничение стоит, целиком в один пост все не отправилось)

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
неправильно отображается досовская кириллица ALKOrobot Операционные системы общие вопросы 6 30.09.2011 09:29
Кодировка в PMA. Не отображается кириллица AnryFlame PHP 1 27.02.2011 07:21
Кириллица в mysql под dos-ом ololo-schoolboy SQL, базы данных 0 01.01.2011 16:08
Некорректно отображается кириллица в консольном пр fs444 Общие вопросы C/C++ 4 24.12.2009 23:57
Не корректно отображается в ИЕ pozitor WordPress и другие CMS 7 30.07.2009 16:15