Advanced SQL - Praxistutorial 2 - Angebote an mich annehmen Teil 1
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. Was jetzt kommt
... habe ich euch vom Prinzip her schon im ersten Praxistutorial gezeigt. Hier wird es allerdings etwas komplizierter, da wir uns auf jeden Fall zumindest teilweise selber um die Datenintegrität kümmern müssen. Also auf was müssen wir achten, wenn wir ein oder sogar mehrere Angebot in einem Rutsch annehmen.
- Der Spieler wechselt die Gilde.
- Die Einnahmen der Gilde, die das Angebot annimmt, steigen um den angebotenen Preis.
- Die Einnahmen der Gilde, die das Angebot abgegeben hat, verringern sich um den angebotenen Preis.
- Der Spieler muss aus der Angebotsliste gelöscht werden.
Das gilt für alle(!) Angebote, die ein Gildenmeister annimmt. Und wie es in der Natur der Sache liegt, muss das nach dem Prinzip "Alles-oder-nichts" geschehen, da sonst die Daten nicht mehr in Ordnung sind. Man stelle sich nur mal das Geschrei der Zocker vor, wenn bei ihrer(!) Gilde die Einnahmen falsch sind. So was kann echte Kriege auslösen!
3. Die Methode acceptOffer
... sieht vom Grundaufbau daher so aus.
public function acceptOffer() {
$querries = array();
for ($i = 0; $i < count($_POST['id']); $i++) {
$querries[] = [query1];
$querries[] = [query2];
$querries[] = [query3];
}
if (!empty($querries)) {
$this -> db -> transact($querries);
}
}
Hinweis
Die [query1-3]
sind nur Platzhalter für die konkreten SQL-Statements. Da die (teilweise) ein wenig kompliziert sind, gehe ich darauf erst im nächsten
Abschnitt ein.
4. Die Methode transact
... kennt ihr ja schon aus dem ersten Praxistutorial. Ich liste sie nur der Vollständigkeit halber noch mal auf. Das Prinzip von Transaktionen sollte euch mittlerweile bekannt sein.
public function transact($queries) {
$success = true;
$this -> beginTransaction();
foreach ($queries as $key => $value) {
if (!$this -> change($value)) {
$success = false;
break;
}
}
if (false === $success) {
$this -> rollBack();
return false;
}
else {
$this -> commit();
return true;
}
}
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt