2016
27
Март

Гостевая книга на php

grigoriev
24293
гостевая книга на php
скачать скрипт гостевая книга php
DOWNLOAD
посмотреть гостевая книга php
DEMO

Гостевая книга php используется многими вебмастерами. Её наличие на сайте улучшает комерческие факторы проекта и поэтому гостевую книгу на php часто используют на сайтах, продающих товары или услуги. В этой статье мы разберём как её создавать.

Наша простейшая гостевая книга должна осуществлять следующим функции:

  • Гость должен ввести своё имя и текст сообщения
  • Дложна проводиться проверка заполнения полей и отправляемых данных
  • Наша гостевая книга php должна быть без mysql
  • Должно быть организованно удаление сообщений

И так будем использовать ООП подход. Продумаем структуру. Исходя из ООП подхода у нас будет интерфейс, от него будет наследоваться класс, в классе будут методы на добавление, выборку, удаление. Так же создадим форму гостевой книги где будут происходить события, которые станут обращаться к методам класса и соответственно добавляться удаляться и тд. Так как мы решили что не будем использовать mysql, то мы будем писать данные в файл. Использовать для этого станем встроенную в интерпритатор php базу данные sqlite3.

Создание интерфейса

Cоздадим файл Imybook.class.php и в нём опишем основные методы для работы с книгой:

                                                                          
  interface Imybook{
        //Добавляет новую запись 
            function saveLetter($gname, $letter);
        //Выборка всех записей 
            function showLetter();
        //Удаление записи 
            function deleteLetter($id);
        }

Создание класса

                                                                          
//подключаем файл с интерфейсом
include "Imybook.class.php";
//созд. класс mybook наследующий интерфейс Imybook
class mybook  implements Imybook{
//созд. константу класса DB_NAME и присваиваем ей значение mybook.db
    const  DB_NAME='mybook.db';
//созд. закрытое свойство $_db для хранения объекта соединения с БД 
    private $_db;
//созд. конструктор, в котором подключ. к БД
    function __construct(){
//проверим существует ли БД
//если БД нет то создадим её и таблицу в ней letters
        if(!file_exists(self::DB_NAME)){
            $this->_db=new SQLite3(self::DB_NAME);
            $sql="CREATE TABLE letters(
                id INTEGER PRIMARY KEY,
                gname TEXT,
                letter TEXT,
                datetime INTEGER
            )";
            $this->_db->query($sql);
        }else{
//если бд есть то просто подключ. к ней
            $this->_db=new SQLite3(self::DB_NAME);
        }
    }
//созд. деструктор, в котором откл. от БД
    function __destruct(){
        unset($this->_db);
    }
//при наследовании интерфейса нужно перегрузить все
//его методы (не забыв. ставить {})
    function  saveLetter($gname, $letter){}
    function showLetter(){}
    function deleteLetter($id){}
}

Метод saveLetter

Метод saveLetter будет добавлять информацию из нашей формы в БД. Опишем его в нашем классе находящимся в файле mybook.class.php.

                                                                          
  function  saveLetter($gname, $letter){
        //Получим данные о текущих дате и времени
            $dt=time();
        //Сформируем строку запроса на добавление новой записи
            $sql="INSERT INTO letters (gname ,letter, datetime)
                  VALUES('$gname', '$letter', '$dt')";
      $this->_db->query($sql);
            return $errMessage="запись добавлена";
        }

Файл с формой отправки

Создадим файл mybook.php. Это так называемая вюха, файл где будет отображаться форма отправки и написанные сообщения.

<?php
//Подключим файл с описанием класса mybook
include "mybook.class.php";
//Создадим объект gbook
$gbook=new mybook();
//Создадим переменную $errMessage со строковым значением ""
$errMessage="";
//проверим была ли отправлена HTML-форма
//Если ДА, то подключите файл с кодом для обработки HTML-формы
if($_SERVER["REQUEST_METHOD"]=="POST"){
    include "saveletter.inc.php";
}
//Проверяем был ли запрос методом GET на удаление записи
// Если ДА, то подключаем файл с кодом для удаления записи
if(isset($_GET['del'])){
    include "deleteletter.inc.php";
}
?>
<!DOCTYPE html>
<html>
  <head>
    <title>пример гостевой книги php</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width">
    <link rel="stylesheet" href="/style.css">
  </head>
  <body>
    <section id="content" class="container">            
       <?php
             include "showletter.inc.php";
           ?>
       <h2>Оставить отзыв</h2>
       <?php
//Проверим, не является ли переменная $errMessage пустой строкой
//Если НЕТ, то выведите значение переменной $errMessage
           if($errMessage){
               echo "<p>".$errMessage;
           }   
          ?>
  <form id="form1" name="form1" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
            <table>
            <tbody><tr><td><p>Ваше имя</p></td><td><input type="text" name="gname"></td>
      </tr><tr>
            <td><p>Ваш отзыв</p></td>
                <td>
      <textarea name="letter" cols="40" rows="4"></textarea></td>
    </tr>
    <tr><td> </td><td>
                    <input type="submit" name="Submit" value="Оставить отзыв"></td>
    </tr>
                    </tbody></table>
    </form>
      </section>
  </body>
</html>

