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

mickmackusa
Ich habe ein Anliegen und einen Rat.
-
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.
-
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:
- der
$userId
die an den Controller übergeben wird, existiert nicht in der Datenbank oder
- 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.
10014100cookie-checkWie kann ich erkennen, dass eine Abfrage zum Erstellen, Aktualisieren und Löschen in Codeigniter erfolgreich ist?yes
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