0 Пользователей и 1 Гость просматривают эту тему.
  • 6 Ответов
  • 229 Просмотров
*

pavel2950

  • Захожу иногда
  • 185
  • 2 / 0
Приветствую товарищи!

Беда какая, уже как угодно переписовал код и по документации писал не работает код обновления и добавления.


В первом запросе через поля (user_id и ref_id) мы проверяем голосовал ли он. Если пусто, значит нет и выпольням след. код вставка в эту же таблицу #__js_res_vote поля и еще обновляем одну таблицу.

Первый запрос работает четко, если пользователь какой пытался оставить голос и он уже это сделал ему верент сообщение "голосовал уже"

Скрин запроса из phpAdmin

А вот другие не работают вообще.

Писал sql запрос как стрингой,  открывал соединение отедльно и без рузультатотно. Если запрос обновления и вставки вывести и его же вставить в phpMyAdmin заменив только на префикс таблицы все четко работает и добавляет.

С меня +, кто свежим взглядом найдет ошибку
Код
class modcobaltRatingTopicHelper
{
    public static function getAjax()

    {
        $topic_rating = $_POST['topic_rating'];
        $id_topic = $_POST['id_topic'];
        $id_user = $_POST['id_user'];

        $db = JFactory::getDbo();
        $sql = $db->getQuery(true);

        $sql->select('ref_id');
        $sql->from('#__js_res_vote');
        $sql->where('user_id = ' . $id_user. " AND ref_id = ".$id_topic);
        $db->setQuery($sql);
        $resultCheckVote = $db->loadColumn();

        if (empty($resultCheckVote)):

            $columns = array('user_id', 'ref_id', 'vote');
            $values = array($id_user, $id_topic, $topic_rating);

            $sql->insert('#__js_res_vote');
            $sql->columns($db->quoteName($columns));
            $sql->values(implode(',', $values));
            $db->setQuery($sql);


            $sql->update('#__js_res_record')->set('votes = 1')->where('id = ' . $id_topic);
            $db->setQuery($sql)->execute();
        else:

            return "Голосовали уже";

        endif;
    }
}


Вот при таком расскладе что есть сейчас консоль ругается на ""JDatabaseExceptionExecuting: Unknown column 'ref_id' in 'where clause'""

« Последнее редактирование: 06.09.2019, 14:00:41 от pavel2950 »
*

icom

  • Давно я тут
  • 820
  • 198 / 4
Re: sql запрос не работает
« Ответ #1 : 01.09.2019, 21:15:51 »
возможно $id_topic пустое значение,
перед запросом проверяйте
if ($id_topic) {

}

или вместо $id_topic = $_POST['id_topic'];
прописать
$jinput = JFactory::getApplication()->input;
$id_topic = $jinput->get('id_topic', 0);
*

pavel2950

  • Захожу иногда
  • 185
  • 2 / 0
Re: sql запрос не работает
« Ответ #2 : 01.09.2019, 22:23:49 »
возможно $id_topic пустое значение,
перед запросом проверяйте
if ($id_topic) {

}

или вместо $id_topic = $_POST['id_topic'];
прописать
$jinput = JFactory::getApplication()->input;
$id_topic = $jinput->get('id_topic', 0);
В том то идело что все заполненно
*

AlekVolsk

  • Гуру
  • 6884
  • 398 / 4
Re: sql запрос не работает
« Ответ #3 : 01.09.2019, 23:13:04 »
покажите, что выводит перед выполнением запроса
Код: php
$sql->__toString();

и напрямую из $_POST получать значения для подставновки в запрос - это прямая sql-инъекция, либо через фабрику получайте, как в примере выше, либо через filter_input(), и если это должно быть числовое значение, то делайте обязательное приведение типов, либб значение через $db->quote() обязательно пропускайте
« Последнее редактирование: 01.09.2019, 23:18:28 от AlekVolsk »
*

pavel2950

  • Захожу иногда
  • 185
  • 2 / 0
Re: sql запрос не работает
« Ответ #4 : 04.09.2019, 16:49:34 »
$sql->__toString();

ничего не выводит. стринга пустая мол
*

AlekVolsk

  • Гуру
  • 6884
  • 398 / 4
Re: sql запрос не работает
« Ответ #5 : 04.09.2019, 17:23:50 »
посмотрел внимательней и только сейчас заметил: вам необходимо после каждого выполнения запроса снова его инициализировать, т.е. перед каждым формированием нового запроса обязательно
Код: php
$sql = $db->getQuery(true);
*

pavel2950

  • Захожу иногда
  • 185
  • 2 / 0
Re: sql запрос не работает
« Ответ #6 : 04.09.2019, 18:40:19 »
посмотрел внимательней и только сейчас заметил: вам необходимо после каждого выполнения запроса снова его инициализировать, т.е. перед каждым формированием нового запроса обязательно
Код: php
$sql = $db->getQuery(true);
Вы совершены правы. Я как раз это и сделал и еще переделал на вариант такой чтоб данные экранировались автоматически.

Для понимания(пример):

Код
// Создаем и заполняем объект
$profile = new stdClass();
$profile->user_id = 42;
$profile->profile_key = 'custom.message';
$profile->profile_value= 'Вставка данных с помощью insertObject()';
$profile->ordering = 1;
 
// Вставляем объект в таблицу профиля пользователя
$result = JFactory::getDbo()->insertObject('#__user_profiles', $profile);


Метод insertObject() автоматически экранирует данные: применяет quoteName() к имени таблицы и колонкам, а также quote() к значениям.


Спасибо сайту в очередной раз cmscafe.ru



P.S. Я думал что открыв 1 подключение выполнил все запросы и закрыть, казалось вроде это логично и типа лишний раз не открывал/закрывать подклчюение. А вышло что надо каждый раз открыть, закрыть.
« Последнее редактирование: 04.09.2019, 18:43:49 от pavel2950 »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не работает поиск на странице поиска

Автор vitzer

Ответов: 3
Просмотров: 99
Последний ответ 16.10.2019, 21:46:41
от vitzer
Не работает перенаправление Joomla 3

Автор robotwerder

Ответов: 0
Просмотров: 54
Последний ответ 16.10.2019, 14:40:53
от robotwerder
Сайт не работает

Автор Легионер

Ответов: 3
Просмотров: 87
Последний ответ 02.10.2019, 08:23:48
от draff
Маркер безопасности не прошел проверку. Запрос был прерван, чтобы предотвратить

Автор sesil

Ответов: 12
Просмотров: 482
Последний ответ 30.09.2019, 16:12:01
от pavel2950
[Решено] Как убрать значение ссылки с атрибутом Nofollow?

Автор Клим

Ответов: 1
Просмотров: 147
Последний ответ 06.09.2019, 16:48:34
от Клим