Мы заранее описали в mybook.php подключение файлов saveletter.inc.php, deleteletter.inc.php, showletter.inc.php

saveletter.inc.php

Создадим файл saveletter.inc.php. В этом файле у нас будут обрабатываться данные из нашей HTML формы и вызываться метод saveletter, который будет писать данные в БД.

                                                                          
//Проверим, была ли корректным образом отправлена HTML-форма
//для этого напишем функцию clearDate, вставим её в наш класс
//gbook, теперь это будет метод класса и вызывается соответственно
function clearDate($date){
    $date=stripslashes($date);
    $date=strip_tags($date);
    $date=trim($date);
    return $date;
}
//Проверим, была ли корректным образом отправлена HTML-форма
//Если НЕТ, то присвоим переменной $errMessage строковое значение 
//"Заполните все поля формы!"
//для начала прогоним получ. данные через clearDate
$gname=clearDate($_POST['gname']);
$letter=clearDate($_POST['letter']);
if(!empty($gname) && !empty($letter)){
    //вызовем метод saveletter
     if($gbook->saveLetter($gname, $letter)){
    // Перезапрашиваем страницу, чтобы избавиться от информации, 
    //переданной через форму
        header('Location: mybook.php');
     }else{
        $errMessage="Произошла ошибка при добавлении сообщения";
     }
}else{
    $errMessage="Заполните все поля формы!";
}

Проверку отправки формы и подключение файла мы уже сделали в mybook.php

Метод showLetter. Вывод сообщений в браузер.

Метод showLetter будет возвращать данные из БД в виде массива. Опишем его в нашем классе находящимся в файле mybook.class.php.

                                                                          
function showLetter(){
    //формируем строку запроса на выборку всех данных из таблицы letters
    //в обратном порядке
        $sql="SELECT id, gname, letter, datetime FROM letters 
        ORDER BY id DESC";
    //Получаем и возвращаем результат запроса
            $res=$this->_db->query($sql);
            $array = array();
            while($data = $res->fetchArray(SQLITE3_ASSOC))
            {
                 $array[] = $data;
            }
            return $array;
    }

Создадим теперь файл showletter.inc.php в котором будем выводить данные в браузер.

                                                                          
<?php
//Вызовем метод showLetter, результат сохраним в $allletters
$allletters=$gbook->showLetter();
//Используя цикл, выведите в браузер все сообщения
if(count ($allletters)>0){
    foreach($allletters as $row){
        $id=$row['id'];
        $gname=$row['gname'];
        $letter=$row['letter'];
        @$dt=date("d-m-Y H:i:s", $row['datetime']*1);
?>
<div class="quote">
    <div class="quote-icon">
        <div class="icon-img" style="background-color: #ff3333"></div>
    </div>
    <div class="quote-content">
        <p class="droid"><strong><?php echo $gname ?></strong><span class="data"><?php echo @$dt ?></span><br><?php echo $letter ?></p>
    </div>
    <div class="quote-close">
        <a href="/mybook.php?del=<?php echo $id ?>"><img src="/close.png" alt=""></a>
    </div>
</div>
<div class="clear"></div>
<?php 
    }    
}
?>

К mybook.php мы этот файл то же подключили.

Метод deleteLetter. Удаление записей.

Опишем метод deleteLetter в нашем классе находящимся в файле mybook.class.php.

                                                                          
function deleteLetter($id){
        $sql = "DELETE FROM letters WHERE id=$id";
        $this->_db->query($sql);
    }

Создадим файл deleteletter.inc.php. В нём мы будем вызывать метод deleteLetter и фильтровать полученные данные

                                                                          
//фильтруем получ. данные
$id=abs((int)$_GET['del']);
//Проверьте, корректны ли полученные данные
if($id){
    //вызовем метод deletePost
     $gbook->deleteLetter($id);
    // Перезапрашиваем страницу, чтобы избавиться от информации, 
    //переданной через форму
    header('Location: mybook.php');
    exit;
}else{
    $errMessage="хватит меня ломать!";
}

И этот файл мы уже подключили к mybook.php. Стили находятся в файле style.css. Описывать стили я в этой статье не буду.

Поделиться:

Комментарии

Максим

Максим

24.05.2016 04:27 Ответить

Да хорошая гостевая Собственно давно хотел свою гостевую но Тут вопрос возникает А как тогда кто хочет может отзывы удалять Нажав на крестик и отзыв другова тютю ?

Алексей Григорьев

Алексей Григорьев

24.05.2016 13:36 Ответить

Хороший вопрос Максим. Выводить крестик для удаления поста нужно если пользователь авторизован как админ. Про авторизацию на php напишу заметку позже, ну и соответственно прикручу функционал к этой книге.

Thanh

Thanh

24.09.2017 17:03 Ответить

Businesses are erasing the boundaries between nations and as a outcome, communication act the chief portion in expanding your reach as entrepreneur.
Communication, in this fact, is the wit to spell
out between any language doublet there is and the transfiguration services
bourgeon has made it calm easier. You valid from to coerce sure-fire the retinue you trusteeship your decipherment offers adequate accommodation, which can be verified by checking the
reviews of the particular one.

My homepage ... The Word Point Translation Services: http://thewordpoint.my-free.website

Добавить комментарий


Защитный код
Обновить