Advanced SQL - Praxistutorial 1 - Tauschangebot machen 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. Jetzt kommt es ganz dicke
Jepp, denn nun arbeiten wir mit Prepared Statements in Kombination mit Transaktionen. Außerdem haben wir noch einen üblen Fehler in unserer Datenbank-Modellierung. Und das müssen wir jetzt ausbaden.
3. Daten vorbereiten
Schritt 1
Zuerst benötigen wir gemäß unserem Datenmodell (tatsächlich der Dativ, hab ich nachgelesen) auf jeden Fall
einen Eintrag in der Tabelle angebot
. Und das muss zuerst geschehen, weil wir die insert_id
für die Tabelle tausch
brauchen. Darum beginnt die Methode doSwapOffer
auch so.
public function doSwapOffer() {
if (0 < $_POST['offer_money']) {
$price = $_POST['offer_money'];
}
else if (0 < $_POST['demand_money']) {
$price = $_POST['demand_money'] * - 1;
}
else {
$price = 0;
}
$querries['angebot'] = 'INSERT INTO
angebot (von, an, fuer, preis)
VALUES (:von,:an,:fuer,:preis)';
$settings['angebot'] = array (
'von' => $_SESSION['login'],
'an' => $_POST['to'],
'fuer' => 0,
'preis' => $price
);
}
Erläuterung
In der Bedingung prüfen wir zunächst, ob ein Gildenmeister bei diesem Tauschangebot zusätzlich Gold anbietet oder fordert. Das brauchen wir für die kommenden Tutorials.
Da die Verarbeitung aller Daten in einem Rutsch erfolgen muss, bauen wir uns zwei Arrays zusammen. $queries
beinhaltet die SQL-"Vorlagen" für die
Prepared Statements und in $settings
speichern wir die Inhalte ab. Damit haben wir alle benötigen Daten für die Tabelle angebot
zusammen.
Ach ja, die Spalte fuer
bekommt ein 0
verpasst, da wir die Mitglieder später in die Tabelle tausch
schreiben.
Schritt 2
$queries['tausch'] = 'INSERT INTO
tausch
VALUES (:angebot,:mitglied,:typ)';
foreach ($_POST['from_swap'] as $key => $value) {
$settings['mitglied'][] = array (
':angebot' => '%d',
':mitglied' => $key,
':typ' => 'offer'
);
}
foreach ($_POST['to_swap'] as $key => $value) {
$settings['mitglied'][] = array (
':angebot' => '%d',
':mitglied' => $key,
':typ' => 'demand'
);
}
$this -> db -> transactExchangeOffer($queries, $settings);
Erläuterung
Hier gehen wir im Prinzip genau so vor, wie in Schritt 1. Zuerst wird das Prepared Statement gesetzt und dann packen wir die angebotenen sowie geforderten Mitglieder
ins Array $settings
. Wer das nicht begreift, sollte ich erst mal mit der entsprechenden Theorie vertraut machen.
'%d'
???
Um die Mitglieder später dem Datensatz in der angebot
zuordnen zu können, benötigen sie die entsprechende ID aus besagter Tabelle. Da aber der entsprechende
Eintrag zu diesem Zeitpunkt noch nicht vorhanden ist, arbeiten wir mit einem Platzhalter, den wir später ersetzen.
Zu guter Letzt rufen wir die Methode transactExchangeOffer
der Klasse Db
auf. Da die aber noch nicht existiert, wollen wir uns die als
Nächstes anschauen. Und da könnt ihr euch auf eine Überraschung gefasst machen, denn zunächst wird uns alles im die Ohren fliegen.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt