Advanced SQL - Praxistutorial 3 - Tauschangebote annehmen Teil 2
1. Die Abschnitte
- Vorwort
- Übersicht
- Tauschangebote anzeigen Teil 1
- Tauschangebote anzeigen Teil 2
- Überlegungen
- Tauschangebote zurückziehen oder ablehnen
- Tauschangebote annehmen Teil 1
- Tauschangebote annehmen Teil 2
- Tauschangebote annehmen Teil 3
2. Die Methode acceptOffer
... baut sich ganz einfach auf. Denn wir arbeiten alle Angebote Stück für Stück ab. Mit der Methode getSwapOfferDetails
holen wir uns zunächst
die notwendigen Infos des jeweiligen Angebots.
private function acceptOffer() {
for ($i = 0; $i < count($_POST['accept']); $i++) {
$offerinfo = $this -> getSwapOfferDetails($_POST['accept'][$i]);
}
}
3. Angebotsinfos ziehen
Das sollte nun wirklich kein Problem mehr für euch sein. Und dementsprechend pupsig ist auch der Code. Wir holen uns also pro Angebot alle betroffenen Spieler.
private function getSwapOfferDetails($id) {
$query = 'SELECT
a.id,
a.preis,
t.mitglied,
t.typ,
g1.id AS gildevon,
g2.id AS gildean
FROM
angebot a
LEFT JOIN
tausch t ON (t.angebot = a.id)
INNER JOIN
mitglied m1 ON (m1.id = a.von)
INNER JOIN
gilde g1 ON (g1.id = m1.gilde)
INNER JOIN
mitglied m2 ON (m2.id = a.an)
INNER JOIN
gilde g2 ON (g2.id = m2.gilde)
WHERE a.id = '.$id;
$offer = $this -> db -> selectMultiple($query);
return $offer;
}
4. Angebote löschen
$offerinfo = $this -> getSwapOfferDetails($_POST['accept'][$i]);
foreach($offerinfo as $value) {
$players[] = $value['mitglied'];
}
if ($offerinfo) {
$query = 'DELETE FROM angebot WHERE id = '.$_POST['accept'][$i];
$num = $this -> db -> change($query);
}
if (!$offerinfo || !$num) {
$error[] = 'Angebot mit der ID '.$_POST['accept'][$i].' kann nicht mehr angenommen werden';
}
Erläuterung
Hierzu muss ich euch das eine oder andere kundtun. Zunächst mal sammeln wir alle betroffenen Spieler im Array §players
. Das benötigen später noch.
Dann prüfen wir mir if ($offerinfo)
, ob das Angebot überhaupt existiert. Wenn dem so ist, dann wird es gelöscht. Als Rückgabewert sollten wir
hier immer eine 1
zurückbekommen. Wenn in beiden Fällen nichts mehr da sein sollte, so ist schon jemand zuvorgekommen. Dann sammeln wir die
Fehlermeldungen pro Angebot im Array $error
.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt