Ответов: 8 Просмотров: 2612
|
Учусь по книге Лауры Томсон и Люка Веллинга «Разработка веб-приложений на 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):
скопировать код в буфер обмена
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:
CODE ( 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.");
Получилось.
4) Заходим обратно в MySQL monitor:
- выбираем нашу БД командой use books;
-пробуем посмотреть содержимое таблицы customers командой select * from customers;
И вот тут лезут каракули вместо букв русского алфавита.
5) Открываем файл search.html:
CODE ( html):
скопировать код в буфер обмена
<html> <head> <title>Магазин "Буквофил" – Поиск в каталоге</title> </head> <body> <h1>Магазин "Буквофил" - Поиск в каталоге</h1> <form action="results.php" method="post"> Выберите тип поиска: <select name="searchtype"> <option value="author">По автору</option> <option value="title">По названию</option> <option value="isbn">По ISBN</option> </select> Введите информацию для поиска: <input type="text" name="searchterm" size="40" /> <input type="submit" name="submit" value="Найти" /> </form> </body> </html>
Пробуем сделать поиск. Поиск работает, но нормально отображаются только латинские буквы и цифры. Кириллица – каракули.
Код файла-обработчика result.php:
PHP:
скопировать код в буфер обмена
<html> <head> <title>Магазин "Буквофил" – Результаты поиска</title> </head> <body> <h1>Магазин "Буквофил" - Результаты поиска</h1> <?PHP // создание коротких имен переменных $searchtype = $_POST['searchtype']; $searchterm = trim($_POST['searchterm']); if (!$searchtype || !$searchterm) { echo 'Вы не ввели параметры поиска. Вернитесь' . ' на предыдущую страницу и повторите ввод.'; } } @ $db = new mysqli('localhost', 'bookorama', 'bookorama123', 'books'); echo 'Ошибка: Не удалось установить соединение' . ' с базой данных. Повторите попытку позже.'; } $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 "</strong><br />Автор: "; echo "<br />ISBN: "; echo "<br />Цена: "; 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 кодировке. |