Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Модули Публикация новостей ссылкой с сайта

Публикация новостей ссылкой с сайта


     30.08.2013    Модули, MySQL, Ламерские вопросы    1617

вопрос
Славного вам расположения духа!
Захотелось мне сделать для определенной группы пользователей ссылку (кнопку) на фронтэнде, позволяющую публиковать и снимать с публикации новости. В программировании я совсем не разбираюсь и долго искал подобное решение в сети, но так и не нашел. Попытался сделать сам прочитав официальный мануал, но там было крайне мало подробностей, в результате я все же получил нужную мне функцию, но хотелось бы спросить у уважаемых знатоков, насколько вообще такой подход верен, имеет ли моя реализация право на жизнь и если нет - то в какую сторону мне примерно смотреть и чего бы почитать по теме.
Собственно как я это реализовал:

Был создан файл engine/modules/approve.php:


В файле engine/engine.php был добавлен код:

case "approve" :  
    include_once ENGINE_DIR . '/modules/approve.php';
    break;


Сама ссылка на модуль выводится в шаблоне короткой новости примерно так:

<a href="сайт/index.php?do=approved&param={news-id}">***</a>

Ответил: Sander


    if (empty($_GET['param'])) {  //выводит ошибку если запрос пустой
        die('пустое значение');
    }
Не обязательно, далее же есть еще одна проверка.


    $param = preg_replace('/[^A-Za-z0-9]/', '', $_GET['param']);  //фильтр запроса
    if ($param != $_GET['param']) {
        die('запрос содержит недопустимые символы');
    }
$param принимает только и только числовое значение. Регулярки тут не обязательны.


    $id = $db->super_query("SELECT id FROM " . PREFIX . "_post WHERE id = '$param'");  //проверка на существование записи
    if (!$id[id]) {
        die('такой записи не существует');
    }
Лишний запрос, эту проверку можно сделать на основании предыдущего запроса на проверку авторства. Если автор = админ, то die. Если $row['autor'] вообще пустая, то соответственно нет и новости такой.


    $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("Ошибка","В доступе отказано");    //показываем стандартное окно ошибки
?>

Комментарии пользователей (3)

pavang
17 | 4

pavang - 30 августа 2013 03:14 - Юзер

Премного благодарен за столь подробный ответ =) В общем я подозревал что намутил лишних запросов.

maxvel0007
128 | 17

maxvel0007 - 3 сентября 2013 20:34 - Гости

Интересная штука )) Только так можно понасоздавать ХАКИ ))

MAPKOBKA
4

80 | 18

MAPKOBKA - 13 сентября 2013 22:51 - Юзер

Спасибо. Это мне как раз и нужно, для одного проектика :).

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

 11.05.2014 kolumb  Модули