Создание гостевой книги на PHP с использованием MySQL

Tuesday, 19 January 2010 | Автор: programmer

Хочу продолжить экскурс по созданию веб-приложений на PHP. Сегодня продолжим создавать скрипт гостевой книги, только уже с использованием MySQL в качестве базы для хранения данных. Вам будет все понятно, если Вы изучили статьи: Создание класса на PHP для работы с MySQL, Классы и объекты в PHP, MySQL: Язык SQL, MySQL: Работа с phpMyAdmin.

 

Вообще, по крайней мере по скрипту гостевой книгой, будет цикл статей про создание гостевой книги. Сейчас очень много идей и хочется сделать сразу все правильно, как для себя, но... Осталось столько нерассмотренных тем по PHP, что будем делать все постепенно, где-то дописывать, а где-то будем даже переписывать код. В этой статье мы просто перепишем предыдущий наш скрипт гостевой книги, который мы делали с помощью файлов для хранения данных. Далее у меня большие планы по доработке этого скрипты, начиная от проверки вводимых данных (регулярные выражения) и панелью администратора  и заканчивая MVC и AJAX.

 

Итак начнемсссс... Версия 0.01 нашей гостевой книги :)

 

Для работы с базой данных MySQL будем использовать созданный нами скрипт. Для работы с гостевой книгой создадим новый класс guestbook. Я немного забегаю вперед, расскажу в кратце про наследование классов, а потом напишу про это статью. Наследование класса - это не просто создание точной копии класса, но и дополнение его новыми методами и свойствами. Так вот нам необходимо создать класс guestbook, который будет потомком класса sql_db (класс работы с базой данных). Чтобы это сделать создаем файл с названием guestbook.php и внесем туда код:

 

    class guestbook extends sql_db {
        // construncor
        function guestbook($sqlserver, $sqluser, $sqlpassword, $database) {
            $db = parent::sql_db($sqlserver, $sqluser, $sqlpassword, $database, false);
        }

    }

 

В первой строчке описывается создание класса guestbook и наследование этим классом методов и свойств класса sql_db. Далее создаем конструктор этого класса, который будет принимать конфигурационные данные для доступа к MySQL.

Чтобы обратиться к методам класса-родителя, необходимо перед методом поставить слово "parent::", т.о. мы создаем соединение с базой данных в классе guestbook.

 

На первом этапе нам понадобится 2 метода работы с гостевой книгой: добавление новых данных и вывод уже добавленных записей.

Для добавления новых данных создадим в классе новый метод:

        function addRecord($data) {
            parent::sql_query("insert into guestbook (datetime, name, text) VALUES ('".time()."', '".addslashes($data['name'])."', '".addslashes($data['text'])."');");
        }

На вход в метод будут подаваться данные для записи в БД. Как Вы видите сама функция добавления данных состоит из одной строки, которая вызывает метод выполнения запроса родительского класса. Функция time возвращает время в Unix-формате (простое число), а функция addslashes экранирует спец.символы в строке, но об этих функциях в других статьях.

 

Далее создаем функцию вывода сообщений в гостевую книгу:

        function viewBoard() {
            $sql = "select datetime, name, text where guestbook order by datetime desc";
            parent::sql_query($sql);
            return parent::sql_fetchrowset();
        }

 

Сама функция возвращает двумерный ассоциативный массив с данными.

 

В принципе всё, наш класс guestbook готов. Приступим к реализации самой гостевой книги, которая будет работать с этим классом. Создадим файл index.php:

    include "class/mysql.php";
    include "class/guestbook.php";   

    if (isset($_POST['save'])) { // Если была нажата кнопка "Сохранить"
        $guestbook->addRecord($_POST);
    }

    // делаем запрос к базе данных, чтобы взять сообщения
    $rowset = $guestbook->viewBoard();

    echo "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">n";
    echo "<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">n";
    echo "    <head>n";
    echo "        <title>Пример создания гостевой книги на PHP с использованием MySQL</title>n";
    echo "        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />n";
    echo "        <link rel="stylesheet" href="style.css" type="text/css" media="all" />n";
    echo "    </head>n";
    echo "    <body>n";
    echo "        <div id="content">n";
    if (!empty($rowset) and count($rowset)>0) { // если есть что выводить
        // двигаемся по элементам массива
        foreach ($rowset as $key=>$row) {
            echo "<div class="".($key % 2 == 0? "div1": "div2")."">n";
                echo "<div class="date">".date("d.m.Y H:i:s", $row['datetime'])."</div>n";
                echo "<div class="name">".stripslashes($row['name'])."</div>n";
                echo "<div class="text">".stripslashes($row['text'])."</div>n";
            echo "</div>n";
        }
    }

    // Выводим форму добавления записи в гостевую
    echo "            <div class="addForm">n";
    echo "                <div class="form">n";
    echo "                    <form method="POST">n";
    echo "                        <div class="field"><input type="text" name="name" /></div><div class="captionField">Имя</div>n";
    echo "                        <div class="clear" />n";
    echo "                        <div class="field"><textarea name="text"></textarea></div><div class="captionField">Текст</div>n";
    echo "                        <div class="clear" />n";
    echo "                        <div class="field"><input type="submit" name="save" value="Добавить" /></div>n";
    echo "                </div>n";
    echo "            </div>n";

    echo "        </div>n";
    echo "    </body>n";
    echo "</html>n";

 

вот и всё готово :)

 

Посмотреть работу скрипта можно по адресу http://phpprogs.ru/test/guestbook2/.

Скачать проект можно по следующим ссылкам:

 

P.S.: Задавайте вопросы, не стесняйтесь...

 


 
Tweet


Категория(и): Изучаем PHP, Скрипты, MySQL

Комментарии


Thursday, 21 January 2010 | 20:52:22 | Автор: my
Не стал бы заморачиваться с классами и MySQL. Для новичков подойдет вариант процедурного стиля + SQLite.
Thursday, 21 January 2010 | 22:35:12 | Автор: programmer
my,
Эххх помню у меня был проект перехода с MySQL на MSSQL в 50 мегабайтном проекте, вот там был процедурный стиль, ой как долго все переделывал и тестировал.
При классовом подходе нужно просто поменять в методах класса вызовы функций к новой БД.
Сравните, потерять месяц или сделать всё за пару часов
Friday, 22 January 2010 | 09:23:20 | Автор: my
Как я понял в статье не идет речь о переходе на MSSQL. О каком месяце идет речь?
Friday, 22 January 2010 | 13:08:04 | Автор: programmer
Я Вам объяснил различия между использованием чистых PHP-функций работы с БД и использованием для этого класса
Friday, 28 January 2011 | 12:43:26 | Автор: tok-80

Написано "Скачать проект можно по следующим ссылкам:"

а где ссылка то?

Добавить комментарий
Чтобы оставить комментарий, Вам необходимо зарегистрироваться или авторизироваться