вопрос
Славного вам расположения духа!
Захотелось мне сделать для определенной группы пользователей ссылку (кнопку) на фронтэнде, позволяющую публиковать и снимать с публикации новости. В программировании я совсем не разбираюсь и долго искал подобное решение в сети, но так и не нашел. Попытался сделать сам прочитав официальный мануал, но там было крайне мало подробностей, в результате я все же получил нужную мне функцию, но хотелось бы спросить у уважаемых знатоков, насколько вообще такой подход верен, имеет ли моя реализация право на жизнь и если нет - то в какую сторону мне примерно смотреть и чего бы почитать по теме.
Собственно как я это реализовал:
Был создан файл engine/modules/approve.php:
В файле engine/engine.php был добавлен код:
Сама ссылка на модуль выводится в шаблоне короткой новости примерно так:
Захотелось мне сделать для определенной группы пользователей ссылку (кнопку) на фронтэнде, позволяющую публиковать и снимать с публикации новости. В программировании я совсем не разбираюсь и долго искал подобное решение в сети, но так и не нашел. Попытался сделать сам прочитав официальный мануал, но там было крайне мало подробностей, в результате я все же получил нужную мне функцию, но хотелось бы спросить у уважаемых знатоков, насколько вообще такой подход верен, имеет ли моя реализация право на жизнь и если нет - то в какую сторону мне примерно смотреть и чего бы почитать по теме.
Собственно как я это реализовал:
Был создан файл engine/modules/approve.php:
В файле engine/engine.php был добавлен код:
case "approve" :
include_once ENGINE_DIR . '/modules/approve.php';
break;
Сама ссылка на модуль выводится в шаблоне короткой новости примерно так:
<a href="сайт/index.php?do=approved¶m={news-id}">***</a>
if (empty($_GET['param'])) { //выводит ошибку если запрос пустойНе обязательно, далее же есть еще одна проверка.
die('пустое значение');
}
$param = preg_replace('/[^A-Za-z0-9]/', '', $_GET['param']); //фильтр запроса$param принимает только и только числовое значение. Регулярки тут не обязательны.
if ($param != $_GET['param']) {
die('запрос содержит недопустимые символы');
}
$id = $db->super_query("SELECT id FROM " . PREFIX . "_post WHERE id = '$param'"); //проверка на существование записиЛишний запрос, эту проверку можно сделать на основании предыдущего запроса на проверку авторства. Если автор = админ, то die. Если $row['autor'] вообще пустая, то соответственно нет и новости такой.
if (!$id[id]) {
die('такой записи не существует');
}
$row = $db->super_query("SELECT approve FROM " . PREFIX . "_post WHERE id = '$param'"); //изменение значения публикации на противоположноеВсе это делается одним простым, но хитрым запросом ;)
if ($row[approve] == 1 ) {
$db->query("UPDATE " . PREFIX . "_post SET `approve` = '0' WHERE id='$param'");
}
elseif ($row[approve] == 0 ) {
$db->query("UPDATE " . PREFIX . "_post SET `approve` = '1' WHERE id='$param'");
}
Мой вариант:
<?php
if(!defined('DATALIFEENGINE'))die("Hacking attempt!");
if ($is_logged AND ($member_id['user_group']==1 OR $member_id['user_group']==2)) { //определяет принадлежность пользователя к нужной группе
$id = intval($_GET['param']); // преобразовываем входящие данные в число
if($id<1) die("Undefined ID"); // проверяем, чтобы число не было нулевым и отрицательным
$row = $db->super_query("SELECT autor FROM " . PREFIX . "_post WHERE id = {$id}");
if(!$row['autor']) die("Not found!"); //проверяем есть ли новость с таким id
if($row['autor'] == "admin") die("Access Denied!"); //запрет на изменение параметра если автор статьи - админ
$db->query("UPDATE " . PREFIX . "_post SET approve = approve - 1 WHERE id={$id}"); //меняем статус
}else msgbox("Ошибка","В доступе отказано"); //показываем стандартное окно ошибки
?>