Не удалось выполнить запрос MySQL Update

Этот запрос обновления не работает, и я проверил тройной контроль общего синтаксиса запросов обновления в Joomla через документацию. Вот код со стороны контроллера:

public function approveAll() {
        $input = JFactory::getApplication()->input;
        $selectedEntries = $input->post->get('id', array(), 'array');

        JArrayHelper::toInteger($selectedEntries);

        $model = $this->getModel();
        $model->approveSelectedEntries($selectedEntries);
        $model->sendMeAnEmail('This is so broken');

        $this->setRedirect(JRoute::_('index.php?option=com_awardadmin', false));
    }

и вот код со стороны модели:

public function approveSelectedEntries($idsToApprove)
    {
        $db = JFactory::getDBO();

        foreach ($idsToApprove as $currentID) {
            $query = $db->getQuery(true);

            $query->update('#__chronoforms_data_nominationForm');
            $query->set('approved = 1');
            //$query->set('approved = true');
            $query->where('id = '.$currentID);
            $db->setQuery($query);
            //$db->loadRow();
            $result = $db->execute();

            $this->sendNotificationEmail($currentID);
            sendMeAnEmail('IDs: '.$idsToApprove.'<br>ID: '.$currentID.'<br>Query: '.$query.'<br>DB: '.$db);
        }
    }

Мой опыт работы с Joomla ограничен, но ни один из моих методов sendMeAnEmail не запускается, поэтому что-то где-то теряется, и я не знаю достаточно о том, как работает Joomla, чтобы понять это. У меня есть только базовое представление о том, как он применяет MVC.

Любая помощь будет оценена.

Переопределение для getModel ():

public function getModel($name = 'Submission', $prefix = 'AwardAdminModel') 
    {
        $model = parent::getModel($name, $prefix, array('ignore_request' => true));
        return $model;
    }

Попробовал изменить структуру запроса в соответствии с этой ссылкой до:

 $fields = $db->quoteName('approved').' = true';
    $conditions = $db->quoteName('id').' = 443';
$query->update($db->quoteName('#__chronoforms_data_nominationForm'))->set($fields)->where($conditions);
    $db->setQuery($query);
    $db->query();

Но это не сработало ... даже с hardcoded where clause.

2 голоса | спросил Chase 7 62015vEurope/Moscow11bEurope/MoscowSat, 07 Nov 2015 00:40:24 +0300 2015, 00:40:24

1 ответ


0

Как написано в комментариях, это была проблема с неправильными именами входных переменных. При разработке форм всегда рекомендуется проверять правильность получения переменных и значений на стороне сервера.

  

Я смог решить это, изучив источник в Chrome и   обнаружив, что идентификаторы, выбранные с помощью флажка, находились в массиве, называемом   cid [], а не id []. Обозначение этого массива даже не найдено в   этот конкретный компонент, который является нечетным. Вы правы в том, что это было   не связанные с запросом, а с вводом.


Попробуйте заменить $db->execute(); на $db->query(); если вы используете joomla 2.5.x, метод execute был введен в joomla 3.

Проблема также может быть связана с тем, как вы загружаете модель в функцию approveAll , попробуйте заменить $model = $this->getModel(); добавление связанного имени модели, которое содержит другие функции: $model = $this->getModel('ModelName');

ответил Kitase88 9 12015vEurope/Moscow11bEurope/MoscowMon, 09 Nov 2015 11:13:38 +0300 2015, 11:13:38

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132