Dram

Рейтинг
1114
Регистрация
28.06.2008

Я кажется понял - а нет разницы, гет или пост запросы. Вероятно нужно так же обрабатывать из в роутере и кидать на нужный контроллер и там уже с ними работать. Да! сейчас буду пробовать.

P.S. да, так заработало!

А как все таки правильно обрабатывать пост запросы в  MVC проектах?
webinfo #:

Не подключен файл с классом.

Ну это банальщину я то понял. Мне непонятно почему он не подключен, use прописан верно

<?php
namespace Services;
use Models\Comments\Comments;

ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

if(!empty($_POST['view']=='moderation')){
    if($_POST['task']=='remove'){
        Comments::remove($_POST['item_id']);
    }
}
<br />
<b>Fatal error</b>:  Uncaught Error: Class 'Models\Comments\Comments' not found in /var/www/com/Services/moderation.php:11
Stack trace:
#0 {main}
  thrown in <b>/var/www/com/Services/moderation.php</b> on line <b>11</b><br />

мои мысли такие - так как я обращаюсь к файлу moderation.php напрямую, то автозагрузка не работает и класс не загружается.

Но я пробовал инклюдить его напрямую - результат тот же.

Может обработку POST запросов нужно перенести в индекс пхп ниже автозагрузки и кидать запросы в корневой index.php?

Проблему решила строчка 

 $this->pdo->setAttribute( \PDO::ATTR_EMULATE_PREPARES, false );

Добавленная в метод класса работы с базой

    public function query(string $sql, $params = [], string $className = 'stdClass'): ?array
    {
        $this->pdo->setAttribute( \PDO::ATTR_EMULATE_PREPARES, false );
        $sth = $this->pdo->prepare($sql);
        $result = $sth->execute($params);

        if (false === $result) {
            return null;
        }

        return $sth->fetchAll(PDO::FETCH_CLASS, $className);
    }

Я правильно пронимаю что я отключил по сути "подготовленные запросы" и теперь потенциально увеличился риск SQL инъекций?

Попробовал так, чтобы не отказываться от класса базы, все равно не помогло.

Как же быть если в запросе могут быть и числа и строки?

И почему тогда такой запрос проходит без проблем?

$pagination = $db->query('SELECT * FROM `content` WHERE catid=:catid,[':catid' => 28]);
LEOnidUKG #:

Добро пожаловать в жестокий мир PDO 😂

Тебе надо INT передавать с параметром:  PDO::PARAM_INT https://www.php.net/manual/ru/pdostatement.execute.php

Иначе у тебя там будет LIMIT '0','10'

да вроде int там, вот я в классе базы делаю вывод, вот что 

    public function query(string $sql, $params = [], string $className = 'stdClass'): ?array
    {
        $sth = $this->pdo->prepare($sql);
        var_dump($params);
        $result = $sth->execute($params);

получаю

array(3) {
  [":catid"]=>
  int(28)
  [":offset"]=>
  int(0)
  [":size_page"]=>
  int(10)
}
Igor-san #:

Ну так наверное не так

а так

без эффекта. Дело 100% в какой-то своеобразной обработке  LIMIT :offset, :size_page'

стоит их убрать - или вместо параметров поставить числа - все работает.

LEOnidUKG #:

Так это не PDO, это через какую-то обвёртку делаешь что-ли?

Да, я же писал выше

Dram :
полез в класс работы с базой,

вот сюда запрос приходит


    public function query(string $sql, $params = [], string $className = 'stdClass'): ?array
    {
        $sth = $this->pdo->prepare($sql);
        $result = $sth->execute($params);

        if (false === $result) {
            return null;
        }

        return $sth->fetchAll(\PDO::FETCH_CLASS, $className);
    }

Отсюда повальное снижение CPMV. И дохода в целом.

Все гораздо проще. Новый год, пьяное начало года прошло и фирмы (те, что остались - и это КЛЮЧЕВОЙ момент) начали пилить рекламные бюджеты, которые сдулись многократно в связи сами знаете с чем.

webinfo #:
Нет тут никаких копипастов и проблем. Хоть мало типов страниц будет, хоть много - без разницы.

Абсолютно согласен, у меня такое реализовано на портале с > 1 млн. страниц, проблем нет. Все равно типов (групп, называйте как хотите) страниц даже на мегапорталах не более пары десятков, а в подавляющем кол-ве случаев в районе десятка. Вообще проблем нет разделить для них стили и скрипты.

Всего: 6924