Guest User

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

a guest
Jul 19th, 2014
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.72 KB | None | 0 0
  1. //Файл index.php
  2. <?php
  3.     //В бд есть таблица messages с аттрибутами id, username и text, в которой храним сообщения
  4.  
  5.     class GuestBook {
  6.         private $db;
  7.         private $stmt;
  8.  
  9.         public function __construct($address, $dbname, $charset, $user, $password) {
  10.             session_start();
  11.             $this->db = new PDO("mysql:host=$address;dbname=$dbname;charset=$charset", $user, $password);
  12.         }
  13.  
  14.         public function selectMessages() { //Выбираем записи из таблицы
  15.             $this->stmt = $this->db->query('SELECT username, text FROM messages');
  16.         }
  17.  
  18.         public function addMessage($username, $text) { //Добавляем запись в таблицу
  19.             $statement = $this->db->prepare('INSERT INTO messages SET username = ?, text = ?');
  20.             $statement->execute(array($username, $text));
  21.         }
  22.  
  23.         public function getRow() { //Получаем очередную запись из PDOStatement
  24.             return $this->stmt->fetch(PDO::FETCH_ASSOC);
  25.         }
  26.  
  27.         public function saveFields($username, $text) { //Сохраняем поля в сессию, если они не все заполнены, чтобы потом автоматически заполнить их
  28.             $_SESSION['username'] = $username;
  29.             $_SESSION['text'] = $text;
  30.         }
  31.  
  32.         public function clearFields() { //Очищаем после saveFields()
  33.             $_SESSION['username'] = "";
  34.             $_SESSION['text'] = "";
  35.         }
  36.     }
  37.  
  38.  
  39.     $gb = new GuestBook('127.0.0.1', 'testdb', 'utf8', 'test', 'test');
  40.  
  41.     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  42.         $username = $_POST['username'] ? $_POST['username'] : "";
  43.         $text = $_POST['text'] ? $_POST['text'] : "";
  44.  
  45.         if ($username != "" && $text != "") {
  46.             $gb->addMessage($username, $text);
  47.         } else {
  48.             $gb->saveFields($username, $password); //Если хотя бы часть полей ввода не заполнены, записываем их в сессию и считываем в гет-запросе, чтобы самостоятельно заполнить поля формы и вывести сообщение об ошибке.
  49.         }
  50.  
  51.         header("Location: {$_SERVER['PHP_SELF']}");
  52.         die();
  53.     } elseif ($_SERVER['REQUEST_METHOD'] == 'GET') {
  54.         $username = $_SESSION['username'];
  55.         $text = $_SESSION['text'];
  56.  
  57.         $gb->selectMessages();
  58.  
  59.         include 'layout.php';
  60.  
  61.         $gb->clearFields();
  62.     }
  63.  
  64.     $db = null;
  65. ?>
  66.  
  67.  
  68.  
  69.  
  70. //Файл layout.php
  71. <!DOCTYPE HTML>
  72. <html>
  73.     <head>
  74.         <title>Гостевая книга</title>
  75.         <meta charset="UTF-8">
  76.     </head>
  77.     <body>
  78.         <?php include 'guestbook.php' ?>
  79.     </body>
  80. </html>
  81.  
  82.  
  83.  
  84.  
  85. //Файл guestbook.php
  86. <?php while ($row = $gb->getRow()): ?>
  87.     <div style='margin-bottom: 10px;'>
  88.         <div><?= htmlspecialchars($row['username']); ?></div>
  89.         <div><?= htmlspecialchars($row['text']) ?></div>
  90.     </div>
  91. <?php endwhile; ?>
  92.  
  93. <?php if ($username || $text) echo "<p>Вы не заполнили все поля!</p>" ?>
  94.  
  95. <form action="<?= $_SERVER['PHP_SELF'] ?>" method="POST">
  96.     <div>
  97.         <div>
  98.             <label for="username">Имя</label><br>
  99.             <input id="username" name="username" value="<?= $username ?>">
  100.         </div>
  101.  
  102.         <div>
  103.             <label for="test">Сообщение</label><br>
  104.             <textarea id="text" name="text" cols="50" rows="7"><?= $text ?></textarea>
  105.         </div>
  106.  
  107.         <input type="submit" name="send" value="Отправить">
  108.     </div>
  109. </form>
Advertisement
Add Comment
Please, Sign In to add comment