Wie kann ich erkennen, dass eine Abfrage zum Erstellen, Aktualisieren und Löschen in Codeigniter erfolgreich ist?

Lesezeit: 3 Minuten

Ich schreibe gerade eine Controller-Methode wie diese:

public function delete($user_id) {
    if ($this->input->server('REQUEST_METHOD')=='POST') {
        $result = $this->Crm_user_model->update($user_id,
                                                array('deleted'=>true));
        if($result) {
            add_flash_message('info', 'deleted');
        } else {
            add_flash_message('alert', 'can not delete');
        }
        //redirect('user/view');
    }
} 

Aber alle Ergebnisse geben nichts zurück, auch wenn die Datenbank (mssql) geändert wurde. Wie kann ich wissen, ob die Aktualisierungsabfrage erfolgreich war oder nicht?

  • Es wäre hilfreich, wenn Sie die Modelle posten würden update() Funktion. Ob $result wahr oder falsch ist, hängt davon ab, was diese Funktion zurückgibt.

    – Jeemusu

    22. März 2013 um 9:51 Uhr


Im crm_user_model->update()Rückkehr true oder false abhängig von der Ausgabe von CodeIgniter’s update() Funktion:

if ($this->db->update('mytable', $mydata)) {
    // Do some stuff
    return true;
} else {
    // Do some stuff
    return false;
}

Oder wenn Sie in Ihrem Modell nichts weiter tun müssen, tun Sie dies einfach:

return $this->db->update('mytable', $mydata);

Wie kann ich erkennen dass eine Abfrage zum Erstellen Aktualisieren
mickmackusa

Ich habe ein Anliegen und einen Rat.

  1. Regler: Sie sollten das nicht passieren $user_id Wert für Ihren delete Controller über die URL. (wie zum Beispiel site/ci/delete/99) Wann immer Sie Daten in die Datenbank/den Server “schreiben”, sollten Sie nur verwenden $_POST um die Daten auf die Serverseite zu übertragen.

    public function softDeleteUser(): void
    {
        $userId = $this->input->post('user_id');
        if (!$userId) {
            add_flash_message('alert', 'Required data not supplied');
        } elseif (!$this->Crm_user_model->update($userId, ['deleted' => true])) {
            add_flash_message('alert', 'Failed to soft delete user');
        } else {
            add_flash_message('info', 'Soft deleted user');
        }
    }
    

    Wenn nein user_id ist dann POST’ed $userId wird als deklariert null.

    Wenn Ihr Datenbankschema keinen booleschen Wert speichern kann (true), dann ist es üblich zu verwenden 1 und 0 als boolesche Äquivalente.

    Ich ziehe es vor, alle negativen/fehlerhaften/nicht erfolgreichen Ergebnisse vor den erfolgreichen zu schreiben, wenn ich Bedingungsblöcke konstruiere.

    Eine Benutzerauthentifizierungs-/Autorisierungsprüfung vor dem Zulassen des vorläufigen Löschens eines Benutzers wäre ratsam, damit nur privilegierte Benutzer die Berechtigung haben, diese Aktion durchzuführen.

  2. Modell: Ihre Abfrage sollte ausschließlich im Modell erfolgen. Da eine Abfrage möglicherweise keine Syntaxfehler enthält, aber auch keine Änderung an der Datenbank vornimmt, müssen Sie den Vorgang an zwei Stellen überprüfen.

    Betrachten Sie Situationen wie:

    1. der $userId die an den Controller übergeben wird, existiert nicht in der Datenbank oder
    2. die Zeile, die die enthält $userId ist bereits “vorläufig gelöscht”.

    In beiden Fällen schlägt die Abfrage nicht fehl, aber es gibt keine betroffenen Zeilen. Dies sind relevante Vorkommnisse, von denen Ihr Skript unterscheiden kann tatsächlich ändernde Aktualisierungen.

    public function update(int $userId, array $newData): int
    {
        // ensure that no one can ever modify the user_id column value
        unset($newData['user_id']);
    
        if ($this->db->update('user_tablename', $newData, ['user_id' => $userId])) {
            $affectedRows = $this->db->affected_rows();
            if ($affectedRows) {
                // potentially log successful change if your system keeps track of change history
                // $this->Log->userChange($userId, $newData);
            }
            return $affectedRows;
        }
        return 0;
    }
    

    Wenn ein Syntaxfehler vorliegt, wird er in Ihren Fehlerprotokollen aufgeführt.

1001410cookie-checkWie kann ich erkennen, dass eine Abfrage zum Erstellen, Aktualisieren und Löschen in Codeigniter erfolgreich ist?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy