Пробую прикрутить антифлуд к блогам... Что то не особо получается. При написании блога ошибка 500. Сервис проверки синтаксиса не находит ошибку...
код (+/-)
<?php
define('_IN_JOHNCMS', 1);
require($_SERVER['DOCUMENT_ROOT'].'/system/bootstrap.php');
/** @var Interop\Container\ContainerInterface $container */
$container = App::getContainer();
/** @var PDO $db */
$db = $container->get(PDO::class);
/** @var Johncms\User $systemUser */
$systemUser = $container->get(Johncms\User::class);
/** @var Johncms\Environment $env */
$env = App::getContainer()->get('env');
/** @var Johncms\Tools $tools */
$tools = $container->get('tools');
/** @var Johncms\Config $config */
$config = $container->get(Johncms\Config::class);
$text1 = 'Создать статью';
if(!$systemUser->id){header('location:/');}
if(isset($_POST['go'])){
$title = isset($_POST['title']) ? mb_substr(trim($_POST['title']), 0, 100) : '';
$text = isset($_POST['text']) ? mb_substr(trim($_POST['text']), 0, 10000) : '';
if(!empty($title) && !empty($text)){
if ($systemUser->isValid()) {
// Антифлуд для зарегистрированных пользователей
$flood = $tools->antiflood();
}
if ($flood) {
$error = sprintf(_t('You cannot add the message so often. Please, wait %d seconds.'), $flood);
}
if(!$error){
$db->prepare("INSERT INTO `blogs` SET
`title` = ?,
`text` = ?,
`date` = ?,
`user_id` = ?,
`ip` = ?,
`browser` = ?
")->execute([
$title,
$text,
time(),
$systemUser->id,
$env->getIp(),
$env->getUserAgent(),
]);
// Обновляем статистику юзера
$db->exec("UPDATE `users` SET
`blogs`='" . ($systemUser->blogs + 1) . "'
WHERE `id` = '" . $systemUser->id . "'
");
header('location:blog.php');
}
}
}
require($_SERVER['DOCUMENT_ROOT'].'/system/head.php');
?>
<div class="phdr">Создать запись</div>
<div class="list1">
<form action="" method="POST" name="form">
<?php
$token = mt_rand(1000, 100000);
$_SESSION['token'] = $token;
?>
<p>Название записи (макс 100)</p>
<input type="text" name="title" class="form-control" placeholder="Введите название записи..."><br>
<p>Текст записи (макс 10000)</p>
<?php echo $container->get('bbcode')->buttons('form', 'text'); ?>
<textarea name="text" class="form-control" placeholder="Введите текст записи..."></textarea><br>
<input type="submit" name="go" value="Написать" class="btn btn-default">
</form>
</div>
<?
require($_SERVER['DOCUMENT_ROOT'].'/system/end.php');
Добавлено: 06.04.2017 / 21:34
Там еще надо обновлять в таблице юзерс время последней активности юзера. Что бы этот антифлуд работал.
Добавлено: 06.04.2017 / 21:35
Глянь как там в гостевой сделано. Или ты там и смотрел?
Добавлено: 06.04.2017 / 21:37
ValekS, Да я оттуда копировал.
Добавлено: 06.04.2017 / 21:44
Вот добавил время последнего поста в запрос и создал переменные $error и $flood их че то сначала не заметил. Все равно ошибка 500 при написании блога. Мне же потом еще и к комментам надо будет прилепить.
код (+/-)
<?php
define('_IN_JOHNCMS', 1);
require($_SERVER['DOCUMENT_ROOT'].'/system/bootstrap.php');
/** @var Interop\Container\ContainerInterface $container */
$container = App::getContainer();
/** @var PDO $db */
$db = $container->get(PDO::class);
/** @var Johncms\User $systemUser */
$systemUser = $container->get(Johncms\User::class);
/** @var Johncms\Environment $env */
$env = App::getContainer()->get('env');
/** @var Johncms\Tools $tools */
$tools = $container->get('tools');
/** @var Johncms\Config $config */
$config = $container->get(Johncms\Config::class);
$text1 = 'Создать статью';
if(!$systemUser->id){header('location:/');}
if(isset($_POST['go'])){
$title = isset($_POST['title']) ? mb_substr(trim($_POST['title']), 0, 100) : '';
$text = isset($_POST['text']) ? mb_substr(trim($_POST['text']), 0, 10000) : '';
if(!empty($title) && !empty($text)){
$error = [];
$flood = false;
if ($systemUser->isValid()) {
// Антифлуд для зарегистрированных пользователей
$flood = $tools->antiflood();
}
if ($flood) {
$error = sprintf(_t('You cannot add the message so often. Please, wait %d seconds.'), $flood);
}
if(!$error){
$db->prepare("INSERT INTO `blogs` SET
`title` = ?,
`text` = ?,
`date` = ?,
`user_id` = ?,
`ip` = ?,
`browser` = ?
")->execute([
$title,
$text,
time(),
$systemUser->id,
$env->getIp(),
$env->getUserAgent(),
]);
// Обновляем статистику юзера
$db->exec("UPDATE `users` SET
`blogs`='" . ($systemUser->blogs + 1) . "',
`lastpost` = '" . time() . "'
WHERE `id` = '" . $systemUser->id . "'
");
header('location:blog.php');
}
}
}
require($_SERVER['DOCUMENT_ROOT'].'/system/head.php');
?>
<div class="phdr">Создать запись</div>
<div class="list1">
<form action="" method="POST" name="form">
<?php
$token = mt_rand(1000, 100000);
$_SESSION['token'] = $token;
?>
<p>Название записи (макс 100)</p>
<input type="text" name="title" class="form-control" placeholder="Введите название записи..."><br>
<p>Текст записи (макс 10000)</p>
<?php echo $container->get('bbcode')->buttons('form', 'text'); ?>
<textarea name="text" class="form-control" placeholder="Введите текст записи..."></textarea><br>
<input type="submit" name="go" value="Написать" class="btn btn-default">
</form>
</div>
<?
require($_SERVER['DOCUMENT_ROOT'].'/system/end.php');
Добавлено: 06.04.2017 / 21:49
PaRtiZzaN, а это твоя строка или джоновская?
if(!$systemUser->id){ header('location:/'); }
Добавлено: 06.04.2017 / 21:51
Меня больше адрес для редиректа интересует : header('location:
/'); Он такой был изначально?
Добавлено: 06.04.2017 / 21:53
И ещё проверь корректность этого адреса : header('location:
blog.php');
ДоХтор, Ну это я добавил. Если гость зайдет на страницу то кинет на главную.
Что то я натыкал и антифлуд заработал. Но че то мало, секунды 3.
Правда выводит текст без перевода. так и должно быть?
if ($flood) {
$error = sprintf(_t('You cannot add the message so often. Please, wait %d seconds.'), $flood);
}