📚 Hub Books: Онлайн-чтение книгРазная литератураPHP. Разработка модуля комментариев для сайта - Дмитрий Приходько

PHP. Разработка модуля комментариев для сайта - Дмитрий Приходько

Шрифт:

-
+

Интервал:

-
+
1 ... 14 15 16 17 18 19 20 21 22 23
Перейти на страницу:
class="p1">/* Активация кнопок */

if (userHasRole('admin')) {

$buttonactive = 'submit'; //если админ делаем активными все кнопки

} elseif ($saylist['userid'] == $userid) {

$buttonactive = 'submit'; //делаем активными кнопки для юзера

} else {

$buttonactive = 'hidden'; //отключаем кнопки

} ?>

</div>

</div>

<div class="blocksayform" id="">

<div class="sayforms">

<form name="sayform" method="post" action="/chat/say/reset.php" class="logout">

<input type="hidden" name="pageid" id="" value=" <?php echo $pageid; ?>" />

<input type="hidden" name="deleteid" id="" value=" <?php echo $replylist['id']; ?>" />

<input type="<?= $buttonactive ?>" name="delete" id="" value="Удалить" />

</form>

</div>

<?php

}

endforeach;

}

?>

</div>

<div class="add_reply" id="">

<?php

if (isset($_SESSION['login'])) {

if (isset($_GET['reply']) and $_GET['reply'] == $post_id) {

include_once $_SERVER['DOCUMENT_ROOT'] . '/say/form_add_reply.html.php';

}

}

?>

</div>

</div>

</html>

На этой странице в цикле foreach – endforeach выводим все ответы на данный комментарий. Показываем кнопку «Удалить». Проверяем необходимость вставки формы для добавления ответа form_add_reply.html.php' на данный комментарий. Необходимость определяется наличием переменной $_GET['reply'].

35. Форма добавления ответов на комментарии

Для добавления ответов на комментарии служит форма form_add_reply.html.php

Листинг 51. form_add_reply.html.php Путь: news/chat/say/ form_add_reply.html.php

<!DOCTYPE html>

<html lang="en">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<meta name="viewport" content="width=device-width, initial-scale=1">

<link rel="stylesheet" type="text/css" href="/chat/style.css" />

</style>

</head>

<form action="/chat//say/separate_action.php" method="post" class="say">

<fieldset class="chatfieldset">

<legend>Ответить на комментарий:</legend>

<textarea class="saytext" name="replytext" rows="5" cols="50" autofocus><?php if(isset($_SESSION['txt'])){

       echo htmlout($_SESSION['txt']);}?></textarea>

<br />

<div class="">

<div class="says">

<input type="hidden" name="userid" value="Добавить">

<input type="hidden" name="pageid" value="<?php echo $pageid ?>">

<input type="hidden" name="sayid" value="<?php if(isset($sayid)) {echo $sayid;} ?>">

<input type="hidden" name="deleteid" id="" value=" <?php echo $saylist['id'];?>" />

<input type="hidden" name="postid" id="" value=" <?php htmlout($post_id);?>" />

<input type="submit" name="action" value="Ответить">

<input type="submit" name="smileblock" value="Показать смайлы">

<input type="submit" name="smileblock_close" value="Скрыть смайлы">

</div>

<div class="notaddsay" id=""><a href="?" class="notaddsays">Отмена</a></div>

</div>

</fieldset>

<br>

<hr>

<div class="smilesetdiv">

<fieldset class="smileset" style="<?php if (isset($_SESSION['smileblock'])) {echo $_SESSION['smileblock'];} ?>">

<?php print_smile_set();?>

</fieldset>

</div>

<br />

</form>

</html>

Это HTML форма состоящая из следующих частей:

• Поле ввода комментариев тип textarea,autofocus.

• Кнопки «Добавить», «Показать смайлы», «Скрыть смайлы» тип input submit.

• Ссылка «Отмена», при нажатии обнуляет все значения в $_GET.

• Блок смайлов, который выводит доступный набор смайлов.

36. Обработчик добавления ответов

Для обработки ответов на комментарии служит файл make_reply.php

Листинг 52. make_reply.php Путь: news/chat/say/ make_reply.php

<?php

error_reporting(E_ALL);

if (session_id() == '') {

session_start();

}

unset($_SESSION['txt']);

if (isset($_POST['nosay'])) {

$_GET['reply'] = '';

exit();

}

/* Проверяем наличие текста в форме */

if (empty($_POST['replytext'])) {

header("Location: " . $_SERVER["HTTP_REFERER"]); // Делаем редирект

exit();

}

if (isset($_POST['action']) and $_POST['action'] == "Ответить") {

include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/dsn.php';

include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/clean.php';

/* Получаем id текущего пользователя */

if (isset($_SESSION['userid'])) {

$userid = $_SESSION['userid'];

}

/* заносим текст в базу */

try {

$sql = 'INSERT INTO reply SET

replytext = :replytext,

userid = :userid,

replydate = :replydate,

replyid =:replyid';

$s = $dsn->prepare($sql);

$replytext = html($_POST['replytext']);

$replyid = $_POST['postid'];

$replydate = time();

$s->bindValue(':replytext', $replytext);

$s->bindValue(':replyid', $replyid);

$s->bindValue(':replydate', $replydate);

$s->bindValue(':userid', $userid);

$s->execute();

} catch (PDOException $e) {

echo 'Error adding данного пользователя';

echo $e->getMessage();

echo $e->getLine();

exit();

}

header("Location: " . $_SERVER["HTTP_REFERER"]); // Делаем редирект

exit();

}

header("Location: " . $_SERVER["HTTP_REFERER"]); // Делаем редирект

exit();

Здесь мы проверяем данные переданные формой form_add_reply.html.php, вставляем данные в БД и делаем редирект обратно.

37. Кнопка удаления ответов на комментарии

Для вывода кнопки удаления ответов на комментарии служит файл reply_delete_button.html

Листинг 53. reply_delete_button.html Путь: news/chat/say/ reply_delete_button.html

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link rel="stylesheet" type="text/css" href="/chat/style.css" />

</head>

<div class="wrapreplyform">

<div class="idreplynum">

      <!– печатаем id комментария –>

      <span style=""><?php

echo '#'.$saylist['id'].' '.'^'.$replylist['id'];?></span>

</div>

<!– печатаем кнопку удалить –>

<div class="reply_delete_button">

      <form name="sayform" method="post" action="/chat/say/reply_delete.php" class="reply_delete_button">

            <input type="hidden" name="pageid" id="" value=" <?php echo $pageid;?>" />

            <input type="hidden" name="deleteid" id="" value=" <?php echo $replylist['id'];?>" />

            <input type="<?= $buttonactive ?>" name="reply_delete" id="" value="Удалить" />

      </form>

</div>

<?php if($buttonactive =='hidden'){echo '.';} ?>

<!– печатаем точку и не даем схлопнуться div –>

</div>

Здесь выводим на печать идентификаторы ответа: номер комментария и номер ответа, и кнопку «Удалить».

38. Удаление комментариев

Для удаления служит скрипт reset.php

Листинг 54. reset.php Путь: news/chat/say/ reset.php

<?php

if (isset($_POST['delete']) and $_POST['delete'] == 'Удалить') {

include $_SERVER['DOCUMENT_ROOT'] . '/chat/dsn.php';

try {

$sql = 'DELETE FROM say WHERE id = :id';

$s = $dsn->prepare($sql);

$saylist = $_POST['deleteid'];

$s->bindValue(':id', $saylist);

$s->execute();

} catch (pdoException $e) {

echo $e->getMessage();

echo $e->getLine();

exit();

}

}

header("Location:" . $_SERVER['HTTP_REFERER']);// Делаем редирект обратно

Удаляется запись из таблицы say c номером, совпадающим с номером комментария.

39. Удаление ответов на комментарии

Для удаления ответов на комментарии служит файл reply_delete.php

Листинг 55. reply_delete.php Путь: news/chat/say/ reply_delete.php

<?php

if (isset($_POST['reply_delete']) and $_POST['reply_delete'] == 'Удалить') {

include $_SERVER['DOCUMENT_ROOT'] . '/chat/dsn.php';

try {

$sql = 'DELETE FROM reply WHERE id = :id';

$s = $dsn->prepare($sql);

$del = $_POST['deleteid'];

$s->bindValue(':id', $del);

$s->execute();

} catch (pdoException $e) {

echo $e->getMessage();

echo $e->getLine();

exit();

}

}

header("Location:" . $_SERVER['HTTP_REFERER']);// Делаем редирект обратно

Удаляется запись из таблицы reply c номером, совпадающим с номером ответа.

40. Перенаправление смайлов

Для разделения смайлов служит файл smile_make.php

Листинг 56. smile_make.php Путь: news/chat/say/ smile_make.php

<?php

if(session_id() == '') {session_start();}

/* Проверяем куда пойдет смайл в комментарии или в ответы */

if (isset($_POST['saytext'])) {

      $_SESSION['txt'] = $_POST['saytext'].$_POST['smile'];

header("Location: ".$_SERVER["HTTP_REFERER"]);// Делаем редирект в комментарии

exit();

}

elseif (isset($_POST['replytext'])){

      $_SESSION['txt'] = $_POST['replytext'].$_POST['smile'];

header("Location: ".$_SERVER["HTTP_REFERER"]);// Делаем редирект в ответы

exit();

}

Смайлы предусмотрены и в комментариях и в ответах на них, поэтому в данном скрипте отрабатывается место вставки смала: в комментарий или в ответ. Проверка идет при вставке в файл separate_action.php.

41. Стили

CSS

Код отвечающий за отображение выводимых элементов находится в файле style.css

Листинг 57. style.css Путь: news/chat/style.css

/* body */

.chatbody {

background-color: #fef5e4;

max-width: 1366px;

width: auto;

background-image: url(/images/home/bg.jpg);

}

/* form */

.chatform {

margin: 0 auto;

max-width: fit-content;

box-sizing: border-box;

padding: 1.5%;

border-radius: 5px;

background: RGBA(255, 255, 255, 1);

–webkit-box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.45);

box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.45);

1 ... 14 15 16 17 18 19 20 21 22 23
Перейти на страницу:

Комментарии

Обратите внимание, что комментарий должен быть не короче 20 символов. Покажите уважение к себе и другим пользователям!

Никто еще не прокомментировал. Хотите быть первым, кто выскажется?