Advanced SQL - Praxistutorial 1 - Mitglied anbieten Teil 2
1. Die Abschnitte
- Vorwort
- Die Datenbank-Klasse
- Verbindungsaufbau
- Login
- Die grundsätzliche Vorgehensweise
- Die Übersichtsliste
- Mitglied auf dem Marktplatz anzeigen
- Mitglied anbieten Teil 1
- Mitglied anbieten Teil 2
- Direktangebot machen Teil 1
- Direktangebot machen Teil 2
- Tauschangebot machen Teil 1
- Tauschangebot machen Teil 2
- Tauschangebot machen Teil 3
2. Prepared Statements
Mit denen wollen wir uns hier ein wenig näher beschäftigen. Allerdings zeige ich euch nur eine(!) Möglichkeit, wie man damit arbeiten kann. Die anderen
kommen in den nächsten Tutorials. Dazu müssen wir die Db
-Klasse aber um eine Methode ergänzen.
public function preparedStatement($query, $params) {
$stmt = $this -> prepare($query);
for ($i = 0; $i < count($params); $i++) {
$stmt -> execute($params[$i]);
}
}
Erläuterung
Wie ihr an obigem Code erkennen könnt, muss es sich bei $params
um ein numerisches Array handeln. Gut, bei einem sauberen Code prüft
man zusätzlich noch mit is_array
, aber das habe ich mir erspart. Außerdem wird es sich Dank des weiteren Codes immer um eine Array handeln.
Das Procedere
Zuerst wird das Ganze mit $stmt = $this -> prepare($query);
vorbereitet. Aber warum das $stmt
? Wer sich diese Frage stellt,
sollte noch mal die Theorie durcharbeiten. Denn prepare
gehört zur PDOStatement
-Klasse
und muss deshalb über eine Variable referenziert werden. Anschließend werden alle Einträge des Arrays $params
per execute
in die Datenbank geschrieben.
HÄ!
Ja, mea culpa. Diese Möglichkeit habe ich in der Theorie völlig unterschlagen.
Und darum reiche ich sie hier nach. Wenn man ein Array in der unten beschriebenen Art und Weise aufbereitet, so ist möglich, die Daten direkt zu verarbeiten,
ohne den Weg über ein bindIrgendwas
-Methode zu gehen. Probiert das einfach mal anhand eigener Beispiele aus.
3. Die Methode putOnMarket
... gehört zur Market
-Klasse. Aufgerufen wird sie in der index.php
über die Bedingung if ('sell' == $_POST['do'])
.
Denn dabei handelt es sich um das hidden
-Feld, das wir im vorherigen Abschnitt in das Formular eingebaut haben.
4. Aufbau des SQL-Statements
Hier wird in diesem Fall für die Platzhalter der Doppelpunkt als "Kennung" benutzt.
public function putOnMarket() {
$query = 'INSERT INTO
markt (besitzer, mitglied, preis)
VALUES
(:besitzer, :mitglied, :preis)';
}
5. Die Aufbereitung
foreach ($_POST['sell'] as $key => $value) {
if (!empty($value)) {
$settings[] = array (
':besitzer' => $_SESSION['login'],
':mitglied' => $key,
':preis' => $value
);
}
}
Erläuterung
Im vorherigen Abschnitt wurden die Namen der einzelnen Textfelder als Array angelegt ($input = '<input type="text"
name="sell['.$result[$i]['mid'].']" />';
). Und das bedeutet, dass alle(!) Felder übertragen werden, auch wenn sie keine Werte haben.
Darum sollte man tunlichst eine Prüfung darauf vornehmen, hier mit if (!empty($value))
.
Dann bauen wir ein numerisches Array auf, das wiederum ein assoziatives Array beinhaltet. Die Indizes sind identisch mit den Platzhaltern aus dem SQL-Statement. Ach ja, den Doppelpunkt kann man bei den Indizes auch weglassen und es funktioniert trotzdem. Warum weiß ich im Moment auch noch nicht genau.
6. Daten an Methode übergeben
Der Rest ist ein Mäusefurz. Query und Array an die Methode preparedStatement
übergeben und fertig.
$this -> db -> preparedStatement($query, $settings);
7. Der Aufruf
... läuft bekanntlich in der index.php
ab.
if ('sell' == $_POST['do']) {
$market -> putOnMarket();
}
Bietet jetzt einfach mal einen oder mehrere Mitspieler an und schaut dann in der Datenbank(!) nach, ob die Daten vorhanden sind.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt