Hauptmenü

Untermenü

Advanced SQL - Praxistutorial 1 - Tauschangebot machen Teil 2

1. Die Abschnitte

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 ($_POST['offer_money']) {
    $price $_POST['offer_money'];
  }
  else if ($_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