Advanced SQL - Praxistutorial 2 - Angebote von mir anzeigen
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 Methode
... mit der wir uns nun beschäftigen, schimpft sich getMyOffers
und gehört zur Klasse Market
. Aber das solltet ihr eigentlich selber
erkennen, wenn ihr in der Hauptnavigation auf "Angebote von mir" klickt.
3. Und jetzt mit Bindung
Im ersten Praxistutorial haben wir uns schon ein wenig mit Prepared Statements beschäftigt. Und jetzt zeige ich euch mal, wie man zuerst den Query vorbereitet und dann in einem Rutsch ausführt.
Der Query
Diesmal arbeiten wir mit "konkreten" Platzhaltern, nämlich :myid
und :compid
. Der Rest sollte eigentlich klar sein.
$query = 'SELECT
a.id,
m1.name AS an,
m2.name AS fuer,
a.preis
FROM
angebot a
INNER JOIN
mitglied m1 ON a.an = m1.id
INNER JOIN
mitglied m2 ON a.fuer = m2.id
WHERE a.von = :myid
AND a.fuer != :compid';
Ein Hinweis
Eigentlich ist der zweite Platzhalter :compid
überflüssig wie ein Kropf(f). Ich habe ihn auch nur eingebaut, um euch etwas zu zeigen.
4. Daten aufbereiten und übergeben
$params = array(
':myid' => array($_SESSION['login'], PDO::PARAM_INT),
':compid' => array(0, PDO::PARAM_INT)
);
$result = $this -> db -> selectWithBind($query, $params);
Erläuterung
Zunächst bauen wir uns ein einfaches Array. Der Index beinhaltet den Platzhalter des Queries und das folgende Array besteht aus dem gewünschten Wert und dem
PDO-Typ. Übersetzt bedeutet das für die Abfrage: "Hol mir alle Angebote, wo der Anbieter meinen Session-Wert hat und nicht der Computer (0) ist.
Dann übergeben wir den Query und besagtes Array an die Methode selectWithBind
der Klasse Db
.
Die Methode selectWithBind
public function selectWithBind($query, $params) {
$stmt = $this -> prepare($query);
foreach ($params as $key => $value) {
$stmt -> bindParam($key, $value[0], $value[1]);
}
$stmt -> execute();
return $stmt -> fetchAll(FETCH);
}
Erläuterung
Da ich auf die grundsätzliche Vorgehensweise bei Prepared Statements schon im vorherigen Tutorial eingegangen bin konzentrieren wir uns hier nur auf die
wichtigen Abschnitte. Wichtig ist vor allem die Schleife. Denn da durchlaufen wir das Array $params
und "fügen" die Werte mittels
bindParam
in die Abfrage ein. Nach dem execute
werden dann die Daten über die PDO-Methode fetchAll
geholt.
5. Die Ausgabe
Also, zu dem Mäusefürz sage ich gar nichts mehr. Achtet nur auf die checkbox
, die Parameter im action
-Attribut des Formulars und beim
Link in der Schleife.
$html = '<form action="index.php?do=myoffer" method="post">
<table cellspacing="0" cellpadding="0">
<tr>
<th></th>
<th>An</th>
<th>Für</th>
<th>Gold</th>
</tr>';
for ($i = 0; $i < count($result); $i++) {
$link = 'index.php?do=modify&id='.$result[$i]['id'];
$html .= '<tr>
<td>
<input type="checkbox" name="id[]" value="'.$result[$i]['id'].'" />
</td>
<td>
<a href="'.$link.'">'.$result[$i]['an'].'</a>
</td>
<td>'.$result[$i]['fuer'].'</td>
<td>'.$result[$i]['preis'].'</td>
</tr>';
}
$html .= '<tr>
<td colspan="5">
<input type="hidden" name="do" value="cancel" />
<input type="submit" value="Zurückziehen" />
</td>
</tr></table></form>';
return $html;
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt