Помогите с антифлудом

661
.
PaRtiZzaN
¯\_(ツ)_/¯

Пробую прикрутить антифлуд к блогам... Что то не особо получается. При написании блога ошибка 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');
.
Ей 25
Добавлено: 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);
        }
Прикрепленные файлы:
Всего: 5