Layout

Lektion 15 - Tabellen verknüpfen

Du hast deine Anmeldung und Mitgliederseiten, kannst Gästebücher schreiben, Shoutboxes, ja sogar Foren. Was kann es sein, das noch etwas fehlt? Nichts neues jedenfalls. Unter 'Tabellen verknüpfen' versteht man nichts anderes, als in einer Tabelle den selben Eintrag einzufügen, wie es ihn in einer anderen Tabelle gibt. Wir haben z. B. die ID, die jedes Mitglied identifiziert.

 

15. 1 Items für Mitglieder

Was auch immer du für ein Browsergame machen möchtest, dein Mitglied bekommt bestimmt Items. Das kann Nahrung sein, Waffen, Spielzeug, aber auch Trading Cards und Token. Wenn du mit diesen Items noch etwas machen lassen möchtest, wie z. B. aufessen, nimmst du für jede Item Katgorie eine eigene Tabelle. Zum Beispiel die Tabelle 'Nahrung':

Feld
Typ
Länge
Standart
Extra
Primärschlüssel
           
Nummer
int
11
 
auto_increment
X
ID
int
11
     
Item
varchar
20
     

Unter ID kommt die ID des Mitglieds. So kannst du mit der Anweisung WHERE ID = '".$_GET['Mitglied']."' auslesen, was dieses Mitglied in der Tabelle hat.

Unter Item schreibst du den Namen des Items. Wenn du alle Sachen in einem Ordner hast, kannst du die Bezeichnung in den Pfad zum Bild beim Auslesen einfügen. Durch eine AND Abfrage in der WHERE Anweisung kannst du auch nachschauen, ob ein Mitglied ein bestimmtes Item hat.

WHERE ID = '".$_GET['Mitglied']."' AND Item = 'eisbecher'

Liefert mysql_num_rows() 0 Einträge vorhanden, hat er es nicht.

Was ich hier 'Nummer' genannt habe, ist eigentlich die ID des Items. Alles, was in die Tabelle eingefügt wird, soll eine eigene Nummer bekommen. So kannst du dieses Item mit der DELETE Anweisung gezielt löschen, wenn es z. B. aufgegessen wurde.

 

An Items gelangt dein Mitglied z. B. in einem Shop. Oder aber bei den Spielen. Suche dir einige Bilder raus und speicher sie im selben Ordner ab. Diese Bilder fügst du in ein Array ein. Ein anderes Array kannst du für die Preise nutzen, wenn du sie auf dem gleichen Index setzt. Schreibe deine ganzen Items für deine Webseite am besten auf eine Extra Seite und füge sie mit include ein, wo etwas davon gebraucht wird.

// Die Seite items.php

$Nahrung = array ("orangensaft", "sushi", "toertchen", "mais", "trauben",
"obstschale", "hotdog", "hamburger", "pepsi", "eis");

$NahrungPreise = array ("3", "7", "5", "2", "2",
"6", "5", "5", "3", "4");

Wenn du nun einen Shop machst und jemand etwas mit dem Namen "mais" kauft, kannst du den Preis mit der str_replace() Funktion ermitteln.

$Preis = str_replace($Nahrung, $NahrungPreise, $Artikel);

So, wie wir es auch mit unseren Smilies gemacht haben. Nun muss dein Mitglied für den Kauf natürlich auch noch zahlen:

$sql = "UPDATE
                 Mitglieder
           SET
                  Vermoegen = Vermoegen - ".$Preis."
         WHERE
                  ID = '"
.$_SESSION['ID']."'";

mysql_query($sql) OR die(mysql_error());

$sql = "INSERT INTO Nahrung
                  (ID, Item)
            VALUES
                  ('"
.$_SESSION['ID']."',
                   '"
.$Artikel."')";

mysql_query($sql) OR die(mysql_error());

Dafür ziehst du vom vorhandenen Vermögen den Preis ab. Vorher solltest du aber das Vermögen deines Mitglieds auslesen und überprüfen, ob es so viel Geld überhaupt hat.

 

15. 2 Spielgewinne

Bei den Spielen der Lektionen 7 bis 10 hast du dir immer eine eMail zukommen lassen, wenn dein Mitglied etwas gewonnen hat. Es wird Zeit, dass wir die Ausgabe im Falle eines Gewinnes aktualisieren. Z.B. kann dein Mitglied nun beim Glücksspiel 10 € gewinnen, wenn es richtig liegt.

$sql = "UPDATE
                 Mitglieder
           SET
                  Vermoegen = Vermoegen + 10
         WHERE
                  ID = '"
.$_SESSION['ID']."'";

mysql_query($sql) OR die(mysql_error());

echo "Du hast 10 € gewonnen!";

Vielleicht gewinnt es aber auch etwas zu essen.

include "items.php";

srand ((float) microtime() * 10000000);
$Nahrung1 = array_rand ($Nahrung);

$sql = "INSERT INTO Nahrung
                  (ID, Item)
            VALUES
                  ('"
.$_SESSION['ID']."',
                   '"
.$Nahrung[$Nahrung1]."')";

mysql_query($sql) OR die(mysql_error());

echo "Du hast etwas gewonnen!<br><br>";
echo "<img src='bilder/".$Nahrung[$Nahrung1].".jpg'>";

Oder aber Geld oder Nahrung

$Gewinn = array ("Euro", "Nahrung");

srand ((float) microtime() * 10000000);
$Zufall = array_rand ($Gewinn);

if ($Gewinn[$Zufall] == "Euro") {

    $sql = "UPDATE
                     Mitglieder
               SET
                      Vermoegen = Vermoegen + 10
             WHERE
                      ID = '"
.$_SESSION['ID']."'";

    mysql_query($sql) OR die(mysql_error());

    echo "Du hast 10 € gewonnen!";

}

if ($Gewinn[$Zufall] == "Nahrung") {

include "items.php";

srand ((float) microtime() * 10000000);
$Nahrung1 = array_rand ($Nahrung);

    $sql = "INSERT INTO Nahrung
                      (ID, Item)
                VALUES
                      ('"
.$_SESSION['ID']."',
                       '"
.$Nahrung[$Nahrung1]."')";

    mysql_query($sql) OR die(mysql_error());

    echo "Du hast etwas gewonnen!<br><br>";
    echo "<img src='bilder/".$Nahrung[$Nahrung1].".jpg'>";

}

 

15.3 Die Funktion date()

Sicher erinnerst du dich an die MySQL Funktion datetime(). PHP kann da mithalten und hat mehr als einen Timestamp zu bieten. In der Funktion date() stecken das aktuelle Datum und die Uhrzeit.

$Datum = date("d.m.Y");
    echo $Datum;

    // Gibt z.B. 18.04.2006 aus

$Datum = date("d.m.y H:i");
    echo $Datum;

    //Gibt z.B. 18.04.06 22:12 aus

Im PHP Code kann man das z.B gut brauchen, um das Datum Format im MySQL Tabellen Eintrag, das mit NOW() eingefügt wurde, nachzustellen: date("Y-m-d")

 

15.4 Nur ein Spiel am Tag!

Wir wollen uns eine MySQL Tabelle erstellen, die alle Spiele speichert, die dein Mitglied spielt, und um Mitternacht wieder löscht.

Die Tabelle Spiele

Feld
Typ
Länge
     
ID
int
11
Spiel
varchar
2
Datum
date

Unter ID soll die ID des Mitglieds eingefügt werden, unter Spiel das Spiel. Am einfachsten ist es, wenn du sie durchnummerierst, z. B. Glücksspiel ist 1, Tombola 2, etc. Unter Datum wird das Datum eingetragen, wann dein Mitglied gespielt hat, also wann der Eintrag in die Datenbank erfolgte.

$Datum = date("Y-m-d");

$sql = "DELETE FROM
                Spiele
            WHERE
                Datum != '"
.$Datum."'";

mysql_query($sql) OR die(mysql_error());

 

if ($action == "spielen") {

    if (isset($_SESSION['ID'])) {

        $sql = "SELECT
                            *
                      FROM
                            Spiele
                     WHERE
                            Spiel = '1' AND ID = '"
.$_SESSION['ID']."'";

        $result = mysql_query($sql) OR die(mysql_error());

        while($row = mysql_fetch_assoc($result)) {
            echo "Du hast das Spiel heute schon gespielt.";
            $Gespielt = 1;
        }

        if ($Gespielt != 1) {

        $sql = "INSERT INTO Spiele
                        (ID, Spiel, Datum)
                   VALUES
                         ('"
.$_SESSION['ID']."',
                            '1',
                            NOW())"
;

        mysql_query($sql) OR die(mysql_error());

        // Werte das Spiel aus

        }

    }

}

  • Am Anfang der Seite werden alle Einträge aus der Tabelle gelöscht, die ein anderes Datum im Feld Datum stehen haben als es heute ist. Das gilt für alle Spiele, weil wir alle gleich einmal am Tag spielen lassen wollen. Es ist wichtig, dass das als erstes passiert, damit dein Mitglied seinen Eintrag ggf. selbst rauskicken kann, wenn vor ihm noch niemand das Löschen der Tabelle aufgerufen hat.

  • In diesem Falle hier darf dein Mitglied nun erst einmal spielen und sieht dann, dass es ja eigentlich gar nicht durfte.

  • Wenn es einen Eintrag in der Tabelle mit dem Spiel 1 und der ID des Mitglieds gibt, dann wird die while-Schleife durchlaufen, ansonsten ignoriert.

  • Spielt dein Mitglied das erste mal Tag, wird der Eintrag des Spiels nun in die Tabelle gefügt.

  • Spielt er anschließend nochmal (oder klickt auf Neuladen....) wird der Eintrag aus der Tabelle gelesen und die Fehlermeldung ausgegeben.


hr

15.5 Übungen

15.5.1 Suche dir Items aus, die es auf deiner Übungsseite geben soll, und füge sie und ihre Preise in Arrays ein. Verkaufe diese Items in einem Shop an deine eingeloggten Mitglieder, wenn sie genug Geld haben. Du kannst das "Einkaufen" entweder über Formulare oder Links realisieren.

15.5.2 Füge einen weiteren Itemsatz ein und füge in jedes Spiel unterschiedliche Gewinnmöglichkeiten ein. Items 1, Items 2 oder Geld.

15.5.3 Änder deine Spiele so, dass man sie nur noch einmal am Tag spielen kann.

15.5.4 Gib die Items deiner Mitglieder auf ihrer Seite profil.php aus.

« zurück Inhalt | Fragen       Kurs Ende    
Layout