it-swarm.com.de

MySQL Update-Abfrage funktioniert nicht

Diese Update-Abfrage funktioniert nicht und ich habe die allgemeine Syntax für die Update-Abfragen in Joomla über die Dokumentation dreifach überprüft. Hier ist der Code von der Controllerseite:

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));
    }

und hier ist der Code von der Modellseite:

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);
        }
    }

Meine Erfahrung mit Joomla ist begrenzt, aber keine meiner sendMeAnEmail-Methoden wird ausgelöst, sodass irgendwo etwas verloren geht, und ich weiß nicht genug darüber, wie Joomla funktioniert, um es herauszufinden. Ich habe nur ein grundlegendes Verständnis, wie es auch MVC anwendet.

Jede Hilfe wäre dankbar.

Die Überschreibung für getModel ():

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

Versucht, die Struktur der Abfrage gemäß dieser Link zu ändern:

 $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();

Aber es hat nicht geklappt ... auch nicht mit der hartcodierten where-Klausel.

1
Chase

Wie in Kommentaren geschrieben, handelte es sich um ein Problem mit falschen Eingangsvariablennamen. Beim Entwickeln von Formularen ist es immer eine gute Idee zu überprüfen, ob Variablen und Werte auf der Serverseite korrekt abgerufen werden.

Ich konnte dieses Problem lösen, indem ich die Quelle in Chrome) untersuchte und feststellte, dass sich die über das Kontrollkästchen ausgewählten IDs in einem Array mit dem Namen cid [] und nicht id [] befanden. Die Bezeichnung für dieses Array lautet nicht Sie haben recht damit, dass es sich nicht um die Abfrage, sondern um die Eingabe handelte.


Versuchen Sie, $db->execute(); durch $db->query(); zu ersetzen, wenn Sie joomla 2.5.x verwenden und die Methode execute in joomla 3 eingeführt wurde.

Das Problem kann auch damit zusammenhängen, wie Sie das Modell in die Funktion approveAll laden und versuchen, $model = $this->getModel(); zu ersetzen, indem Sie den entsprechenden Modellnamen hinzufügen, der die anderen Funktionen enthält: $model = $this->getModel('ModelName');

0
Kitase88