Advanced SQL - Praxistutorial 2 - Angebote von mir zurückziehen
1. Die Abschnitte
- Vorwort
- Übersicht
- Angebote von mir anzeigen
- Angebote von mir zurückziehen
- Angebote von mir ändern
- Angebote an mich anzeigen
- Angebote an mich ablehnen
- Angebote an mich annehmen Teil 1
- Angebote an mich annehmen Teil 2
- Ein paar Hinweise
2. Die Vorgehensweise
... ist ja schon aus dem Formular ersichtlich. Wir markieren eines oder mehrere unserer Angebote und klicken dann auf den submit
-Button.
Der entsprechende Parameter für die Übergabe der Aktion steckt wie gehabt im hidden
-Feld namens do
.
3. Die Methode cancelOffer
... gehört natürlich wieder in die Klasse Market
. Und so wahnsinnig groß ist sie nun auch nicht.
public function cancelOffer() {
$query = 'DELETE FROM angebot WHERE id = ?';
$params = array();
for ($i = 0; $i < count($_POST['id']); $i++) {
$params[] = array(1, $_POST['id'][$i], PDO::PARAM_INT);
}
$result = $this -> db -> deleteWithBind($query, $params);
}
Erläuterung
Die Vorgehensweise ist praktisch identisch mit der aus dem vorherigen Kapitel. Nur arbeiten wir diesmal mit dem Fragezeichen als Platzhalter. Und übergeben entsprechende des SQL-Statements nur einen Parameter. Wegen Letzterem wird dann auch nur ein stinknormales numerisches Array erzeugt, das wiederum ein Array mit drei Werten enthält.
Der erste (die hardcodiert 1
) steht für die Nummer des Platzhalters innerhalb des Queriers. Und da wir nur einen haben, können wir hier so vorgehen.
Auch wenn es nicht die feine englische Art ist. Der zweite Wert steht für die übermittelten POST
-Werte aus den Checkboxen und der dritte beinhaltet
den Typ, also INT
.
4. Die Methode deleteWithBind
... ist auch ziemlicher Pillepups. Anstelle von bindParam
arbeiten wir hier mit bindValue
, damit ihr die Methode auch mal kennen lernt.
public function deleteWithBind($query, $params) {
$stmt = $this -> prepare($query);
for ($i = 0; $i < count($params); $i++) {
$stmt -> bindValue($params[$i][0], $params[$i][1], $params[$i][2]);
$stmt -> execute();
}
}
Erläuterung
Das Prinzip ist fast dasselbe wie in der Methode selectWithBind
aus dem vorherigen Abschnitt. Der einzige Unterschied besteht darin, dass wir bei
bindParam
nur einen Datensatz mit mehreren Parametern suchen, somit auch das execute
nach der Schleife ausführen, während hier
mehrere Datensätze mit einem Parameter gelöscht werden sollen. Darum muss die Ausführung per execute
auch in der Schleife geschehen.
bindParam
versus bindValue
Zu dem Thema werde ich am Ende dieses Tutorials noch ein paar Worte sagen. Bis dahin müsst ihr euch ein wenig in Geduld üben.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt