Layout

Lektion 12 - Auslesen der Mitglieder Seiten

Deine Mitglieder sind bereits angemeldet, aber was bringt es, wenn niemand außer dir das sehen kann.

 

12.1. MySQL Anweisung SELECT

Bevor du etwas ausliest, solltest du dir einen Plan machen, wie das geschehen soll. Du kennst die Daten in deiner MySQL Tabelle, und diese müssen nun auf die Seite. Eine Möglichkeit sähe z. B. so aus:

  Name [eMail]
Geburtstag: Geburtstag
Avatar
Wohnort: Wohnort
Beitritt: Beitrittsdatum
 
Konto: Vermoegen €

Schreibe die HTML Tabelle erst einmal mit den Informationen für dich, was wo hinein soll, im PHP Quelltext.

// Die Seite mitglieder.php

echo "<table width='400' border='2' align='center' bordercolor='#000000'>
    <tr>
        <td colspan='3' bgcolor='#CCD0E0'>
            &nbsp; <b>Name</b> [eMail]
        </td>
    </tr>
    <tr>
        <td width='100'><b>Geburtstag:</b></td>
        <td>Geburtstag</td>

        <td rowspan='5' width='120' valign='top'>
            <div align='center'>Avatar</div>
        </td>
    </tr>
    <tr>
        <td><b>Wohnort:</b></td>
        <td>Wohnort</td>
    </tr>
    <tr>
        <td><b>Beitritt:</b></td>
        <td>Beitrittsdatum</td>
    </tr>
    <tr>
        <td colspan='2'>&nbsp;</td>
    </tr>
    <tr>
        <td><b>Konto:</b></td>
        <td>Vermoegen &euro;</td>
    </tr>
</table><br>"
;

 

12.1.1 Daten aus der MySQL Tabelle holen

Die Anweisung, unsere Mitglieder aus der Datenbank zu holen, sieht wie folgt aus:

$sql = "SELECT
                 Name,
                 eMail,
                 Wohnort,
                 Avatar,
                 Geburtstag,
                 Beitrittsdatum,
                 Vermoegen
           FROM
                 Mitglieder"
;

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

Unter SELECT wähst du, getrennt durch ein Komma, alle Felder aus, die ausgelesen werden sollen. Da das Passwort niemanden angeht, lesen wir es hier auch nicht aus. Unter FROM steht der Name der MySQL Tabelle, aus der etwas ausgelesen werden soll.
SELECT ist eine Anweisung, mit deren Ergebnis wir auf der PHP Seite arbeiten wollen. Deshalb weisen wir das Ergebnis der Funktion mysql_query einer Variablen, hier $result, zu. Beim Einfügen in die Tabelle hatten wir das nicht tun müssen.

 

12.2 Die while-Scheife

Wir werden die Daten mit einer while Schleife ausgeben. Ihr Aufbau sieht folgendermaßen aus:

while (true) {

    // mache was

}

Solange der Ausdruck, der der Schleife als Parameter übergeben wird, wahr ist, wird die Schleife wieder und wieder ausgeführt. In Verbindung mit unserer MySQL Tabelle funktioniert das z. B. so:

while(mysql_fetch_assoc($result)) {

    // Zeige Mitglieder an

}

Die Funktion mysql_fetch_assoc() liefert so lange den Wert true zurück, wie sie Daten aus unsere SELECT Anweisung, die wir der Variablen $result zugewiesen haben, erhält. Warum? Weil diese Funktion Zeile für Zeile unseres Ergebnisses ausliest.

Angefangen mit dem ersten Eintrag. Dort die Felder ID, Name, eMail, Wohnort, usw. Ist sie fertig, springt sie in die nächste Zeile und liest wieder alle Felder aus, die wir ihr aufgetragen haben. Wenn nun nur wir beide in deiner Mitglieder Tabelle stehen, gibt es nichts mehr zum Auslesen und mysql_fetch_assoc() liefert den Wert 'false' zurück. Die while-Schleife wird nun nach 2 Durchläufen verlassen.

Damit wir etwas vom zeilenweise Auslesen der Daten haben, weisen wir auch dieser Funktion eine Variable zu. Über $row['Feldname'] können wir nun auf die einzelnen Felder des Tabelleneintrags, der gerade durchlaufen wird, zugreifen.

while($row = mysql_fetch_assoc($result)) {

    // Zeige Mitglieder an

}

 

12.3 Die fast fertige Mitglieder Seite

Mit dieser while-Schleife werden nun alle Einträge aus der Tabelle Mitglieder ausgelesen. Der Inhalt der Felder wird in der Variablen $row gespeichert, der wir beim Auslesen sagen, was sie aus dem Eintrag auslesen soll. Diese Informationen bekommen wir nun durch eine gewöhnliche Verkettung mit dem Punkt-Operator in unsere HTML Mitglieder Tabelle.

// Die Seite mitglieder.php

$sql = "SELECT
                 Name,
                 eMail,
                 Wohnort,
                 Avatar,
                 Geburtstag,
                 Beitrittsdatum,
                 Vermoegen
           FROM
                 Mitglieder"
;

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

while($row = mysql_fetch_assoc($result)) {

    echo "<table width='400' border='2' align='center' bordercolor='#000000'>
       <tr>
           <td colspan='3' bgcolor='#CCD0E0'>
               &nbsp; <b>"
.$row['Name']."</b>
                           [<a href='mailto:"
.$row['eMail']."'>eMail</a>]
           </td>
       </tr>
       <tr>
           <td width='100'><b>Geburtstag:</b></td>
           <td>"
.$row['Geburtstag']."</td>

           <td rowspan='5' width='120' valign='top'>
               <div align='center'>
                  <img src='"
.$row['Avatar']."' border='0'>
               </div>
           </td>
       </tr>
       <tr>
           <td><b>Wohnort:</b></td>
           <td>"
.$row['Wohnort']."</td>
       </tr>
       <tr>
           <td><b>Beitritt:</b></td>
           <td>"
.$row['Beitrittsdatum']."</td>
       </tr>
       <tr>
           <td colspan='2'>&nbsp;</td>
       </tr>
       <tr>
           <td><b>Konto:</b></td>
           <td>"
.$row['Vermoegen']." &euro;</td>
       </tr>
</table><br>"
;

}

Die Mitgliedertabelle wird in der while-Schleife nun 2 mal ausgegeben, einmal mit deinen Daten, einmal mit meinen Daten. Aber perfekt ist es noch nicht. Sehen wir, was es noch zu beachten gibt.

 

12.4 ORDER BY

Die Tabelle wird nun von oben nach unten ausgelesen. Wir hätten es aber lieber etwas sortiert. Das geschieht mit der Anweisung ORDER BY.

$sql = "SELECT
                 Name,
                 eMail,
                 Wohnort,
                 Avatar,
                 Geburtstag,
                 Beitrittsdatum,
                 Vermoegen
           FROM
                 Mitglieder
           ORDER BY
                 Name ASC"
;

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

ORDER BY kann auf zweierlei Weise sortieren.

ASC
DESC
aufsteigend
absteigend

Und es kann alles sortieren. Im Beispiel wird die Tabelle nun nach dem Feld 'Name' aufsteigend sortiert, d. h. von Anna über Monika bis nach Zeus, in der Reihenfolge der Buchstaben. Name DESC wäre absteigen, also von Zeus über Monika nach Anna.
Wir können auch unsere ID des Mitglieds nutzen. Das zuletzt angemeldete Mitglied soll ganz oben stehen => ORDER BY ID DESC. Von 17, unserem letzten Mitglied, über 5 bis nach 1, also dem, der sich zuerst angemeldet hat. Nach was sortiert werden soll, muss nicht unbedingt unter SELECT stehen.

 

12.5 MySQL Funktion date_format()

Wie du siehst, werden der Geburtstag und das Beitrittsdatum des Mitglied ausgelesen, wie es in der MySQL Tabelle steht. Doch zum Glück gibt es Funktionen, die ein Datum sortieren können. Beim Auslesen einer MySQL Tabelle ist es date_format().

// Der Aufbau

date_format(Feldname, 'Datum Format') as Bezeichnung

Der Funktion werden 2 Parameter übergeben: Das MySQL Tabellen Feld, in dem ein Datum steht, das formatiert werden soll, und der Aufbau des zu formatierenden Datums. Nach der Funktion wird dem Ergebnis der Funktion, das Datum also, eine Bezeichnung zugewiesen. Laut Aufbau Überblick wäre das Datum nun während der while-Schleife in $row['Bezeichnung'] gespeichert.

 

12.2.1 Die Einzelteile eines Datums

Nun bauen wir uns unser Datum zusammen. Sehen wir uns aber erst einmal die Bausteine an.

Baustein

%d
%D
%m
%M
%y
%Y

%h
%H
%i
%s
Entspricht

Tag
Tag
Monat
Monat
Jahr
Jahr

Stunden
Stunden
Minuten
Sekunden
Format

01 bis 31
1st bis 31th
01 bis 12
January bis December
01 bis 99
Jahreszahl z.B. 2006

01 bis 12
01 bis 24
01 bis 59
01 bis 59

Da PHP und MySQL in der englischen Sprache gehalten sind, ist auch das Format größtenteils englisch. Den Zahlen kann man das allerdings zu unserem Glück nicht ansehen. Wie wird nun ein deutsches Standart Datum zusammengebaut?

Tag.Monat.Jahr Stunden:Minuten:Sekunden Uhr
%d.%m.%Y %H:%i:%s Uhr

Tag Monat und Jahr sind durch einen Punkt getrennt, eine Uhrzeit durch einen Doppelpunkt. Der 2. Parameter in unserer Funktion date_format() ist in Anführungszeichen ' ' eingebettet. Dort hinein können wir schreiben, was wir wollen. Anhand der % Zeichen vor den Formaten erkennt MySQL, was formatiert werden soll. Für unsere Mitglieder Tabelle brauchen wir keine Uhrzeit, also lassen wir sie hier weg.

$sql = "SELECT
                 Name,
                 eMail,
                 Wohnort,
                 Avatar,
                 date_format(Geburtstag, '%d.%m.%Y') as Geburtstag,
                 date_format(Beitrittsdatum, '%d.%m.%Y') as Beitrittsdatum,
                 Vermoegen
           FROM
                 Mitglieder
           ORDER BY
                 Name ASC"
;

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

Ich ziehe es vor, das Ergebnis der Funktion dem gleichen Namen wie sein Feld zuzuweisen, so brauchst du nun die $row Variablennamen von Geburtstag und Beitrittsdatum nicht mehr anpassen.

 

12.6 Die Funktion substr()

Das Bild des Avatares wird nur angezeigt, wenn die URL mit http:// beginnt. So ist es nun einmal mit dem Einfügen von Bildern im HTML Code, die nicht auf unserem eigenen Server lagern. Manche Menschen geben eine URL oft ohne http:// an. Bei Bildern, wird das selten der Fall sein, bei Webseiten dafür um so öfter. Mit der Funktion substr() kannst du Teilstrings auslesen.

$String = "Online Game Portal";

echo substr($String, 2);
    // Gibt alles nach dem 2. Zeichen aus "line Game Portal"

echo substr($String, 0, 4);
    // Gibt alles vom 0. bis zum 4. Zeichen aus "Onli"

echo substr($String, 8, 18);
    // Gibt alles vom 8. bis zum 18. Zeichen aus "ame Portal"

echo substr($String, -5);
    // Gibt die letzten 5 Zeichen aus "ortal"

echo substr($String, 0, -10);
    // Gibt alles bis auf die letzten 10 Zeichen aus "Online G"

echo substr($String, 5, -4);
    // Gibt alles ab dem 5. bis auf die 4 letzten Zeichen aus "e Game Po"


$URL = "www.engelschule.de";

if (substr($URL, 0, 7) == "http://") {
    echo "<a href='".$URL."'>;
} else {
    echo "<a href='http://".$URL."'>;
}

Wenn die ersten 7 Zeichen der angegebenen URL 'http://' sind, steht das http:// bereits in der URL. Ist das nicht der Fall, setzt es bei der Ausgabe selbst vor den Link.

 

12.6.1 Anpassen des Avatars

...

<td rowspan='5' width='120' valign='top'>
    <div align='center'>";

        if (substr($row['Avatar'], 0, 7) == "http://") {
           echo "<img src='".$row['Avatar']."' border='0'>";
        } else {
            echo "<img src='http://".$row['Avatar']."' border='0'>";
        }

    echo "</div>
</td>

...


hr

12.7 Übungen

12.7.1 Deinem Besucher war es freigestellt, ob er bei der Anmeldung sein Geburtsjahr angibt oder nicht. Hat er das nicht getan, wurde er laut Ausgabe auf der Webseite nun im Jahre 1900 geboren. Mit der Funktion substr() kannst du überprüfen, ob die letzten 4 Zeichen des Geburtstags 1900 sind. Schreibe eine if-Abfrage. Wenn das Jahr 0000 ist, sollen nur Tag und Monat ausgegeben werden (ebenfalls mit Hilfe eines Substrings der Funktion substr()), ansonsten das ganze Datum.

12.7.1 Füge die Mitgliederseite in deine Übungsseite ein.

« zurück Inhalt | Fragen       Kurs weiter »
Layout