Was kann man mit PHP machen? Artikel: Was ist PHP? Möchte man dynamische Seiten erstellen, so braucht man PHP. PHP steht für "PHP: Hypertext Preprocessor". PHP Befehle kann man direkt bei den HTML-Befehlen hinschreiben, allerdings muss die Dateiendung .php (oder .php3 / .php4) sein, sonst kann der Befehl nicht ausgeführt werden. PHP ist eine serverseitige Programmiersprache. Sie wird am Server "geparsed", das heißt, der Code wird vom Server direkt in z.B. einen HTML-Code umgewandelt und nur der HTML-Code wird dann an den Browser des Besuchers geschickt. Der Besucher kann also den PHP-Code niemals einsehen. Er kann ihn auch nicht runterladen (per Downloadmanager), außer wenn er ein FTP-Programm benutzt (dann braucht er aber das Passwort vom Server). Deswegen ist PHP ideal geeignet, Passwörter zu verstecken, weil diese Passwörter dann keiner Einsehen kann. Weil PHP eine serverseitige Programmiersprache ist, kann man sie auch nicht so einfach mit dem Browser aufrufen. Um einen PHP-Script aufzurufen, muss man sich erst auf dem eigenem PC einen virtuellen Server installieren. Dieser virtuelle Server muss den sogenannten PHP Intepreter enthalten, dieser führt die PHP Scripts aus und das Ergebnis, z.B. eine HTML-Seite, wird dann an den Besucher gesendet. PHP-Triad Um einen Virtuellen Server auf die eigene Festplatte zu kommen, muss man eigentlich einige Sachen Installieren und diese auch noch Konfigurieren. Dies ist sehr schwer, und zum Glück gibt es da noch PHP-Triad. PHP-Triad installiert einen Apache Server mit PHP und MySQL Unterstützung. Leider kostet die neuste Version davon Geld, aber die älteren Version findet man dennoch im Netz, und die einzelnen Sachen kann man leicht updaten. Siehe: Anfang Auch ein Vorteil ist, das PHP nicht Browser abhänig ist, also wenn der Script mit ihrem Browser funktioniert, dann funktioniert er auch bei allen anderen Browsern. Dadurch muss man seinen Code nicht mehr aufwendig testen. Dies bedeutet aber nicht, dass das Ergebnis des Codes bei allen gleich Aussieht, denn jeder Browser wandelt die HTML-Befehle anders um. PHP ist ein sogenannter Interpreter, dies bedeutet, das PHP den Code von oben nach unten liest. Deswegen muss man beim Schreiben des Codes immer auf die zeitliche Abfolge achten. PHP ist frei verfügbar und lizenzfrei benutzbar. Entwickelt werden Sprache und Interpreter von der so genannten PHP Group, einem Projektzusammenschluss von Programmierern. Was kann man mit PHP machen? Mit PHP kann man viel machen, auch wenn man die Sprache kaum beherrscht, kann man sie dennoch sinnvoll in eine Seite einbauen. Fast jedem ist bekannt, das man für ein Forum oder ein Gästebuch PHP braucht, aber mit PHP kann man auch News-Scripts, Links-Verwaltungen, Userbereiche, Chat-Systeme, Suchmaschinen, Statistiken, Rechnungen und vieles mehr machen. Es ist sogar möglich, dass eine super große Homepage aus 1 PHP-Seite besteht, aber dennoch aus unendlich Seiten besitzt. So etwas kann man per Datenbank (z.B MySQL) machen. Der User ruft dann nur bestimmte Einträge aus der Datenbank auf. Auch wenn man keine Datenbank besitzt, ist dies dennoch möglich, allerdings verliert man dann leicht den Überblick. Seite: 1 Was kann man mit PHP machen? PHP installieren PHP ist eine serverseitige Scriptsprache, das heißt, damit man PHP Programme bzw. die PHP Scripts ausführen kann, benötigt man einen Webserver. Zum Glück geht das installieren leichter als es sich anhört. Mit XAMPP installieren wir einen Apache Server auf den eigenen Rechner, dazu noch PHP, MySQL und vieles mehr. Lad dir auf der angegeben Seite die Installer-Version für Windows (sofern dies dein Betriebssystem sein sollte) runter. Solltest du keinen Breitbandanschluss besitzen, reicht auf die Lite-Version von XAMPP. Diese bietet allerdings keinen Installer an, deswegen musst du nach dem Entpacken der Archives (entweder Zip oder Exe-Archiv) die setup_xampp.bat aufrufen. Der Installer von XAMPP fragt, wohin man das Packet installiert haben möchte. Ich habe z.B. c:\xampp\ angegeben, andere Pfade sind auch möglich. Möchten wir jetzt unsere PHP-Scripts anschauen, so kopieren/speichern wir sie in den htdocs Ordner, z.B. liegt er so: c:\xampp\xampp\htdocs. Anschließend starten wir Xampp, das geht, indem wir die xampp_start.exe aufrufen und rufen unsere Scripts dann mit dem Internet Browser auf. Wenn wir den normalen Dateipfad (c:\xampp\...) benutzen wird der enthaltene PHP-Code nicht ausgeführt, deshalb müssen wir die Scripts über den Webserver abrufen. Dort wählen wir dann die PHP Datei aus und schon wird der Script ausgeführt. Tipp: Lösche die enthaltenen Dateien im Ordner htdocs, die Ordner können erhalten bleiben. So werden die PHP Dateien in einer Liste angezeigt. Wenn eine Fehlermeldung erscheint, dann versuche mal die komplette URL zur Seite anzugeben. Wenn ihr Unterordner im htdocs Ordner habt, dann muss der Name auch in der URL angegeben werden. Das war schon das ganze Geheimnis der Server Installation. Wenn man jetzt Xampp installiert hat, und den Apache Server startet, so ist dort normalerweise die aktuellste PHP Version installiert. Erste Schritte Um zu sehen, ob auf einem Server überhaupt PHP installiert ist, benötigt man eine PHP-Datei (z.B. phpinfo.php) mit folgendem Inhalt: <?php phpinfo(); ?> Diesen Code kannst du einfach in einem Texteditor, z.B. Notepad einfügen. Danach klickst du auf speichern, und gibst als Dateinamen phpinfo.php an. Bitte achte darauf, dass Notepade diese Datei nicht als Textdatei speichert. Dann kopierst du die Datei in den Ordner htdocs. Ruft man diese Seite jetzt auf (http://localhost/phpinfo.php), wird angezeigt, ob auf diesem Server PHP installiert ist oder nicht. Ist PHP installiert, werden mehrere Tabellen angezeigt, in welchen Seite: 2 Was kann man mit PHP machen? aufgelistet wird, was installiert ist und was nicht, unter anderem welche PHP-Version auf dem Server installiert ist (steht ganz oben). Ist kein PHP Installiert, wird entweder nichts angezeigt oder eine Fehlermeldung wird ausgegeben, evt. wird uns die Datei auch zum Download angeboten. PHP-Einbinden In einer PHP-Datei können sowohl HTML-Befehle, als auch PHP-Befehle enthalten sein. Die HTMLBefehle schreiben wir wie gewohnt in die PHP-Datei, so wie wir es aus den HTML-Dateien kennen. Möchte man jetzt in die PHP-Datei PHP-Befehle einbinden, so muss man erst mit einer Einleitung bestimmen, dass jetzt ein PHP-Script folgt. Dafür gibt es 3 Möglichkeiten. Die kürzeste Möglichkeit ist <?. Dazu muss allerdings eine bestimmte Einstellung gesetzt sein (short_open_tag). Ist die Einstellung off, benötigt man <?php. Danach folgen die PHP-Befehle. Als Abschluss des PHP-Scripts (bei <? und <?php) benötigen wir noch ein ?>. Es gibt auch eine längere Version, diese sieht so aus: <script language="php"> PHP-Anweisungen </script> Diese Variante würde ich nicht empfehlen, da sie keine Vorteile bringt und einfach nur länger ist. Text ausgeben Als erstes lernen wir, wie man einen normalen Text mit PHP ausgibt. Dies geht mit Hilfe von echo bzw. print. Bei unseren Scripts wird immer echo benutzt. Wir legen eine neue Datei an (z.B. hallo.php) und geben in diese folgenden Inhalt ein: <?php echo "Hello World"; ?> Wird nun diese Datei mit dem Browser aufgerufen, so erscheint als Ausgabe: Hello World. Dies steht auch genauso im Browser-Quelltext (Quelltext anzeigen), aber ohne die PHP-Anweisungen. (die spitzen Klammern und was so dazugehört). Dies bedeutet, der eigentliche PHP-Code ist nicht sichtbar und kann somit auch nicht kopiert und geklaut werden. Wie schon oben erklärt, rufen wir ein PHP-Script immer in der ersten Zeile mit <?php auf. In der nächsten Zeile folgt dann die PHP-Anweisung echo "Hello World"; echo ist die Anweisung, einen bestimmten Text auszugeben. Dieser Text steht zwischen den beiden Anführungszeichen. Das Semikolon (;) beendet die Funktion echo. Fast jeder Befehl (bis auf wenige Ausnahmen) enden mit einem Semikolon (;). Mit ?> beenden wir das PHP-Script. Seite: 3 Was kann man mit PHP machen? Alles zwischen den Anführungszeichen gilt als Text und kann frei definiert werden, auch HTML-Befehle sind möglich z.B. echo "<b>Hello World</b>"; Damit würde das Hello World als Fett ausgegeben werden. Möchte man jetzt Hello "World" ausgeben lassen, dann denkt man zuerst an folgende Schreibweise: <?php echo "Hello "World""; ?> Allerdings erhalten wir dann die folgende Fehlermeldung: Parse error: parse error, unexpected T_STRING, expecting ',' or ';' in C:\xampp\xampp\htdocs\hallo.php on line 2 Diese Fehlermeldung ist sehr brauchbar, denn daran ist erkennbar, wo der Fehler begangen wurde und meistens auch welcher. on line 2 zeigt an, dass der Fehler in Zeile 2 liegt. In dieser Zeile steht diese Anweisung: echo "Hello "World""; Also muss hier irgendetwas falsch sein! Eigentlich ist es ganz logisch. Der Befehl echo startet die Ausgabe immer ab dem 1. Anführungszeichen und gibt alles bis zum 2. Anführungszeichen aus. Da aber in dieser Befehlszeile insgesamt 4 Anführungszeichen zur Textausweisung benutzt werden, ist keine klare Definition gegeben. Deshalb erfolgt diese Fehlermeldung und nicht die gewünschte Ausgabe. Also müssen wir die Anführungszeichen bei "World" mit einem Maskierungszeichen versehen. Dazu benutzen wir den Backslash (\). Das Script sieht dann so aus: <?php echo "Hello \"World\""; ?> Dieses Maskierungszeichen muss vor jedem Anführungszeichen stehen, das als Text ausgegeben werden soll. Aber was ist wenn wir jetzt einen Backslash ausgeben möchten ? Auch dies geht, allerdings wird dafür wieder ein Maskierungszeichen benötigt. Dazu nehmen wir einfach ein zweiten Backslash. Dies sieht dann so aus: <?php echo "c:\\xampp"; ?> Seite: 4 Was kann man mit PHP machen? Die Ausgabe ist dann: c:\xampp PHP Seiten können aus PHP Scripts und HTML Befehlen bestehen, z.B. so: <h2>Herzlich Willkommen</h2> <?php echo "Auf meiner Internetseite"; ?> Dies war auch schon alles, was man über den Befehl echo wissen muss. Wozu brauche ich denn diesen echo Befehl? Man kann doch einen Text ja auch einfach mit HTML ausgeben. Der Nachteil von HTML ist, dass keine dynamischen Texte ausgegeben werden können. Anders bei PHP. Auch wenn man PHP perfekt beherrscht, alle Texte werden mit echo (o.ä.) ausgegeben. Das Besondere daran ist, dass diese Texte dann meistens dynamisch, z.B. aus einer Datenbank, erzeugt werden. Allerdings steuert man dann die Ausgabe, mit Hilfe von bestimmten Variablen. Der Besucher bestimmt dann meistens selbst, welchen Text er erhält. So ist das auch bei einem Forum. In der Titelzeile stehen bei Foren fast immer Werte (z.B. ?id=131&seite=2). Diese Werte bestimmen, welche Ausgabe der Besucher erhält. Kommentare Um in einem PHP-Script einen Kommentar einzufügen, oder um einen Befehl zu deaktivieren, benutzt man # (Raute) oder // (2 Shlashs) Alles was nach diesen Zeichen steht, wird nicht ausgeführt und ist in der Ausgabe auch nicht sichtbar. Durch einen Zeilenumbruch beenden wir den Kommentar. Kommentare sollten öfters benutzt werden, da man dadurch die Möglichkeit hat, den Überblick zu bewahren. Auch wenn man z.B. nach zwei Monaten an dem Script etwas ändern möchte, helfen diese. <?php //Dies ist ein Kommentar #Ausgabe des Text echo "Hallo Welt"; ?> Manchmal ist es auch sinnvoll ein Kommentar über mehrere Zeilen zu haben, wenn man z.B. einen Programmabschnitt auskommentieren möchte. Solch ein Kommentar startet mit /* und endet mit */: <?php /* Kommentar startet Ausgabe des Textes Ende des Kommentares */ echo "Hallo Welt"; ?> Seite: 5 Was kann man mit PHP machen? PHP Variablen In PHP werden Texte oder auch Zahlen in sogenannten PHP Variablen bzw. einfach nur Variablen gespeichert, um diese dann später mit Hilfe von echo wieder auszugeben. Variablen in PHP beginnen immer mit einem Dollarzeichen ($), direkt gefolgt vom Variablen-Namen, danach ein "Gleichheitszeichen" (=) und anschließend der Text in Anführungszeichen (") eingebunden. Am Ende das Semikolon als Befehlsabschluss(;). Den Variablen kann man einen beliebig passenden Namen geben, allerdings muss auf Groß- und Kleinschreibung geachtet werden. Ich würde die Variablen immer klein schreiben, damit kein Durcheinander und damit auch keine Fehlerquellen entstehen können. Eine Variable in PHP kann z.B. so aussehen: <?php $name = "Nils Reimers"; ?> In diesem Beispiel wird die Variable $name mit dem Inhalt Nils Reimers definiert. Zu beachten dabei ist, dass Variablennamen mit einem Buchstaben oder einem Unterstrich beginnen. Zahlen dürfen als Anfangszeichen nicht benutzt werden. Wenn wir eine Variable doppelt "definieren", so überschreiben wir den Inhalt der Variable. Per Echo wird dann nur der aktuelle Inhalt ausgegeben. Natürlich muss der echo-Befehl nach der Variable-Definition stehen, da PHP eine Interpreter-Sprache ist und den Code zeilenweise von oben nach unten abarbeitet. Wenn echo vor der Variable steht, so versuchen wir eine nicht definierte Variable auszugeben und erhalten eine leere Ausgabe. Sofern bestimmte Einstellungen gesetzt sind, kann es sogar passieren, dass ein Angreifer beliebigen Text einschleusen kann. Zur Ausgabe benötigt man natürlich wieder den Befehl echo. Das Script für dieses Beispiel sieht dann so aus: <?php $name = "Nils Reimers"; echo "Mein Name ist $name"; ?> Als Ausgabe erhalten wir: Mein Name ist Nils Reimers Wir können den Inhalt von einer Variable natürlich auch wieder überschreiben, dazu weisen wir der Variable einfach den neuen Wert zu: <?php $name = "Paul Meier"; echo "Zuerst heiße ich $name <br>"; $name = "Stefan Müller"; echo "Dann ist mein Name $name"; ?> Die Ausgabe wäre dann: Zuerst heiße ich Paul Meier Dann ist mein Name Stefan Müller Seite: 6 Was kann man mit PHP machen? Bisher wäre diese Funktion nur bei sehr langen Texten interessant, möchte man z.B. eine Person an 10 verschiedenen Stellen ansprechen. Wenn wir jedoch mit echo nur eine Variable abrufen (keinen weiteren Text), dann können (müssen aber nicht) wir die Anführungszeichen weglassen. Der Code: <?php $name = "Nils Reimers"; echo $name; ?> Man kann auch an eine bereits vorhandene Variable eine weitere Variable, oder einen Text anhängen. <?php $name = "Nils "; $name .= "Reimers"; echo $name; ?> Ausgabe: Nils Reimers Soll eine Variable oder ein Text an eine bereits bestehende Variable "angehängt" werden, geschieht dies mit einem Punkt vor dem Gleichheitszeichen. Dadurch erkennt PHP, dass der nach dem Gleichheitszeichen folgende Text oder die folgende Variable an die bestehende Variable angehängt werden soll. Eine Variable kann theoretisch unendlich oft verlängert werden. Dies können wir auch direkt in dem echo benutzen: <?php $name = "Nils"; echo "Mein Name ist ".$name." Reimers"; ?> Hier haben wir eine zusammengesetzte Ausgabe. Zuerst geben wir Mein Name ist aus, nach den Anführungszeichen setzen wir einen Punkt und dann die Variable. Nach der Variable können wir entweder mit Semikolon die Ausgabe beenden, aber hier haben wir noch den Text Reimers angehängt. Dies geht selbstverständlich auch mit Variablen: <?php $farbe = "rotes"; $text = "Wir haben ein ".$farbe." Haus"; echo $text; ?> Diese Methode wird später noch des öfteren benutzt. Rechnen mit Variablen Natürlich kann man mit PHP auch rechnen. Weist man einer Variable eine Zahl zu, so dürfen im Gegensatz zum Text hier keine Anführungszeichen benutzt werden, da PHP dieses sonst als Text behandeln würde. Seite: 7 Was kann man mit PHP machen? <?php $zahl1 = 10; $zahl2 = 5; ?> In diesen Variablen sind jetzt die Zahlen 10 und 5 gespeichert. Jetzt lassen wir mal rechnen: <?php echo $zahl1 + $zahl2; ?> Als Ergebnis erhalten wir die Summe der beiden Zahlen. Natürlich könnten wir dies einfach auch so schreiben: <?php echo 10 + 5; ?> Falls aber diese Zahlen zu einem späteren Zeitpunkt nochmals benutzt werden sollen, speichert man diese am besten in Variablen. <?php $zahl = 1; $ergebnis = $zahl + 5; echo $ergebnis; ?> Hier einige weitere Beispiele: <?php echo $zahl1 + $zahl2; //addieren echo $zahl1 - $zahl2; //subtrahieren echo $zahl1 * $zahl2; //multiplizieren echo $zahl1 / $zahl2; //teilen/dividiern echo pow($zahl1,$zahl2); //Zahl1 hoch Zahl2 (102) echo sqrt(64); // Wurzel von 64 ?> Natürlich können auch diese Ergebnisse wieder in extra Variablen gespeichert werden. Decrementieren und incrementieren Um den Wert einer Variable um 1 zu erhöhen bzw. um 1 zu verkleinern, gibt es einen einfachen Trick: <?php $erhoehen = 1; $erhoehen++; echo $erhoehen; ?> Ausgabe ist 2 <?php $senken = 2; $senken--; echo $senken; ?> Ausgabe ist 1 Wird an den Variablen-Namen (einer Zahlenvariable) ein doppeltes Pluszeichen in Form von ++ angehängt, so wird der Inhalt dieser Variable, also die Zahl incrementiert, das heißt um 1 erhöht. Seite: 8 Was kann man mit PHP machen? Wird dagegen ein -- verwendet, wird der Wert decrementiert, also um 1 gesenkt. Variablentypen Da PHP den Typ von Variablen selber festlegt, brauchen wir diesen Aspekt beim Programmieren nicht zu betrachten. Aber in Foren (o.ä.), werden immer bestimmte Fachausdrücke benutzt, um Variablentypen zu beschreiben. Ein Variablentyp legt fest, welchen Inhalt eine Variable haben soll. Da aber wie gesagt, PHP den Typen selber festlegt, kann sich der Typ der Variable auch ändern. Es gibt dabei folgende Typen: Integer: Eine Integer-Variable enthält nur Ganzzahlen, d.h. Zahlen ohne Komma. String: Dies ist eine Variable, die einen Text/Satz/Wort enthält. Float: Eine Dezimalzahl, d.h. eine Zahl mit Komma. Man verwendet aber einen Punkt als Komma. Double: Das gleiche wie float, nur mit mehr Nachkommastellen. bool: Dies sind die Werte true und false Bsp: <?php $integer = 15; //Eine Integer Variable $string = "Ganz viel Text"; //Ein String $float = 15.5; //Eine Zahl mit einem Komma $bool = true; ?> Variablen übergeben Diese Möglichkeit ist ein sehr wichtiges Detail von PHP, denn damit ist es möglich, z.B. vom Besucher eingegebene Texte oder berechnete Daten auf die nächste Seite zu übertragen. Es gibt zwei Methoden um Variablen zu übergeben, POST und GET. Als erstes schauen wir uns POST an. Als Beginn erstellen wir eine Seite mit einem ganz normalen Formular. Dieses könnte zum Beispiel so aussehen: <form action="seite2.php" method="post"> Ihr Vorname:<br> <input type="Text" name="vorname"> <input type="Submit" value="Absenden"> </form> Für dieses Formular benötigen wir kein PHP, also können wir das Formular auch in einem normalen HTML-Dokument speichern (z.B. seite1.html). Es ist auch wichtig, dass wir allen Eingabefeldern einen einzigartigen Namen zuweisen, damit wir sie nach dem Absenden auf der zweiten Seite auch korrekt abfragen können. Haben zwei Felder den selben Namen, so wird nur das letztere Feld übertragen, da die vorige Eingabe überschrieben wird (entspricht einer Neudefinition dieser Variable) Seite: 9 Was kann man mit PHP machen? Als nächstes erstellen wir seite2.php, an welche die Eingaben (hier: Ihr Name) gesendet wird. Der Inhalt der seite2.php sieht dann so aus: <?php echo $_POST["vorname"]; ?> Wir erinnern uns an das Input-Feld mit dem Namen vorname auf seite1.html, genau diese Eingabe rufen wir jetzt mit $_POST["vorname"]; ab. Klicken wir auf der Formularseite auf Absenden, so wird seite2.php aufgerufen, dabei werden die Daten übermittelt und von dieser ausgegeben. Mit $_POST["vorname"]; können wir also die gesendeten Daten wieder abfragen. ["vorname"] gibt den Namen des abgefragten Inputfeldes aus der Formularseite an (hier vorname). Diese Abfrage kann auch in einer Variable gespeichert werden, um diese dann später flexibler weiterverarbeiten zu können. Der Code dafür würde so aussehen: <?php $vorname = $_POST["vorname"]; echo $vorname; ?> Soll $_POST["vorname"]; in einer Variable ($vorname) gespeichert werden, darf $_POST["vorname"]; nicht in Anführungszeichen stehen, da dieses sonst als Text interpretiert wird. Natürlich können wir damit mehrere Eingaben abrufen. Dazu müssen die Befehle untereinander stehen. <?php $vorname = $_POST["vorname"]; $nachname = $_POST["nachname"]; ?> Neben der POST Methode gibt es auch noch die GET Methode. Bei der GET Methode werden die zu übergebene Daten an die URL angehängt. Würden wir unser Formular mit der Methode GET verschicken, so würde die URL am Ende etwa so aussehen. seite2.php?vorname=Nils Mit dem ? bestimmt der Browser, dass an die URL bestimmte Eingaben angehängt werden. Das erste Wort nach dem Fragezeichen (vorname) ist der Feldname des Input-Feldes. Alles was nach dem Gleichheitszeichen steht, ist die Eingabe (Nils). Möchte man jetzt mehr als ein Feld übertragen, so werden die weiteren Feldnamen mit einem UndZeichen (&) angehängt. Das sieht dann so aus: Seite: 10 Was kann man mit PHP machen? seite2.php?nachname=Reimers&vorname=Nils Werden diese Eingaben abrufen, sieht das so aus: <?php echo $_GET["nachname"]; echo $_GET["vorname"]; ?> Natürlich können wir diese Daten jeweils auch wieder in einzelne Variablen speichern. Ältere Versionen Falls ihr eine ältere Version als 4.1.0 benutzt, müsst ihr noch die Langform der Befehle schreiben. Anstatt $_POST["feldname"]; müsst ihr dann $HTTP_POST_VARS["Feldname"]; und aus $_GET["Feldname"]; wird $HTTP_GET_VARS["Feldname"];. Die Langformen werden genauso angewendet, wie die Kurzformen. Allerdings sollte man, sofern es funktioniert, die Kurzform benutzen. POST oder GET? Wann benutzt man POST und wann GET ? Die Frage ist leicht zu beantworten. Wenn man Eingaben aus einem Formular übergeben möchte, so sollte man immer POST benutzen. Warum ? Mit GET werden die Eingaben der URL angehängt, dadurch ist die Textlänge eingeschränkt, außerdem kann jeder im Browser-Verlauf an der URL erkennen, was als Daten übermittelt wurde, und bei einer Passworteingabe ist das nicht so schön. Vorteil von GET GET wird benutzt, wenn man einfache Informationen übergeben möchte. Soll zum Beispiel mit dem Klick auf einen Link eine Auswahl übergeben werden, so benutzt man die Methode GET Ein Link in einer aufrufenden Seite könnte dann so aussehen: <a href="buch.php?seite=1">Seite 1</a> In diesem Beispiel würde die Eingabe 1 übermittelt werden. Solche Links werden in PHP zur Programmierung dynamischer Seiten benutzt (z.B. Foren). Wozu brauche ich später Variablen? Nun haben wir jetzt die ersten Grundlagen über Variablen kennen gelernt. Fragt man Einträge aus einer Datenbank oder Datei ab, werden diese zur besseren Übersicht erst in Variablen gespeichert, dann aufbereitet (selektiert, sortiert, oder berechnet) und erst danach mit echo wieder ausgegeben. Außerdem werden wir später kennen lernen, wie man Variablen überprüfen kann, also ob z.B. der Name Nils war oder ähnliches. Falls ihr hier Probleme habt, solltet Ihr diesen Abschnitt noch mal lesen. Denn alles was jetzt folgt, fragt, überprüft und gibt Variablen aus. Im nächsten Teil lernen wir die PHP if-Anweisung kennen. Seite: 11 Was kann man mit PHP machen? PHP: if Anweisungen Bisher brachte PHP noch keinen großen Vorteil gegenüber HTML. Dies wird sich jetzt aber mit der ifAnweisung ändern. Mit if können wir überprüfen, ob bestimmte Bedingungen erfüllt bzw. nicht erfüllt sind. Das Gerüst für eine if-Anweisung in PHP sieht so aus: <?php if(Bedingung) { Anweisung } ?> Die Bedingung, die überprüft werden soll, wird in Klammern direkt nach dem einleitenden if gesetzt. Danach folgt in geschwungenen Klammern die auszuführende Anweisung, wenn die Bedingung erfüllt (wahr/true) ist. Schauen wir uns einmal ein kleines Beispiel an: <?php $user = "Nils"; if($user == "Nils") { echo "Hallo Nils"; } ?> Die IF-Anweisung überprüft, ob die Variable $user als Inhalt Nils hat. Trifft dies zu, so gibt die Bedingung wahr (true) zurück und als Ausgabe erhalten wir: Hallo Nils. Zu beachten ist hier, dass zwei Ist-Gleich Zeichen benutzt werden. Mit nur einem Gleichheitszeichen würde diese if-Anweisung nicht funktionieren, denn dort würde der Variable den Wert Nils zugewiesen werden. Außerdem darf kein Semikolon (;) hinter der if-Anweisung stehen. Wenn die Variable $user nicht den Inhalt Nils hätte, so würde if false (falsch) zurückgeben und wir würden keine Ausgabe erhalten. Möchten wir aber auch eine Ausgabe erhalten wenn die Variable $user nicht den Inhalt Nils hat, so benötigen wir die else-Anweisung. Das Grundgerüst sieht dafür so aus: <?php if(Bedingung) { Anweisung } else { Anweisung } ?> Das else tritt immer dann ein, wenn wir false (falsch) erhalten. Zum besseren Verständnis hier ein kleines Beispiel: <?php Seite: 12 Was kann man mit PHP machen? $user = "Klaus"; if($user=="Nils") { echo "Hallo Nils"; } else { echo "Du bist nicht Nils!"; } ?> Hat die Variable $user den Inhalt Nils, so erhalten wir als Ausgabe Hallo Nils, bei jedem anderen Inhalt erhalten wir als Ausgabe Du bist nicht Nils!. Hiermit können wir schon eine einfache, aber dennoch sichere Passwortabfrage erstellen. Als erstes benötigen wir wieder ein Formular: <form action="seite2.php" method="post"> <input type="Password" name="passwort"> <input type="Submit" value="Absenden"> </form> In diesem Formular geben wir dann das Passwort ein. Beim Klick auf "Absenden", wird die Seite seite2.php aufgerufen und gleichzeitig an diese das Passwort übergeben. - Genau wie es im Abschnitt Variablen unter Variablen übergeben beschrieben wurde. seite2.php muss dann so aussehen: <?php $passwort = $_POST["passwort"]; if($passwort=="geheim") { echo "Herzlich Willkommen im internen Bereich"; } else { echo "Das Passwort ist leider falsch"; } ?> Mit $passwort = $_POST["passwort"]; weisen wir der Variable den Inhalt des Passwortfeldes im Formular zu. Mit der if-Anweisung wird nun abgefragt, ob die Variable $passwort das Wort geheim als Inhalt hat, also ob im Formular das Wort geheim auch eingegeben wurde. Bei richtiger Eingabe, kommt man in den internen (Passwortgeschützen) Bereich. Eine falsche Eingabe bewirkt die Ausgabe Das Passwort ist leider falsch. Wir können natürlich auch if-Anweisungen innerhalb einer if-Anweisung erstellen. (verschachteln) Dies sieht dann z.B. so aus: <?php $vorname = "Nils"; $nachname = "Reimers"; if($vorname=="Nils") { echo "Hallo Nils "; Seite: 13 Was kann man mit PHP machen? if($nachname=="Reimers") { echo "Reimers"; } } else { echo "Du bist nicht Nils"; } ?> Zuerst wird überprüft, ob die Variable $vorname den Inhalt Nils hat. Trifft dies zu, so wird Hallo Nils ausgegeben. Danach wird innerhalb der if-Anweisung mit einer weiteren if-Anweisung überprüft, ob die Variable $nachname den Inhalt Reimers hat. Trifft dies ebenfalls zu, wird auch noch Reimers ausgegeben. Wenn die Variable $vorname nicht den Inhalt Nils hat, so wird Du bist nicht Nils ausgegeben. Es ist dann auch egal, ob $nachname Reimers ist oder nicht. Genauso kann eine zweite if-Anweisung auch im else Teil stehen: <?php $user = "Nils"; if($user=="Nils") { echo "Hallo Nils"; } else { if($user=="Reimers") { echo "Hallo Herr Reimers"; } else { echo "Du bist nicht Nils Reimers"; } } ?> Wenn die Variable $user den Inhalt Nils hat, wird Hallo Nils ausgegeben. Hat sie diesen Inhalt nicht, wird überprüft, ob der Inhalt Reimers ist. Hat sie diesen Inhalt, so wird Hallo Herr Reimers ausgegeben. Falls die Variable $user weder den Inhalt Nils, noch den Inhalt Reimers hat, dann wird Du bist nicht Nils Reimers ausgegeben. Des weiteren könnten man dies auch per else if lösen. Dies ist eine weitere if-Anweisungen, wenn die vorherige nicht Zutrifft: <?php $user = "Nils"; if($user=="Nils") { echo "Hallo Nils"; } else if($user == "Reimers") { echo "Hallo Herr Reimers"; } else if($user == "Meier") Seite: 14 Was kann man mit PHP machen? { echo "Hallo Herr Meier"; } else { echo "Du bist weder Herr Reimers noch Herr Meier"; } ?> Man kann auch mit einer if-Anweisung abfragen, ob etwas nicht erfüllt ist. Dies erreichen wir mit != (ungleich). Ein kleines Beispiel hierfür: <?php $user = "Nils"; if($user!="Nils") { echo "Du bist nicht Nils"; } else { echo "Hallo Nils"; } ?> Wenn die Variable $user einen anderen (ungleichen) Inhalt als Nils hat, so wird Du bist nicht Nils ausgegeben. Wenn sie aber doch diesen Inhalt (Nils) hat, so wird Hallo Nils ausgegeben. Zwar könnte man hierfür auch die Abfrage == (Ist-Gleich) benutzen, aber wenn man überprüfen möchte, ob überhaupt etwas im Formular eingegeben wurde, ist es besser, != zu benutzen. Dies würde dann einfach so aussehen: <?php $user = $_POST["user"]; if($user!="") { echo "Herzlich Willkommen $user"; } else { echo "Das Feld User wurde nicht ausgefüllt"; } ?> Als erstes fragen wir die übertragenen Daten wieder ab. Wenn $user ungleich "" (leer) ist, erhalten wir Herzlich Willkommen $user. Wurde das Eingabefeld nicht ausgefüllt, erhalten wir Das Feld User wurde nicht ausgefüllt. Bei if-Anweisungen ist unbedingt darauf zu achten, dass alle geschwungenen Klammern wieder geschlossen werden, da sonst das Script nicht funktioniert. Manchmal möchte man auch mehrere Bedingungen überprüfen, dafür brauchen wir logische Operatoren Logische Operatoren Seite: 15 Was kann man mit PHP machen? Oft reicht es nicht aus, nur eine Bedingung zu überprüfen. Wenn man z.B. eine Passwortabfrage macht, möchte man wissen ob der Benutzername und das Passwort richtig sind. Deshalb kann man in PHP mehrere Bedingungen miteinander verknüpfen. Natürlich kann man mehrere if-Anweisungen benutzen, aber wenn man z.B. 5 Bedingungen überprüfen möchte, wäre dies doch sehr unübersichtlich. Für diesen Zweck gibt es die logischen Operatoren. Hiermit können wir beliebig viele Bedingungen verschiedenst miteinander Verknüpfen. Eine Passwortabfrage zum Beispiel würde dann so aussehen: <?php $username = "Nils"; $passwort = "php-einfach"; if($username=="Nils" AND $passwort=="php-einfach") { echo "Zugriff erlaubt"; } ?> Hier werden $username und $passwort gemeinsam überprüft. Nur wenn beide Eingaben stimmen, wird der Zugriff erlaubt. Die Verbindung der beiden Bedingungen erfolgt über den Operator AND (und). Das selbe Ergebnis erzielt man mit &&. Welche Schreibweise man letztendlich verwendet ist egal. Ich bevorzuge AND, da es intuitiver aussieht. Es gibt immer wieder Fälle, wo es reicht, dass nur eine Bedingung erfüllt ist. Dafür gibt es den Operator OR (oder), manchmal wird er auch als || geschrieben: <?php $username = "Nils"; $passwort = "php-einfach"; if($username=="Nils" OR $passwort=="php-einfach") { echo "Zugriff erlaubt"; } ?> Diese IF-Anweisung ist auch dann erfüllt, wenn nur eine der beiden Bedingungen erfüllt ist. Zugegeben für eine Passwortabfrage macht das eher weniger Sinn, aber dazu später mehr. Auch wenn bei OR beide Bedingungen erfüllt sind, erhalten wir als Ausgabe Zugriff erlaubt. Man könnte eine Passwortabfrage auch für mehrere Personen erstellen, dazu verknüpfen wir die verschiedenen Operatoren einfach: <?php $username = "Nils"; $passwort = "php-einfach"; if( ($username=="Nils" AND $passwort=="php-einfach") OR ($username=="Paul" AND $passwort=="geheim") ) { echo "Zugriff erlaubt"; } ?> Hier hätten nur Nils mit dem Passwort php-einfach oder Paul mit dem Passwort geheim zugriff. Ein Nils der als Passwort z.B. geheim eingibt, hätte keinen Zutritt. Seite: 16 Was kann man mit PHP machen? Es gibt jedoch noch die dritte Variante des logischen Operators, dabei darf nur eine Bedingung wahr sein. Diese Variante nennt sich exklusives oder und wird wie folgt geschrieben: <?php $username = "Nils"; $passwort = "php-einfach"; if($username=="Reimers" XOR $passwort=="php-einfach") { echo "Zugriff erlaubt"; } ?> Jetzt wird nur dann die Anweisung ausgeführt, wenn die Variable $username den Inhalt Reimers hat, oder die Variable $passwort den Inhalt php-einfach hat. Sind beide Inhalte richtig angeben, erfolgt kein Zugriff. Dieses "entweder oder" wird XOR geschrieben. Noch mal: Bei AND müssen beide Bedingungen erfüllt sein Bei OR muss mindestens eine Bedingung erfüllt sein Bei XOR darf nur eine Bedingungen erfüllt sein Für eine echte Passwortabfrage würde man die Variablen $username und $passwort per Formular eingeben. Dazu benötigen wir zuerst wieder ein Formular mit zwei Input-Feldern. <form action="seite2.php" method="post"> Username:<br> <input type="Text" name="username"><br> Passwort:<br> <input type="Password" name="passwort"><br> <input type="Submit" value="Absenden"><br> </form> In diesem Formular gibt man dann den Username und das Passwort ein. Klickt man danach auf Absenden, wird seite2.php aufgerufen und an diese beiden Eingaben übergeben. seite2.php muss dann so aussehen: <?php $username = $_POST["username"]; $passwort = $_POST["passwort"]; if($username=="Nils" AND $passwort=="php-einfach") { echo "Zugriff erlaubt"; } else { echo "Zugriff fehlgeschlagen"; } ?> Als erstes Fragen wir die eingegebenen Daten ab. Diese Eingaben werden in den Variablen $username und $passwort gespeichert. Mit einer if-Anweisung und dem logischen Operator AND wird abgefragt, ob $username den Inhalt Seite: 17 Was kann man mit PHP machen? Nils und $passwort den Inhalt php-einfach hat. Nur wenn beide Eingaben richtig sind, kommen wir in den internen Bereich. Übung Dann wollen wir das Gelernte mal etwas anwenden. Als erstes machen wir eine Passwortabfrage, bei der das Passwort verschlüsselt wird. Zuerst brauchen wir wieder ein Formular. Das sieht ungefähr so aus: <form action="seite2.php" method="post"> Benutzername:<br> <input type="Text" name="username"><br><br> Passwort:<br> <input type="Password" name="passwort"> <input type="Submit" value="Absenden"> </form> Passwortabfragen sollten immer mit post übermittelt werden, denn wenn es mit get übermitteln wurde, würde jeder später im Verlauf sehen können, welches Passwort man benutzt. Jetzt kommen wir zum PHP Teil <?php $username = $_POST["username"]; $passwort = $_POST["passwort"]; $pass = md5($passwort); ?> Als erstes fragen wir die übertragenden Daten ganz einfach wieder ab. Mit md5 verschlüsseln wie jetzt das Passwort. Benutzt man dafür md5 so kann dieser Verschlüsselung nicht wieder rückgängig gemacht werden. Ein Wort das mit md5 verschlüsselt wurde, sieht dann ca. so aus: fd0d9cdefd5d42dfa36c74a449aa8214 (php-einfach) Damit wir jetzt eine if-Anweisung machen können, müssen wir zuerst das Passwort in einen md5String (Text) umwandeln. Dafür können wir den md5-Generator benutzen, oder wir machen einen eigenen Generator. Unseren Code müssen wir dann so abwandeln. <?php $username = $_POST["username"]; $passwort = $_POST["passwort"]; $pass = md5($passwort); echo $pass; ?> Seite: 18 Was kann man mit PHP machen? Drücken wir auf Absenden bei dem Formular, erhalten wir das eingegebene Wort als md5-String (Text) wieder ausgegeben. Diesen Code kopieren wir uns dann. Achtung: Die md5-Funktion unterscheidet zwischen Groß- und Kleinschreibung. clanwissen sieht umgewandelt so aus: c6a7fa7d60010437e84ad75cae1fa928 Clanwissen sieht umgewandelt so aus: 5d959937101f826b0b67bb3a8c1cbb27 Jetzt kommt die if-Anweisung. Damit überprüfen wir, ob das verschlüsselte Passwort das gleiche ist, das wir gespeichert haben. Unser Code sieht dann so aus: <?php $username = $_POST["username"]; $passwort = $_POST["passwort"]; $pass = md5($passwort); if($username=="Andavos" and $pass=="fd0d9cdefd5d42dfa36c74a449aa8214") { echo "Herzlich Willkommen"; } else { echo "Login Fehlgeschlagen"; } ?> In der if-Anweisung schreiben wir jetzt unseren md5-String (Text) hinein. Drückt man bei dem Formular auf Absenden, so werden diese Daten an seite2.php gesendet. seite2.php fragt diese Eingaben ab, und verschlüsselt das Textfeld passwort in einen md5-String. Die if-Anweisung fragt dann ab, ob das eingegebene, verschlüsselte Passwort das gleiche ist, das in der if-Anweisung steht. Was habe ich jetzt davon? Wenn jemand jetzt deinen Quelltext sieht, kann er nicht sofort erkennen, welches Passwort man braucht, um in den internen Bereich zu kommen. Die md5-Funktion ist auch wichtig, wenn man später Datenbanken benutzt, bei dem sich der User mit Passwort und Benutzername einträgt. Wenn man ein Passwort in einer Variable speichert, dann kann man bei manchen Free-Webspace Anbietern ganz einfach diese Variable "ausspionieren". Diese Person hat dann ihr Passwort. Wenn es aber verschlüsselt abgespeichert wurde, erhält er nur den md5-String, und weil man diesen nicht entschlüsseln kann, ist ihm dieser Code so gut wie nutzlos. Als nächstes überprüfen wir, ob alle Felder ausgefüllt wurden. Wieder brauchen wir ein Formular: <form action="seite2.php" method="post"> E-Mail:<br> <input type="Text" name="email"><br><br> Seite: 19 Was kann man mit PHP machen? Kommentar:<br> <textarea name="kommentar" cols="30" rows="5"> </textarea> <input type="Submit" value="Absenden"> </form> In diesem Formular gibt man seine E-Mail Adresse an und ein Kommentar. Diese Daten werden an seite2.php geschickt: <?php $email = $_POST["email"]; $kommentar = $_POST["kommentar"]; if($email=="" OR $kommentar=="") { echo "Bitte füllen Sie alle Felder aus"; } else { echo "Ihr Eintrag wurde gespeichert"; } ?> Wie immer fragen wir zuerst die übermittelten Daten ab. Mit der if-Anweisung schauen wir, ob beide Felder ausgefüllt wurden, dazu brauchen wir OR. Wenn ein oder beide Felder leer sind, erhält der Besucher eine Fehlermeldung. Wenn er sie aber ausgefüllt hat, werden seine Eingaben gespeichert. Wie das speichern geht, erfahrt ihr später. Solch eine if-Anweisung braucht man ziemlich oft, z.B. bei Gästebüchern wird eine solche ifAnweisung fast immer eingebaut. Wie bereits versprochen, kann man mit PHP mehrere (unendlich) HTML-Dokumente in einer PHP-Datei speichern. Dies geht ganz einfach mit der GET Methode. Deswegen braucht unser PHP-Dokument eine GET-Abfrage. Die sieht so aus: <?php $seite = $_GET["seite"]; ?> Damit haben wir jetzt als Eingabefeldnamen seite benutzt. Dieser Wert ist in der Variable $seite gespeichert. Natürlich könnt ihr auch andere Namen benutzen, dann müsst ihr aber später aufpassen. Wie wir bereits gelernt haben, werden Daten, die mit GET übermittelt werden, an die URL angehängt. Also brauchen wir kein Formular, um bestimmte Eingaben zu senden, sondern hängen wir diese einfach an die URL dran und drücken dann Enter. Danach brauchen wir eine IF-Anweisung, die prüft was eingegeben wurde. Diese kann so aussehen: <?php if($seite=="index") { echo "Herzlich Willkommen auf der Indexseite"; } Seite: 20 Was kann man mit PHP machen? ?> Rufen wir dann im Browser diese Datei auf, erhalten wir zuerst eine leere Seite. Hängen wir aber jetzt an die URL ?seite=index dran, erhalten wir die Ausgabe, die zwischen unserer IF-Anweisung steht. Somit können wir jetzt beliebig viele Unterseiten einfügen. Das sieht dann ca. so aus: <?php $seite = $_GET["seite"]; if($seite=="index") { echo "Indexseite"; } if($seite=="start") { echo "Startseite"; } ?> Rufen wir jetzt unsere URL mit dem Anhang ?seite=index auf, erhalten wir als Ausgabe nur Indexseite, rufen wir allerdings diese Seite mit dem Anhang ?seite=start auf, erhalten wir als Ausgabe nur Startseite. Somit können wir viele Unterseiten in einer PHP-Datei speichern. Wenn man möchte, das der Browser eine bestimmte Seite aufruft, wenn man nichts an die URL drangehängt, brauchen wir isset. Damit können wir überprüfen, ob eine Variable (z.B. $seite) einen Inhalt besitzt. Falls wir überprüfen möchten, ob eine Variable leer ist, benutzen wir !isset Das Ausrufungszeichen ! steht für NOT. Die Funktion isset(); gibt entweder TRUE, sofern die Variable existiert, sonst FALSE. Das NOT davor dreht das Ergebnis um. Dies bedeutet, wenn die Variable existiert, wir aber !isset(); schreiben, erhalten wir ein FALSE. Wenn sie nicht existiert, ein TRUE. Der Script sieht dann so aus: <?php $seite = $_GET["seite"]; if(!isset($seite)) { $seite="index"; } if($seite=="index") { echo "Indexseite"; } if($seite=="start") { echo "Startseite"; } ?> Wenn wir die Datei ohne Anhang aufrufen, erhalten wir die Ausgabe von ?seite=index. Links könnten dann so aussehen: Seite: 21 Was kann man mit PHP machen? <a href="seite1.php?seite=index">Indexseite</a> <a href="seite1.php?seite=start">Startseite</a> Natürlich könnten die Links auch in einer der if-Anweisungen stehen, ca. so: <?php $seite = $_GET["seite"]; if(!isset($seite)) { $seite="index"; } if($seite=="index") { echo "Indexseite"; echo "<a href=\"?seite=start\">Zur Startseite</a>"; } if($seite=="start") { echo "Startseite"; echo "<a href=\"?seite=index\">Zur Indexseite</a>"; } ?> Formulare können wir auch innerhalb einer Datei verschicken, dafür müssen wir nur bei action den richtigen Anhang eintragen. Ungefähr so: <form action="?seite=start" method="post"> Wenn das Formular innerhalb eines Dokumentes verschickt werden soll, reicht der Anhang, wenn wir das aber an eine andere Seite schicken möchten, dann müssen wir auch den Dateinamen angeben. Wozu braucht man dies? Klar könnten wir alles in verschiedenen Dateien speichern, aber hat man z.B. bei einer Registration mehrere Schritte (z.B. 10), dann müsste man 10 Dateien anlegen, mit diesem Prinzip aber nur 1 Datei. Als nächstes Speichern wir etwas in eine Datei PHP: Dateien Bisher sind wir in der Lage, mit Variablen zu arbeiten, und diese zu überprüfen. Zwar können wir so schon einen geschützten Bereich programmieren, aber oft möchte man ja bestimmte Werte auch abspeichern. Dies können z.B. Daten aus einem Formular oder ähnliches sein. Das abgespeicherte möchte man dann später natürlich auch wieder ausgeben. Für solche Aufgaben verwendet man in PHP Dateien. In Dateien speichert man per PHP seine Werte und kann sie an anderer Stelle wieder auslesen Zunächst ist zu beachten, dass das Arbeiten mit Dateien immer in drei Schritten abläuft. Eine Datei wird geöffnet, danach wir der Inhalt in die Datei geschrieben oder aus der Datei gelesen (oder auch beides) und zum Schluss wird sie wieder geschlossen. Das öffnen von einer Datei ist eigentlich recht einfach: <?php $datei = fopen(Dateiname, Modus); ?> Der PHP-Befehl fopen öffnet die Datei Dateiname, der Modus bestimmt, was wir mit der Datei machen möchten (lesen bzw. schreiben). Außerdem müssen wir darauf achten, ab welcher Zeile PHP anfängt zu lesen (Anfang oder Ende der Datei). Seite: 22 Was kann man mit PHP machen? Auch wichtig ist, ob PHP eine Datei anlegt oder nicht, sofern diese noch nicht existiert. Wenn man mit PHP neue Dateien erstellen möchte, dann sollte man nicht r bzw. r+ benutzen. Folgende Modi kann man benutzen: Modus Funktion Dateizeiger Datei anlegen r Lesen Anfang Nein r+ Lesen und Schreiben Anfang Nein w Schreiben Anfang Ja w+ Lesen und Schreiben Anfang Ja a Schreiben Ende Ja a+ Lesen und Schreiben Ende Ja Wenn w / w+ benutzt wird, musst du darauf achten, dass der Inhalt des Dokuments ohne Nachfrage überschrieben wird. Für das Anlegen eines Logfiles benutzt man den Modus a, da der neue Eintrag immer am Ende angehängt wird. Wir machen jetzt als Beispiel einen simplen Textcounter (ohne Reloadsperre), denn an diesem Beispiel lernen wir so gut wie alles, was wir später brauchen. Zu erst öffnen wir eine Datei, ich empfehle eine Textdatei (counter.txt) zu benutzen, aber man kann auch jedes andere Format benutzen. <?php $datei = fopen("counter.txt","r+"); ?> Bei dem Modus r+ müssen wir darauf achten, das es diese Datei bereits vorhanden ist. Dann wollen wir ja abfragen, wie viele Personen diese Seite schon aufgerufen haben, deswegen lesen wir die Datei zuerst aus. <?php $counterstand = fgets($datei, 10); ?> Mit fgets lesen wir eine Datei, der erste Wert in der Klammer gibt an, welche Datei wir lesen, der zweite Wert wie viele Zeichen wir lesen. In diesem fall 10 Zeichen, weil ein Counter i.d.R. nicht mehr als 10 Zeichen hat. Das gelesene Speichern wir in der Variable $counterstand. Aber was ist wenn diese Datei leer ist? Dazu benutzen wir eine einfache if-Anweisung. <?php if($counterstand == "") { $counterstand = 0; } ?> Hier wird überprüft, ob die Datei einen Inhalt hat, wenn sie keinen Inhalt hat, so wird der Counterstand auf 0 gesetzt. Wir wollen ja, wenn der Besucher die Site besucht, den Counterstand um 1 erhöhen. Dies geht mit $counterstand++;. Seite: 23 Was kann man mit PHP machen? Dabei wird der Wert von $counterstand um 1 erhöht. Der neue Wert ist wieder in $counterstand gespeichert. Danach müssen wir dem Besucher die Zahl ausgeben, das machen wir ganz einfach mit echo. <?php $counterstand++; echo $counterstand; ?> Durch das lesen des Counterstandes/der Datei, ist der 'Dateizeiger' nicht mehr am Anfang der Datei. Würden wir jetzt den neuen Wert speichern, so würde der alte Wert nicht überschrieben werden. So würde aus dem Counterstand 1 plötzlich eine 12 werden. <?php rewind($datei); ?> Mit rewind setzten wir den Dateizeiger wieder an den Anfang der Datei. Und anschließend tragen wir den neuen Wert wieder in die Datei ein. <?php fwrite($datei, $counterstand); ?> Mit fwrite (man kann auch fputs benutzen) tragen wir in die Datei ($datei) den neuen Counterstand (der in der Variable $counterstand ist) ein. Zum Schluss schließen wir noch die Datei: <?php fclose($datei); ?> Unser gesamte Code sieht dann so aus: <?php $datei = fopen("counter.txt","r+"); $counterstand = fgets($datei, 10); if($counterstand == "") { $counterstand = 0; } $counterstand++; echo $counterstand; rewind($datei); fwrite($datei, $counterstand); fclose($datei); ?> Durch die Arbeit mit Dateien sind auch noch viele weitere Anwendungen möglich, z.B. Logfiles, Newsscripts, Gästebücher und sogar Foren. Allerdings sind diese Sachen dann meistens alle recht Simpel gehalten und bieten kaum weitere Funktionen, da dies sehr schwer zu realisieren ist. Deswegen sollten wir uns nicht solange damit aufhalten, sondern lieber mit Datenbank (MySQL) arbeiten. Wichtig: Wenn ihr mit diesen Prinzip auf eurem Server (Webspace) arbeitet, dann müsst ihr den Dateien, in denen ihr etwas schreiben möchtet, die Schreibrechte CHMOD(unix) 777 geben. Wie das geht erfahrt ihr hier. Um eine Datei komplett auszugeben brauchen wir als erstes eine PHP Schleife. PHP: Schleifen Seite: 24 Was kann man mit PHP machen? While-Schleife In manchen Fällen ist es notwendig, eine Anweisung so lange auszuführen, bis ein bestimmtes Ergebnis eintritt. Dies benutzt man z.B. auch um den Inhalt von Datenbanken (z.B. MySQL) oder einfach den Inhalt von Dateien auszugeben. PHP bietet dafür die while-Schleife und auch die for-Schleife an. while-Schleifen werden vorallem in Verbindung mit Datenbanken verwendet, während for-Schleifen meistens nur zum Hoch- bzw. Runterzählen von Werten verwendet werden. Unser PHP Script enthält eine Schleife, die solange zählt, bis eine bestimmte Zahl erreicht ist. Dafür brauchen wir als erstes ein Formular, indem wir die Zahl eingeben. <form action="seite2.php" method="post"> Eine Zahl zwischen 1 und 25:<br> <input type="Text" name="zahl"> <input type="Submit" value="Absenden"> </form> Der nächste Schritt ist die while-Schleife. Zuerst fragen wird selbstverständlich unseren Zahlenwert ab. Bei while-Schleifen arbeitet man meistens mit einem "internen Counter", der zunächst initialisiert wird - in diesem Fall mit dem Wert 0. <?php $zahl = $_POST['zahl']; $a = 0; ?> Diese Zahl speichern wir in der Variable $a. Wir könnten natürlich auch jede andere Variable benutzen. Der Wert entscheidet darüber, ab wann PHP anfangen soll zu zählen, wir könnten auch von -10 zählen lassen. Dann brauchen wir unsere while-Schleife. <?php while($a < $zahl) { $a++; echo $a.", "; } ?> Direkt nach dem einleitenden while wird innerhalb der runden Klammer die Bedingung gestellt. Solange diese Bedingung zutrifft, wird jetzt die Anweisung, der Code innerhalb der geschwungenen Klammern, ausgeführt. Zum Anfang erhöhen wir den Wert von $a um eins, denn wir wollen dort als erste Zahl eine 1 stehen haben. Wir können natürlich auch am Schluss $a++ schreiben, dann wäre aber die erste Ausgabe eine Null. Seite: 25 Was kann man mit PHP machen? Das erhöhen der Variable $a ist ganz wichtig, sonst würde sich PHP dumm und dämlich zählen, denn die Bedingung wäre dann immer wahr. Zwischen den geschwungenen Klammern geben wir die Zahl und ein Komma aus, damit es besser aussieht. Der ganze Script sieht dann so aus: <?php $zahl = $_POST["zahl"]; //Eine kleine Überprüfung, //damit keine zu großen Zahlen eingegeben werden if($zahl > 25) { $zahl = 25; } $a = 0; while($a < $zahl) { $a++; echo $a.", "; } ?> for-Schleife Neben der while-Schleife gibt es auch noch die for-Schleife. Diese ist etwas komplizierter und mit ihr lässt man nur Werte Hoch- bzw. Runterzählen. Wir benutzen wieder das Beispiel mit dem Zählen. Der erste Teil bleibt gleich: <?php $zahl = $_POST["zahl"]; if($zahl > 25) { $zahl = 25; } ?> Doch jetzt brauchen wir die for-Schleife. <?php for($a = 0; $a < $zahl; $a++) { echo $a; echo ", "; } ?> Bei der for-Schleife geben wir die Variable $a innerhalb der runden Klammern an. Dort geben wir nach dem erstem Semikolon (;) die Bedingung an. Zum Schluss (auch durch ein Semikolon ; getrennt) erhöhen wir den Wert von $a um 1. Seite: 26 Was kann man mit PHP machen? Wir benutzen als Startwert 0, und die Schleife läuft insgesamt $zahl (max. 25) mal durch. Die erste Ausgabe wird eine 0 sein. Schleifen braucht man sehr oft, wenn man mit Datenbanken oder Dateien arbeitet. Als nächstes schauen wir uns die Array Funktion an. PHP: Array Um verschiedene Werte in nur einer Variable zu speichern, verwendet man in PHP ein Array. Bisher konnte jede Variable nur einen Wert speichern, in PHP können in einem Array beliebig viele Werte gespeichert werden, auch von unterschiedlichen Typen. So kann ein PHP Array z.B. eine Zeichenkette (String/Text), eine Ganzzahl und eine Zahl mit Kommastellen enthalten und auf jeden dieser Werte kann man separat zugreifen. Aber PHP kann noch mehr mit Arrays anstellen. Das hört sich jetzt alles recht kompliziert an, ist aber ganz einfach, darum hier ein Beispiel: <?php $wochentage = array("Sonntag","Montag","Dienstag", "Mittwoch","Donnerstag","Freitag","Samstag"); ?> Einem PHP Array wird ganz normal ein Variablenamen zugeordnet, hier wochentage, allerdings erfolgt die Zuweisung der Daten nicht einfach durch das Gleichheitszeichen, sondern danach kommt noch der Befehl: array();. In diesem Befehl sind jetzt die verschiedenen Werte gespeichert, bei uns die ausgeschriebenen Wochentage. Das Zugreifen auf solch einen Wert ist auch relativ simpel: <?php echo $wochentage[1]; ?> Ausgabe: Montag Wir geben zuerst wieder den Variable-Namen (wochentage) an und danach das Element bzw. den Wert, auf das wir zugreifen möchten. Ein Array hat dabei die enthaltenen Werte durchnummeriert, und fängt bei 0 an zu zählen. Also mit $wochentage[0]; würden wir den Wert Sonntag erhalten, Montag hat die Nummer (bzw. den Index) 1 und so weiter. Bei großen Arrays wird es natürlich irgendwann umständlich, zu wissen, welche Nummer/Index zu welchem Wert gehört, darum gibt es assoziative PHP Arrays. Das heißt, man kann für einen Wert einen Schlüssel/Key zuweisen, dies kann z.B. eine andere Zeichenkette sein. Die Zuweisung erfolgt per: => <?php $wochentage = array( "so" => "Sonntag", "mo" => "Montag", "di" => "Dienstag", "mi" => "Mittwoch", "do" => "Donnerstag", "fr" => "Freitag", "sa" => "Samstag"); ?> Seite: 27 Was kann man mit PHP machen? Dies ist wieder ein Array mit unseren Namen der Wochentage. Dabei wurde dem Schlüssel so der Wert Sonntag zugewiesen, dem Schlüssel mo dem Wert Montag. Der Vorteil ist, dass man jetzt bequemer auf das Array zugreifen kann: <?php echo $wochentage["mo"]; ?> Ausgabe: Montag Anstatt jetzt die Nummer/Index des Elementes anzugeben, gibt man hier den Schlüssel für das Element an, also so für Sonntag, mo für Montag und sa für Samstag. Selbstverständlich kann man nachträglich auch Werte in einem Array verändern: <?php $wochentage["mo"] = "Monday"; echo $wochentage["mo"]; ?> Ausgabe: Monday Das selbe gilt für Arrays mit Nummer/Indexen. Ein weiterer Vorteil ist, dass man einem Array neue Werte hinzufügen kann, diese Werte könnten z.B. aus einer Datenbank stammen. Das ganze Funktioniert so: <?php $mitarbeiter = array("Bob","Peter"); $mitarbeiter[] = "Lisa"; echo $mitarbeiter[2]; ?> Ausgabe: Lisa Mit $mitarbeiter[] wird automatisch ein neues Element in unserem Array erstellt, und diesem wird der Wert Lisa zugewiesen. Wir könnten unser Array sogar so erstellen: <?php $mitarbeiter = array(); $mitarbeiter[] = "Bob"; $mitarbeiter[] = "Peter"; $mitarbeiter[] = "Lisa"; ?> Hier wird zuerst ein leeres Array erstellt und danach werden die Mitarbeiter hinzugefügt. Mit assoziativen PHP Arrays funktioniert dies ähnlich, aber wir müssen den Schlüssel mit angeben: <?php $mitarbeiter = array( "Bob" => "Bob Meier", "Peter" => "Peter von Hausen"); $mitarbeiter["Lisa"] = "Lisa Müller"; echo $mitarbeiter["Lisa"]; ?> Ausgabe: Lisa Müller Wenn der Schlüssel schon vergeben wurde, dann wird der Wert für die Schlüssel überschrieben. Anzahl der Elemente Seite: 28 Was kann man mit PHP machen? Wenn wir in einem Array dynamisch neue Elemente hinzufügen können, dann ist es sehr wichtig zu wissen, wie viele Elemente das Array überhaupt enthält, dies funktioniert mit: count($names_des_array);: <?php $mitarbeiter = array("Bob","Peter"); echo count($mitarbeiter); ?> Ausgabe: 2 Wir erhalten als Ausgabe 2, denn in dem Array sind 2 Mitarbeiter gespeichert, der letzte Index ist allerdings 1, weil bei 0 angefangen wird zu zählen. Um den letzten Eintrag auszugeben, müssen wir von dem Wert einfach 1 abziehen. Elemente ausgeben Zum Ausgeben aller Elemente in einem Array benutzt man gewöhnlich eine Schleife, dies kann eine for oder eine while Schleife sein: <?php $mitarbeiter = array("Bob","Peter","Lisa"); echo "For-Schleife: <br>"; for($i=0; $i < count($mitarbeiter); $i++) { echo $mitarbeiter[$i]."<br>"; } echo "<br> While-Schleife: <br>"; $i = 0; while($i < count($mitarbeiter)) { echo $mitarbeiter[$i]."<br>"; $i++; } ?> Beide Varianten funktionieren einwandfrei, aber es gibt noch eine 3. Schleife: foreach <?php $mitarbeiter = array("Bob","Peter","Lisa"); echo "Foreach-Schleife: <br>"; foreach($mitarbeiter AS $name) { echo $name."<br>"; } ?> Im Schleifenkopf definieren wird, dass die Werte in $name gespeichert werden soll. Unter dieser Variable können wir dann innerhalb der Schleife auf den jeweiligen Namen des Mitarbeiters zugreifen. Suchen & Sortieren Ein weiteres Feature ist, dass wir ein Array durchsuchen und sortieren können. Zuerst die Suchfunktion, dies geht mit in_array($suche,$array);: <?php $mitarbeiter = array("Bob","Peter","Lisa"); if(in_array("Bob",$mitarbeiter)) { echo "Der Name Bob ist in dem Array enthalten"; Seite: 29 Was kann man mit PHP machen? } ?> Hier überprüfen wir, ob Bob in dem Mitarbeiter-Array vorhanden ist, wenn ja, gibt die Funktion true zurück, und ein Text wird ausgegeben (das Bob in dem Array vorhanden ist). Das war auch schon das Gröbste zum Suchen, jetzt das Sortieren. Oft herrscht in so einem Array 'Chaos', dass z.B. die Mitarbeiter wild hinzugefügt wurden. Möchte man jetzt eine alphabetische Liste der Mitarbeiter ausgeben, dann muss man das Array zuerst sortieren. PHP bietet dafür viele Möglichkeiten. Möchte man die Werte sortieren, verwendet man die Funktionen asort oder arsort, wobei asort eine aufsteigende Reihenfolge (a,b,c,d) liefert und arsort eine absteigende (d,c,b,a). Beispiel: <?php $mitarbeiter = array("Klaus","Arnie","Willi"); //Array sortieren asort($mitarbeiter); //Array ausgeben echo "Foreach-Schleife: <br>"; foreach($mitarbeiter AS $name) { echo $name."<br>"; } ?> Hier wird per asort() das Array in aufsteigender Reihenfolge sortiert und danach mit foreach ausgegeben. Um die Schlüssel (mit deren Werte), zu sortieren, verwendet man ksort oder krsort. Beispiel: <?php $mitarbeiter = array( "Zabel" => "Klaus", "Meier" => "Arnie", "Brand" => "Willi"); //Array sortieren ksort($mitarbeiter); //Array ausgeben echo "Foreach-Schleife: <br>"; foreach($mitarbeiter AS $name) { echo $name."<br>"; } ?> Mehrdimensionale Arrays In einem Array kann man ein weiteres Array, und in diesem Array wieder ein Array speichern, und so weiter. Solche Arrays nennt man dann mehrdimensionale Arrays. Die Dimension gibt dabei an, wie Tief diese Verschachtelung geht. Ein normales Array wäre ein 1dimensionales Array, wenn jetzt in dem Array ein weiteres Array gespeichert ist, ist dies ein 2dimensionales Array. Dafür hier ein Beispiel: Seite: 30 Was kann man mit PHP machen? <?php $mitarbeiter = array( array("Klaus", "Zabel"), array("Arnie", "Meier"), array("Willi", "Brand") ); //Daten ausgeben echo "Vorname: ".$mitarbeiter[0][0]; echo " Nachname: ".$mitarbeiter[0][1]; ?> Ausgabe: Vorname: Klaus Nachname: Zabel Wie wir sehen, gibt man jetzt nicht nur einen Index an, sondern zwei. Der erste Index gibt an, welchen Mitarbeiter wir aus der Liste haben möchte, und der zweite Index ob wir den Vornamen, oder den Nachnamen ausgeben möchten. Dies geht natürlich auch mit assoziativen Arrays und der 'anderen' Schreibweise: <?php $mitarbeiter = array(); $mitarbeiter[] = array("Vorname"=>"Klaus", "Nachname"=>"Zabel"); $mitarbeiter[] = array("Vorname"=>"Arnie", "Nachname"=>"Meier"); $mitarbeiter[] = array("Vorname"=>"Willi", "Nachname"=>"Brand"); //Daten ausgeben echo "Vorname: ".$mitarbeiter[0]["Vorname"]; echo " Nachname: ".$mitarbeiter[0]["Nachname"]; ?> Da wir jetzt in einem normalem Array ein assoziatives Array (also eins mit Schlüssel) speichern, müssen wir als zweiten Wert auch den Schlüssel für Vor/Nachname angeben. Dies geht natürlich auch mit noch mehr Dimensionen, z.B. so: <?php $mitarbeiter = array(); $mitarbeiter["Klaus"]["Vorname"] = "Klaus"; $mitarbeiter["Klaus"]["Nachname"] = "Zabel"; $mitarbeiter["Klaus"]["Kinder"][] = "Klaus-Junior"; $mitarbeiter["Klaus"]["Kinder"][] = "Kind2"; //Daten ausgeben echo "Vorname: ".$mitarbeiter["Klaus"]["Vorname"]; echo " Nachname: ".$mitarbeiter["Klaus"]["Nachname"]; echo "<br> Er hat "; echo count($mitarbeiter["Klaus"]["Kinder"])." Kinder"; //Ausgabe von Kind1: //$mitarbeiter["Klaus"]["Kinder"][0]; echo "<br> Kinder: <br>"; foreach($mitarbeiter["Klaus"]["Kinder"] AS $name) { echo $name."<br>"; } ?> Seite: 31 Was kann man mit PHP machen? Dies ist schon etwas schwerer zu verstehen, aber wenn man es verstanden hat, sollte es eigentlich keine weiteren Fragen zu Arrays geben. Also zuerst haben wir wieder unser Array mit dem Mitarbeiter Klaus. Dabei benutzen wir diesmal gleich ein assoziatives Array. Für Klaus wurde jetzt der Vorname und der Nachname gespeichert, dies sollte ja noch bekannt sein. Unter dem Schlüssel Kinder fügen wir jetzt ein weiteres Array hinzu, wobei jedes Element dieses Arrays den Namen eines Kindes von ihm enthält. Dieses Array mit den Kindernamen können wir ganz normal per foreach ausgeben. Das war's auch schon was man über Arrays wissen muss. Jetzt können wir Dateien komplett ausgeben. Datei auslesen Jetzt lernen wir, wie wir mit PHP eine Datei komplett auslesen können. Dafür gibt es in PHP zwei Möglichkeiten, die erste Möglichkeit ist es, die Datei zeilenweise in ein Array einzulesen. Die erste Möglichkeit ist zu überprüfen, ob der Dateizeiger am Ende der Datei ist. Sobald der Dateizeiger am Ende der Datei ist, hört der Script auf zu lesen. Dies geht so: <?php $userdatei = fopen("datei.txt","r"); while(!feof($userdatei)) { $zeile = fgets($userdatei,1024); echo $zeile; } fclose($userdatei); ?> Zuerst öffnen wir die Datei datei.txt mit dem Lesemodus r. Die while-Schleife läuft solange bis, der Dateizeiger am Ende der Datei steht. Dies überprüfen wir mit !feof. Danach lesen wir einfach die nächsten 1024 Zeichen aus der Datei aus und geben diese aus. Man kann natürlich auch einen anderen Wert benutzen, aber man sollte nicht so kleine Werte benutzen, denn wenn ihr dort z.B. 2 eingebt, und eure Datei 1000 Zeichen hat, so muss die Schleife 500 mal durchlaufen. Dies dauert natürlich viel länger, als wenn PHP auf einmal z.B. 1024 Zeichen liest. Ihr könnt auch größere Werte benutzen, z.B. 5000. Wenn der Dateizeiger am Ende angekommen ist, ist die while-Schleife beendet und die Datei wird wieder geschlossen. Seite: 32 Was kann man mit PHP machen? Die zweite Möglichkeit ist deutlich leichter, und zwar benutzt man dann den Befehl file: <?php $datei = file("datei.txt"); ?> Danach können wir den Inhalt des Arrays wieder mit einer geeigneten Schleife ausgeben. Entweder mit einer while-Schleife, for-Schleife oder auch mit foreach. Wir können den Inhalt jetzt so wie ein Array behandeln, also nach Werten suchen (in_array), diese Werte sortieren oder auch Werte hinzufügen. <?php $datei = file("datei.txt"); foreach($datei AS $meine_datei) { echo $meine_datei."<br>"; } ?> Ich würde die Funktion file() empfehlen. Wir haben auch die Möglichkeit per implode() ein Array anhand eines Trennzeichen zu einem String/Text zusammenzufügen: <?php $datei = implode("",file("datei.txt")); echo $datei; ?> Dabei wird als Trennzeichen "" (leer) benutzt. Man kann sich dieses aneinander hängen so vorstellen: Zuerst wird das erste Arrayelement ($array[0]) in der Variable gespeichert, dann folgt das Trennzeichen, danach kommt dann das zweite Arrayelement und dann wieder ein Trennzeichen und so weiter. Möchte man z.B. dass jede Zeile in der Datei auch eine neue Zeile im Browser ist, so wird als Trennzeichen ein <br> benutzt: <?php $datei = implode("<br>",file("datei.txt")); echo $datei; ?> Explode Die explode Funktion ist sehr wichtig, wenn man mit Dateien arbeitet. explode trennt einen Text an bestimmten Stellen (diese werden vom Programmierer bestimmt) und speichert die Textabschnitte in einem Array. So können wir das Array wieder speziell Abfragen. Diese Funktion bringt uns viele Vorteile, so können wir z.B. einen Login-Script basteln, das den Benutzername und das Passwort in einer externen Datei speichert. So können wir aber auch Texte viel leichter formatieren, z.B. die aus einem Gästebuch-Script. Möchte man später das Design des Gästebuches verändern, so muss man nicht den ganzen Inhalt der Datei verändern (in der die Einträge gespeichert sind), sondern man muss nur ein paar Zeilen im PHP- Seite: 33 Was kann man mit PHP machen? Code verändern. Die Funktion kann man sowohl bei Texten, als auch bei Inhalten von gelesenen Dateien benutzen. <?php $zeile = "24.12.2006|Weihnachten|Frohes Fest"; $zerlegen = explode("|", $zeile); echo "<b>$zerlegen[0]</b>, <i>$zerlegen[1]</i> <u>$zerlegen[2]</u>"; ?> Als Ausgabe erhalten wir folgendes Erhalten: 24.12.2006, Weihnachten Frohes Fest Wir schreiben unseren Text in die Variable $zeile und trennen dann die einzelnen Abschnitte mit | (Alt Gr + <). Danach benutzen wir die Funktion explode, diese trennt unseren Text überall, wo ein | steht. Wir könnten auch andere Zeichen benutzen, aber man sollte immer Zeichen benutzen, die man normalerweise nie für einen Text benutzen. (Also kein . (Punkt) nehmen o.ä.). Danach geben wir mir echo den ersten Wert des Arrays aus (24.12.2006), danach den zweiten Wert (Weihnachten) und zum Schluss den dritten Wert (Frohes Fest). Wir Ihr wisst, fangen Arrays immer bei 0 an zu nummerieren. So können wir alle gespeicherten Werte unabhängig voneinander bearbeiten. Wenn wir dann mit implode das bearbeitete Array zusammenführen, können wir sehr leicht veränderte Textdateien abspeichern. Dieses Verfahren benutzt man besonders oft, wenn man mit Textdateien arbeitet. Denn würde man in die Textdatei nicht die reine Information, also nur die Eingaben des Benutzers speichern, sondern auch noch HTML Tags, so wäre das Neu design der Ausgabe extrem schwierig. Und wenn man z.B. die eingegebene Emailadresse vor der Ausgabe noch einmal überprüfen möchte, ist dies fast unmöglich. Hier ein Beispiel: Wir erstellen einen kleinen Shoutbox, aber nur den Teil, wie wir den Text wieder ausgeben. Zuerst legen wir eine neue Datei an (text.txt). Dort schreiben wir folgendes rein: PHP-Einfach|Wie geht es euch? Andavos|Super Site Peter|Hier kann man echt viel lernen Den Text könnt ihr euch selber aussuchen, aber achtet darauf das zwischen dem Namen und dem Text ein | (Alt Gr + <) steht. Jetzt wollen wir das mal wieder ausgeben. <?php $datei = file("text.txt"); Seite: 34 Was kann man mit PHP machen? foreach($datei AS $ausgabe) { $zerlegen = explode("|", $ausgabe); echo "Von <b>$zerlegen[0]</b><br> $zerlegen[1]<br><br>"; } ?> Da wir einen Zeilenumbruch als Trennzeichen der einzelnen Einträge benutzt haben, empfiehlt es sich hier, diese Datei per file() einzulesen. Danach kommt eine foreach-Schleife. Jede Zeile aus der Datei wurde ja als eigenes Arrayelement gespeichert, und mit der foreach-Schleife gehen wir diese nacheinander durch. Dabei haben wir das aktuelle Arrayelement per AS in die Variable $ausgabe gespeichert. Mit explode trennen wir die einzelnen Abschnitte voneinander, anhand des Trennzeichen | und speichern dies in dem Array $zerlegen Danach geben wir mit echo den Inhalt der Datei aus. Die Ausgabe würde so aussehen: Von PHP-Einfach Wie geht es euch? Von Andavos Super Site Von Peter Pan Hier kann man echt viel lernen Man kann natürlich auch eine for- oder while-Schleife benutzten, dies würde dann so aussehen: <?php $datei = file("counter.txt"); for($a = 0; $a < count($datei); $a++) { $zerlegen = explode("|", $datei[$a]); echo "Von <b>$zerlegen[0]</b><br> $zerlegen[1]<br><br>"; } echo "<br><br>Und jetzt die while-Schleife"; $datei = file("counter.txt"); $a = 0; while($a < count($datei)) { $zerlegen = explode("|", $datei[$a]); echo "Von <b>$zerlegen[0]</b><br> $zerlegen[1]<br><br>"; $a++; } ?> Seite: 35 Was kann man mit PHP machen? Mit dieser Funktion können wir schon komplexe Scripts erstellen, die nur Textdateien benötigen, darunter gehören auch recht sichere Login-Systeme. Als nächstes schauen wir uns die Datum und Uhrzeit Funktion von PHP an. Datum und Uhrzeit Oft ist es interessant zu wissen, wann etwas gespeichert wurde, deswegen unterstützt PHP auch Datums- und Uhrzeitangaben. Das Datum und die Zeit werden von der Server Uhr abgelesen und können somit nicht von dem Anwender manipuliert werden, allerdings sollte die Server Uhr dann auch richtig gehen. In PHP ermittelt man die Uhrzeit zuerst mit einem UNIX-Timestamp. Dieser beinhaltet alle Sekunden seit dem 1.1.1970 um 0:00 Uhr. Dadurch entsteht so ein Wert: 1266929979 Mit diesem Wert können wir noch nicht viel Anfangen, aber PHP darum um so mehr. Aber zuerst brauchen wir den Timestamp, das geht so: <?php $timestamp = time(); ?> Mit dem Befehl time() ermitteln wir den aktuellen Timestamp und dieser wird in der Variable $timestamp gespeichert. Jetzt gibt es die Funktion date(format, timestamp) Um jetzt ein Datum auszugeben, wenden wir den Befehl date mal an: <?php $timestamp = time(); $datum = date("d.m.Y - H:i", $timestamp); echo $datum; ?> Das Ergebnis sieht so aus: 23.02.2010 - 13:59 Hier sind ein paar Formate die Ihr benutzen könnt. Format Funktion Beispiel d Tag des Monats, zweistellig 04, 15 j Tag des Monats 5, 23 m Nummer des Monats, zweistellig 05, 12 n Nummer des Monats 4, 11 y Jahr, zweistellig 98, 05 Seite: 36 Was kann man mit PHP machen? Y Jahr, vierstellig 1998, 2005 H Stunden im 24-Stunden-Format, zweistellig 04, 18 G Stunden im 24-Stunden-Format 4, 14 i Minuten, zweistellig 04, 32 s Sekunden, zweistellig 02, 55 w Wochentag in Zahlenwert 1, 5 Das sind die wichtigsten Formate, aber es gibt noch weitere Formate, die man aber eher selten benötigt. Die Zeichen zwischen den Buchstaben (d.m.Y) dienen zur Trennung der Werte (Tag.Monat.Jahr), man kann diese auch weglassen bzw. ändern. Ihr könntet das Datum auch so ermitteln: <?php $datum = date("d.m.Y - H:i"); echo $datum; ?> Dabei wird immer vom aktuellen Timestamp ausgegangen, man kann aber auch den Timestamp in einer Datei, Variable bzw. in einer Datenbank abspeichern. Diesen kann man später abfragen und dann ausgeben. Wann wurde das geschrieben? Manchmal möchte man wissen, vor wie vielen Minuten, Stunden oder auch Tagen etwas geschrieben wurde. Man könnte jetzt denken, dies würde so gehen, aber das ist falsch: <?php $timestamp = "120"; $test = date("i", $timestamp); echo $test; ?> Hier bekommen wir als Ausgabe 02, weil 120 Sekunden 2 Minuten sind. Aber gebt dort anstatt eine 120 eine 10900 ein. Das wären dann natürlich viel mehr als 2 Minuten (181 Min.), aber als Ausgabe erhalten wir 01. Das kommt, weil PHP immer die Minuten für eine bestimmte Uhrzeit angibt, und das ist natürlich nicht richtig. Deswegen brauchen wir für so etwas Mathe. Wie wir wissen, hat 1 Minute 60 Sekunden, also teilen wir die Sekunden einfach durch 60. <?php Seite: 37 Was kann man mit PHP machen? $timestamp = "120"; echo round($timestamp / 60); ?> Mit round lassen wir den Wert auf, bzw. abrunden. Möchtet Ihr den Wert immer abrunden, so benutzt anstatt round einfach floor. Heute ist Dienstag Manchmal möchte man ausgeben: Heute ist Dienstag. PHP selber kann nur die Wochentage in der englischen Schreibweise ausgeben, aber wir möchten ja die deutsche Schreibweise benutzen. Deswegen erstellen wir als erstes ein Array, indem wir die ganzen Wochentagsnamen speichern: <?php $tage = array("Sonntag","Montag","Dienstag", "Mittwoch","Donnerstag","Freitag","Samstag"); ?> Um jetzt den richtigen Tag auszugeben, verwenden wir so eine Ausgabe: $tage[Nummer] Um die Nummer des Tages zu bekommen, benutzen wir wieder die Date-Funktion <?php $tag = date("w"); ?> Das Format w gibt uns den Wochentag zurück. Ihr könnt dort natürlich auch den Timestamp zu einem bestimmten Zeitpunkt angeben. Jetzt geben wir das einfach aus: <?php echo $tage[$tag] ?> So kann man auch Monatsnamen ausgeben lassen, allerdings fängt ein Array bei 0 an zu Nummerieren, aber es gibt keinen Monat 0. Darum müssen wir den Werten des Array die Monatszahl zuordnen: <?php $monate = array( 1=>"Januar", 2=>"Februar", 3=>"März", 4=>"April", 5=>"Mai", 6=>"Juni", 7=>"Juli", 8=>"August", 9=>"September", 10=>"Oktober", 11=>"November", 12=>"Dezember"); ?> Danach fragen wir die Zahl des Monats ab: <?php $monat = date("n"); Seite: 38 Was kann man mit PHP machen? ?> Dies geht mit dem Format n, zum Schluss lassen wir das wieder wie oben ausgeben: <?php echo $monate[$monat]; ?> Die Ausgabe wäre: Feber Mit PHP können wir auch E-Mails verschicken Mail Funktion Die E-Mail Funktion von PHP ist sehr praktisch, denn damit können wir Formulardaten versenden lassen oder ganze Newsletter-Scripts erstellen. Man kann dieses Verfahren auch für ein Gästebuch benutzen, z.B. das man eine Mail erhält, wenn sich jemand in das Gästebuch einträgt. Wichtig Wenn ihr diese Funktion auf eurem Computer ausführt, erhaltet ihr normalerweise eine Fehlermeldung: Warning: mail():... Dies kommt, weil euer virtueller Server keine E-Mails verschicken kann. Die Fehlermeldung könnt ihr ignorieren, denn auf dem echtem Server sollte sie eigentlich nicht mehr auftreten. Mit der PHP-Funktion mail() könnt Ihr die Mails verschicken, der Befehl sieht so aus: <?php mail(Empfängeremail, Betreff, Nachricht, "From: Absender <absenderemail>"); ?> Es ist sinnvoll die einzelnen Texte in Variablen zu speichern, damit man die Übersicht behält. So lassen sich aber nur Text E-Mails verschicken, HTML E-Mails sind etwas komplizierter (siehe unten). Eine fertige PHP Mail Funktion würde so aussehen: <?php $empfaenger = "[email protected]"; $betreff = "Die Mail-Funktion"; $from = "From: Nils Reimers <[email protected]>"; $text = "Hier lernt Ihr, wie man mit PHP Mails verschickt"; mail($empfaenger, $betreff, $text, $from); ?> So wird eine Mail von [email protected] an [email protected] verschickt. Wenn euer Server richtig eingestellt ist, sollte die E-Mail sofort ankommen. Natürlich könnt Ihr die Texte auch von einem Formular abfragen. Die Mail wird so verschickt wie es im Quelltext des Scripts steht. Wenn Ihr z.B. ein ü durch &uuml; (HTML Code für ein ü) ersetzen lasst, so steht es später in der Mail: &uuml;. Denn dort werden dann nicht die Umlaute angezeigt, sondern der HTML-Code dafür (bei Text Emails). Seite: 39 Was kann man mit PHP machen? Außerdem dürft Ihr keine HTML-Befehle benutzen, wenn z.B. in der E-Mail <br> steht, so wird das nicht in einen Zeilenumbruch verwandelt, sondern in der Mail steht dann <br>. Für Zeilenumbrüche reicht ein einfaches Enter im Quelltext bzw. ein \n. Um etwas Einzurücken, müsst ihr Tab bzw. Space benutzen. HTML-Emails Man kann mit PHP auch HTML-Emails verschicken Aber Ihr solltet wissen, das nicht alle E-Mail Programme und E-Mail Anbieter diese HTML-Emails richtig anzeigen. Man kann der E-Mail dann auch einen schwarzen Hintergrund geben mit weißer Schrift. Aber Achtung, nicht alle E-Mail Programme/Anbieter zeigen die weiße Schrift an. Diese ersetzten sie dann manchmal durch schwarze Schrift, oder den schwarzen Hintergrund durch einen weißen. Somit kann der Empfänger die E-Mail nicht lesen, weil der Text und der Hintergrund identisch sind. Damit PHP HTML-Emails verschicken kann, müsst Ihr die $from Variable etwas verändern. <?php $empfaenger = "[email protected]"; $betreff = "Die Mail-Funktion"; $from = "From: Nils Reimers <[email protected]>\n"; $from .= "Reply-To: [email protected]\n"; $from .= "Content-Type: text/html\n"; $text = "Hier lernt Ihr, wie man mit <b>PHP</b> Mails verschickt"; mail($empfaenger, $betreff, $text, $from); ?> Die Variable $from wird einfach ergänzt, aber achtet darauf, das nach dem Absender noch ein \n stehen muss. Außerdem haben wir noch eine Reply (Antwort) Adresse angegeben. Bei dem Text müssen wir aufpassen, dass wir die Anführungszeichen " durch ein Backslash (\) maskieren müssen. Beispiel: Beispiel 2: <?php $text = "Hier lernt Ihr, wie man mit <font color=\"red\">PHP</font> Mails verschickt"; ?> Der Text der Nachricht muss in dem Fall mittels HTML formatiert werden! Hier reicht für ein Zeilenumbruch kein Enter mehr, sondern man muss <br> benutzen. Extra Funktionen Wir können mir der mail-Funktion noch mehr machen, diese Angaben braucht man aber nicht unbedingt. Alle Angaben stehen im From Abschnitt. Seite: 40 Was kann man mit PHP machen? <?php $from="From:Nils Reimers<[email protected]>\n"; $from .= "Reply-To: [email protected]\n"; $from .= "Cc: [email protected]\n"; $from .= "Bcc: [email protected]\n"; $from .= "X-Mailer: PHP/" . phpversion(). "\n"; $from .= "X-Sender-IP: $REMOTE_ADDR\n"; $from .= "Content-Type: text/html"; ?> Mit Cc und Bcc wird die E-Mail an zwei weitere Adressen gesendet. Diese beiden Adresse sind der Cc und Bcc, diese Funktion kennt man auch von seinem Email-Anbieter. Danach wird beim X-Mailer die PHP-Version des Servers angegeben. Mit X-Sender-IP erfahren wir die IP-Adresse des Versenders. Die letzte Angabe bestimmt wieder, das es eine HTML Mail ist. Bei Mailprogrammen wie z.B. Outlook oder Thunderbird kann man sich den Quelltext einer Email anzeigen lassen. Dort gibt es dann auch einen Head-Bereich, der bei uns der Variable $from entspricht. Manche Werte werden von dem Mail-Server angehängt, andere können wir aber im PHP Script definieren. Als nächsten lernen wir, wie man einen Text durchsuchen und ersetzen kann. Suchen und Ersetzen Mit PHP kann man Texte auch durchsuchen lassen, und bestimmte Zeichen/Wörter durch einen anderen Text ersetzten lassen. Der einfachste Befehl dafür lautet: str_replace("Suchen", "Ersetzen", $variable). Ein Beispiel: <?php $text = "Dies ist ein kleines Beispiel"; $text = str_replace("ist", "war", $text); echo $text; ?> Mit str_replace ersetzen wir ist durch war in der Variable $text und speichern dies wieder in der Variable $text. Wichtig zu wissen ist, dass str_replace zwischen Groß- und Kleinschreibung unterscheidet. Manchmal möchte man aber ein Wort ersetzen lassen, egal ob es groß- bzw. klein geschrieben wurde. Dafür gibt es den Befehl eregi_replace. Dieser Befehl baut sich genauso auf, wie str_replace. Ein Beispiel: <?php $text = "Dies IsT ein kleines Beispiel"; $text = eregi_replace("ist", "war", $text); echo $text; ?> Seite: 41 Was kann man mit PHP machen? Hier wird IsT durch war ersetzt. Mit str_replace würde da immer noch IsT stehen. Aber was ist wenn man eregi_replace Sonderzeichen (z.B. eckige Klammer) ersetzen möchte? Ein Beispiel: <?php $text = "Dies [Ist] ein kleines Beispiel"; $text = eregi_replace("[ist]", "war", $text); echo $text; ?> Als Ausgabe erhalten wir einen komischen, nicht lesbaren Satz, weil eckigen Klammer in eregi_replace eine bestimmte Funktion hat. Dafür müssen wir die Klammer wieder mit Backslash maskieren. <?php $text = "Dies [Ist] ein kleines Beispiel"; $text = eregi_replace("\[ist\]", "war", $text); echo $text; ?> Jetzt erhalten wir den richtigen Satz. \n zu <br> PHP wandelt alle Zeilenumbrüche von einem Text, z.B. aus einem Formular, in \n um. Wenn man diesen Text später wieder ausgibt, erhalten wir keine Zeilenumbrüche, weil HTML <br> dafür verwendet. Deswegen müssen wir mit PHP alle \n durch <br> ersetzen. Dies können wir mir str_replace machen. <?php $text = "Dies Ist ein kleines Beispiel"; echo $text; //Vor dem ersetzen echo "<br>"; $text = str_replace("\n", "<br>", $text); echo $text; //Nach dem ersetzen ?> Den selben Effekt würde auch dieses Beispiel erzielen: <?php $text = "Dies Ist ein \n kleines Beispiel"; echo $text; //Vor dem ersetzen echo "<br>"; $text = str_replace("\n", "<br>", $text); echo $text; //Nach dem ersetzen ?> Man kann auch nl2br($variable) benutzen, dabei werden alle \n in <br /> umgewandelt. <?php $text = "Dies Ist ein kleines Beispiel"; $text = nl2br($text); echo $text; ?> Das <br /> ist auch für XHTML kompatibel. Seite: 42 Was kann man mit PHP machen? Anführungszeichen Wenn man in seinem Text Anführungszeichen benutzt, und diesen Text mit PHP dann in einer Datei speichert, werden automatisch alle Anführungszeichen mit einem Backslash (\) versehen. Wenn man diesen Text später aus der Datei ausliest, stellt man fest, das dort immer noch die Backslash sind. Deswegen kann man alle \" durch " ersetzen. Dies geht mit dem PHP-Befehl: $variable = stripslashes($variable); Ein Beispiel: Erstellen Sie die Datei test.txt und schreiben Sie in diese Datei einen Text, in dem ein paar \" vorkommen. Warum macht man dies? Ganz einfach, weil PHP Anführungszeichen maskiert, also wird aus " ein \". Jetzt rufen wir mittels PHP die Datei auf. <?php $lesen = implode("",file("test.txt")); echo $lesen; echo "<br>"; $lesen = stripslashes($lesen); echo $lesen; ?> Sonderzeichen und HTML-Tags Wenn man den Besucher etwas in ein Formular eingeben lässt (z.B. bei Gästebüchern), so kann er auch z.B. HTML-Befehle dort eingeben. Wenn man diesen Text dann ausgibt, so werden die HTMLBefehle ausgeführt. Dies ist besonders schlimm, wenn er den Befehl für eine automatische Weiterleitung eingibt, denn immer wenn man diesen Text aufruft, wird man auf eine andere Seite weitergeleitet. Deswegen können wir alle Sonderzeichen und HTML-Tags in den dafür vorgesehenen HTML-Code umwandeln. Dies bedeutet das aus < ein &lt; wird, aus Ö wird &Ouml;. Dafür gibt es den Befehl htmlentities($variable);. Ein Beispiel: <?php $text = "<a href=\"index.php\">Index</a>"; $text = htmlentities($text); echo $text; ?> Als Ausgabe erhalten wir <a href="index.php">Index</a> Natürlich sind wir nicht gezwungen einen Text zu überschreiben, wenn wir etwas ersetzten möchten, wir können für den neuen Text auch andere Variablen benutzen, aber meisten möchten man ja den ersetzten Text ausgeben, und so benutzen wir weniger Variablen Namen. Seite: 43 Was kann man mit PHP machen? Außerdem sollten wir einen Text erst dann ersetzen lassen, wenn wir ihn ausgeben und nicht wenn wir ihn speichern. In PHP gibt es viele nützliche Funktionen Nützliche Funktionen Hier lernt ihr noch ein paar nützliche Funktionen von PHP kennen. Sie sollen dazu dienen, eure PHP Fähigkeiten zu festigen, was ihr aber auf alle Fälle wissen und verstehen müsst, ist der erste Abschnitt über include. Fremde Dateien einbinden (include) In PHP besteht die Möglichkeit, den Inhalt einer fremden Datei zu laden und auszuführen. Dieses ist extrem praktisch und wird eigentlich in jedem PHP Script verwendet. Wenn ihr später zu MySQL kommt, dann müsst ihr in jedem Script eine Verbindung zu Datenbank aufbauen. Zu diesem Verbindungsaufbau müsst ihr unter anderem den Benutzernamen und das Passwort angeben. Was passiert ihr aber nun, wenn sich z.B. das Passwort verändert? Dann müsst ihr in jeder Datei das Passwort anpassen, was unter Umständen sehr aufwendig ist. Deswegen gibts in PHP die Funktion include("dateiname");, diese lädt aus einer anderen Datei den Inhalt und führt diesen aus. An einem Beispiel sieht das so aus: include.php <?php $name = "Mein Name ist Max Mustermann"; ?> seite.php <?php include("include.php"); echo "Herzlich Willkommen auf meiner Seite<br>"; echo $name; ?> Hier wird in seite.php der Inhalt von include.php geladen und entsprechend ausgeführt, als hättet ihr folgenden Script stehen gehabt: <?php //Inhalt aus include.php $name = "Mein Name ist Max Mustermann"; //Ende Inhalt aus include.php echo "Herzlich Willkommen auf meiner Seite<br>"; echo $name; ?> Dies ist natürlich noch ein recht unspektakuläres Beispiel, aber wie bereits erwähnt, in eigentlich jedem größeren PHP Script findet man include-Anweisungen. Seite: 44 Was kann man mit PHP machen? Auch hilft euch dieser Befehl sehr schön, eure Webseite leichter zu verwalten. Wenn ihr eurer Website eine neue Seite hinzufügen möchtet, dann muss der entsprechende Link ins Menü eingetragen werden. Steht aber dieses Menü auf jeder Seite separat, müsst ihr alle Seiten anpassen. Per include reicht es aber aus, nur eine Seite anzupassen und auf alle Seiten wird diese Änderung übernommen. navigation.php Dies ist meine Navigation:<br> <a href="home.php">Home</a><br> <a href="seite1.php">Seite 1</a><br> <a href="seite2.php">Seite 2</a><br> <hr> home.php <?php include("navigation.php"); ?> Dies ist meine Startseite seite1.php <?php include("navigation.php"); ?> Dies ist meine 1. Unterseite seite2.php <?php include("navigation.php"); ?> Und nun sind wir auf Unterseite 2. Möchtet ihr hier nun eure Navigation anpassen, müsst ihr nur navigation.php entsprechend anpassen. Noch zu erwähnen ist, dass man auch ganz gewöhnlichen HTML Code in Dateien stehen haben kann, die per include geladen werden, wie es hier der Fall bei navigation.php ist. Dieser HTML Code wird dann ganz normal ausgegeben. Gibt es die Variable schon? Möchte man mit PHP überprüfen, ob es eine Variable schon deklariert wurde, d.h. ob es diese schon "gibt", so kann man dies mit isset($variable) überprüfen. <?php $var = $_GET["var"]; if(isset($var)) { echo "Variable wurde gesetzt"; } else { echo "Variable wurde nicht gesetzt"; } ?> Wenn ihr diese Seite ganz normal aufruft, dann erhalten wir als Ausgabe, dass die Variable nicht gesetzt wurde, wenn wir dann aber an die URL ein ?var=123 hängen, erhalten wir als Ausgabe, dass die Variable übermittelt wurde. Wenn man überprüfen möchte, ob es eine Variable noch nicht gibt, benötigen wir !isset($variable) Seite: 45 Was kann man mit PHP machen? <?php $var = $_GET["var"]; if(!isset($var)) { echo "Variable wurde nicht gesetzt"; } ?> Das Ausrufungszeichen vor isset steht für NOT und kehrt die Rückgabe/Ergebnis der Funktion um. Also wenn isset(); TRUE zurück gibt, steht dort ein FALSE und umgekehrt. Man kann aber auch ganz normale Variablen überprüfen lassen. Gibt es diese Datei? Eine gute Frage ist, ob es eine Datei gibt. So kann man z.B. tote Links vermeiden. $datei = "datei.php"; if(file_exists($datei)) { echo "Die Datei gibt es"; } ?> Mit file_exists() können wir überprüfen lassen, ob es eine Datei gibt. Wenn die Datei vorhanden ist, gibt die Funktion TRUE, sonst FALSE zurück Schreibt man !file_exists, so wird überprüft, ob die Datei nicht vorhanden ist. Ist die Datei beschreibbar? Wenn man Texte in Dateien speichert, so dürfen diese Dateien nicht Schreibgeschützt sein, das heißt sie brauchen die Schreibrechte CHMOD(777). Mit is_writeable() können wir überprüfen, ob die Datei beschreibbar ist. <?php if(is_writeable("datei.php")) { echo "sie ist beschreibbar"; } ?> Mit einem Ausrufungszeichen vor dem is_writeable erhalten wir das Gegenteil als Effekt, sprich wir können überprüfen, ob wir die Datei nicht beschreiben können. Zufall Hin und wieder braucht man ein Zufallszahlen, z.B. für kleinere Spielereien. Diese kann man aber auch z.B. benutzen, um ein zufälliges Bild auszugeben. Die Funktion selber ist einfach: <?php $zufall = rand(1,100); echo $zufall; ?> Mit der Funktion rand bestimmen wir eine Zufallszahl zwischen 1 und 100. Ihr könnt natürlich auch einen anderen Zahlenbereich benutzen. Seite: 46 Was kann man mit PHP machen? In der Klammer steht die Untergrenze und danach die Obergrenze des Zahlenraumes. Damit wir nicht immer die gleiche "Zufallszahl" erhalten, ist es wichtig, dass wir einen Startwert festlegen: <?php srand((double)microtime()*1000000); $zufall = rand(1,100); ?> Dies geht mit srand. Dabei werden die Mikrosekunden (microtime) mal 1 Millionen genommen. Anschließend wird wieder eine Zahl zwischen 1 und 100 ermittelt. Bei neueren PHP-Versionen wird die Festlegung des Startwertes automatisch vorgenommen. Den Besucher ausspionieren Mit PHP haben wir die Möglichkeit, viele Informationen über den Besucher zu erhalten z.B. seine IPAdresse. Diese erfahren wir so: <?php $ip = $_SERVER["REMOTE_ADDR"]; echo $ip; ?> Wenn ihr diesen Befehl auf eurem virtuellem Server aufrufen, erhalten ihr normalerweise 127.0.0.1. Auf dem echtem Server erhaltet ihr aber dann die IP Adresse des Besuchers. Außerdem kann man noch erfahren, auf welcher Seite der Besucher gerade ist: <?php $seite = $_SERVER["PHP_SELF"]; echo $seite; ?> Wenn eure Datei jetzt in einem Unterorder liegt, so wird der Ordnername auch angezeigt, möchte man diesen entfernen, so braucht man basename($variable). <?php $seite = $_SERVER["PHP_SELF"]; echo basename($seite); ?> Wenn man aber den Namen des Ordners wissen möchte, sollte man dirname($variable) benutzen. <?php $seite = $_SERVER["PHP_SELF"]; echo dirname($seite); ?> Wenn man viel mit dynamischen Seiten arbeitet, reicht es nicht mehr aus, nur den Dateinamen zu erfahren. Denn wenn man auf der Seite index.php?id=1 ist, und dies mit PHP_SELF anzeigen möchte, so erhält man als Ausgabe index.php. Damit diese Werte auch angezeigt werden, müssen wir die Funktion etwas umschreiben: <?php $seite = $_SERVER["REQUEST_URI"]; echo $seite; ?> Seite: 47 Was kann man mit PHP machen? Jetzt würden wir als Ausgabe z.B. index.php?id=1 erhalten. Mit PHP können wir auch erfahren, woher der Besucher kommt: <?php $seite = $_SERVER["HTTP_REFERER"]; echo $seite; ?> Dieser Befehl funktioniert aber nur, wenn wir durch einen Link oder ähnliches auf die Seite kommen sind. Manche Browser unterdrücken diese Information. Wir können auch erfahren welchen Browser der Besucher benutzt: <?php $browser = $_SERVER["HTTP_USER_AGENT"]; echo $browser; ?> Als nächstes lernen wir, wie man mit PHP Sessions arbeitet. PHP Sessions Mit PHP Sessions hat man die Möglichkeit, bestimmte Daten während einer Folge von Aufrufen eurer Website festzuhalten. Dem Besucher wird eine einzigartige Session-ID zugeordnet. Somit kann PHP den Besucher genau Identifizieren. Diese Session ID wird entweder als Cookie gespeichert oder mit an die URL gehängt. Mit PHP Sessions könnt ihr jetzt theoretisch unendlich viele Variablen, ink. Werte, für einen Besucher speichern, z.B. seinen Username, was er ganz am Anfang in ein Formular eingegeben hat und vieles mehr. Diese Werte könnt ihr später ausgeben und damit auch arbeiten, z.B. überprüfen lassen. Sicherheit und Anwendungsbereich Sessions bieten zwar keine 100%tige Sicherheit, dennoch sind sie relativ sicher. Eine entführte (geklaute) Session-ID ermöglicht dem Dieb, auf alle Daten zuzugreifen, die mit dieser Session-ID verbunden sind. Man benutzt bei sehr vielen Scripts Sessions, z.B. Loginsysteme (Foren & Portale), Warenkörbe etc., deswegen lohnt es sich immer, diese Funktion zu erlernen. Wie bekommt der Angreifer denn die Sesion ID herraus? Das passiert vor allem, wenn die andere Person eine URL mit der Session ID an eine weitere Person weitergibt. Dies kann aber auch passieren, wenn die Session IDs in den Logfiles auftauchen. Session ID durch Zufall erraten Natürlich kann der Dieb auch eine Session ID erraten, allerdings ist dies sehr unwahrscheinlich. Wahrscheinlichkeitsrechnung anschauen Erste Schritte Ganz oben auf der Site, bevor wir irgend etwas ausgeben, egal ob mit PHP oder mit HTML, muss folgendes stehen: <?php Seite: 48 Was kann man mit PHP machen? session_start(); ?> Mit session_start(); sagen wir dem PHP Script, dass diese Seite mit Session arbeitet. Dieser Code muss immer ganz oben stehen, wenn ihr mit irgendwelchen Session Befehlen arbeitet. Hier sind zwei mögliche Fehlerquellen: 1. Cannot send session cookie - headers already sent by Wenn diese Fehlermeldung erscheint, dann ist irgendwo vor dem kleinen Script eine Ausgabe. Eine leere Zeile (Zeilenumbruch) oder ein Space reicht schon aus. 2. Warning: session_start() [function.session-start]: open(...) failed: No such file or directory Wenn diese Warnung erscheint, dann ist der angegebene Pfad zur Speicherung der Session Datei nicht verfügbar. Als nächstes schauen wir, wie wir eine Session-Variable registieren: <?php $_SESSION['name'] = "wert"; ?> Falls du eine ältere PHP Version als 4.1.0 benutzen, musst du $HTTP_SESSION_VARS['name'] benutzen. Um den obigen Wert auszugeben, speichern wir vorher die Session-Variable in einer Variable <?php $name = $_SESSION['name']; echo $name; ?> Wenn wir keine extra Variablen benutzen möchten, so können wir den Session Befehl nicht direkt in die Zeichkette schreiben. So geht es aber: <?php echo "Hallo ".$_SESSION['name']." Mueller"; ?> Dies scheint zwar nicht viel zu sein, allerdings können wir eine Session-Variable genauso behandeln, wie eine normale Variable, nur müssen wir manchmal auf die Anführrungzeichen achten.. Um eine Session zu registieren, benutzt man normalerweise folgenden Script: <?php if (!isset($_SESSION['name'])) { $_SESSION['name'] = "Klaus"; } ?> Hier wird zuerst überprüft ob, es die Session-Varibale schon gibt. Falls es sie nicht gibt, wird sie registriert. Würde wir anstatt !isset isset schreiben, könnten wir überprüfen, ob die Session registriert wurde, oder nicht. Dies benutzt man bei Logins. Um alle Session-Daten der Sitzung zu löschen, benutzt man session_destroy() <?php session_destroy(); ?> Dieser Befehl löscht alle Daten der Session. Dieser Befehl kann nur auf Seiten eingesetzt werden, die mit session_start() beginnen. Dies ist bei allen Session-Befehlen der Fall. Um eine einzelne Session zu deaktivieren, benötigt man unset Seite: 49 Was kann man mit PHP machen? <?php unset($_SESSION['name']); ?> Dieser Befehl löscht die Werte für die Session-Variable name. Beispiel Damit das etwas verständlicher wird, ist hier ein kleines Beispiel. Dabei gibt man zuerst einen Wert in ein Formular ein: formular.html: <form action="seite1.php" method="post"> Dein Name: <br> <input type="Text" name="name"> <input type="Submit"> </form> seite1.php <?php session_start(); //Ganz wichtig $name = $_POST['name']; if(!isset($name)) { $name = "Gast"; } //Session registieren $_SESSION['username'] = $name; //Text ausgeben echo "Hallo $name <br> <a href=seite2.php>Weiter</a>"; ?> seite2.php <?php session_start(); //Ganz wichtig //In $name den Wert der Session speichern $name = $_SESSION['username']; //Text ausgeben echo "Du heißt immer noch: $name"; ?> Dies ist ein ganz simples Beispiel, zeigt aber gleich die Stärke von Sessions. Bei dem Formular geben wir unseren Namen an, diese Daten werden dann an seite1.php gesendet. Dort werden sie abgefragt, und der name aus dem Formular wird in der Session username gespeichert. Wenn wir dann auf den Link klicken, und auf seite2.php gelangen, so können wir dort weiter den Namen des Besuchers (der Names aus dem Formular) ausgeben. Dies könnte man über beliebig viele Seiten weiterführen, mit unbegrentzt vielen Session-Variablen. Es gibt noch weitere, weitaus sinnvollere Beispiele, z.B. Login Sessions bzw. Login mit Sessions und Dateien. Gut jetzt haben wir die wichtigsten PHP-Befehle kennen gelernt, jetzt wird es Zeit, etwas mit MySQL zu arbeiten. Damit kann man viele Sachen viel leichter realisieren. MySQL Einführung Seite: 50 Was kann man mit PHP machen? PHP und MySQL sind eigentlich untrennbar, darum muss jeder der PHP programmieren möchte, auch die Grundlagen von MySQL verstehen. In unserer MySQL Einführung gehen wir auch die wichtigsten Sachen in Verbindung von PHP mit MySQL ein. Anfang Was ist eigentlich MySQL und wie erstelle ich einen MySQL Server auf meinem PC? Tabellen und Spalten Wie lege ich per phpMyAdmin eine Datenbank, Tabellen und Spalten an? Tabellen füllen Wie bekomme ich jetzt Daten in die Tabelle? Verbindung aufbauen Wie baut ein PHP-Script eigentlich eine Verbindung zur MySQL Datenbank auf? Daten abfragen und ausgeben Wie man mit PHP Daten abfragt und diese ausgibt. Weitere Abfragen Weitere Möglichkeiten eine Tabelle abzufragen. Daten hinzufügen Wie speichert man mit PHP Daten in eine Tabelle? Daten ändern Manchmal muss man Daten in einer Tabelle ändern. Daten löschen Hin und wieder muss man ganze Datensätze aus einer Tabelle löschen. Anzahl der Zeilen Wieviele Einträge wurden eigentlich gefunden? Verbindung beenden Zum Schluss beenden wir noch die Verbindung zur Datenbank MySQL Fehler finden Wie man Fehler in der SQL-Abfrage findet. Anfang Ihr könnt euch diese Einführung auch herunterladen MySQL ist eine Datenbank die wie z.B. Access auf SQL aufgebaut ist. Bei den meisten WebspaceAngeboten mit Datenbank handelt es sich um eine MySQL-Datenbank, denn die benötigte Software dafür ist Freeware und sie ist leicht zu bedienen. Auch wenn es am Anfang etwas schwerer ist mit einer Datenbank zu arbeiten, lohnt sich der Umstiegt von Textdateien auf MySQL. Seite: 51 Was kann man mit PHP machen? Denn mit einer Datenbank kann man bestimmte Scripts viel leichter realisieren als mit Textdateien. Denn mit MySQL hat man viel besser Möglichkeiten gezielte Werte auszugeben, zu überprüfen, zu bearbeiten und zu löschen. Wir können auch die Werte in einer Tabelle viel besser sortieren lassen. Rundrum hat die Datenbank gegenüber Dateien ein riesen Vorteil, und eine MySQL Datenbank mit PHP zu "bedienen" ist sehr viel leichter, als mit Textdateien zu arbeiten. Desweiteren sind MySQL Datenbanken schneller als Textdateien und man verliert nicht so schnell die Übersicht, wenn die Tabelle etwas länger wird. Wenn wir Xampp installiert haben, wurde eine MySQL-Datenbank-Server automatisch mit installiert und auch gleich gestartet. Um dies zu Überprüfen, rufen wir folgende Datei auf: c:\xampp\xampp\xampp-control.exe Wenn wir das Programm gestartet haben, erscheint zuerst ein Fenster, auf dem wir den Status der wichtigsten Module erkennen. Hinter Apache: und MySQL: sollte Running stehen, wenn dies nicht der Fall ist, drückt man einfach auf den Start-Button. Wenn wir die xampp_start.exe aufrufen, dann werden diese beiden Dienste normalerweise gestartet. So als nächstes müssen wir für uns einen Benutzer anlegen, dies geht am besten per phpMyAdmin. Normalerweise ist dies gleich mit installiert worden, und wir können es per http://localhost/phpmyadmin aufrufen. Dieser Ordner wird in der Übersicht von http://localhost/ nicht mit angezeigt. Sonst können wir es hier herunterladen. Das Archiv einfach in den Ordner htdocs entpacken und wir können es per Browser über den Server aufrufen. Einfach http://localhost/ordner_von_phpmyadmin/ aufrufen. Dieser Ordner wird dann auch schon angezeigt, wenn wir http://localhost/ aufrufen. Benutzer anlegen So nachdem wir auf die Oberfläche von phpMyAdmin gelangt sind, wollen wir einen neuen Benutzer anlegen. Dafür klicken wir zuerst auf den Link: Rechte Seite: 52 Was kann man mit PHP machen? Danach sehen wir die bereits angelegten Benutzer, allerdings wollen wir einen neuen Erstellen, dafür klicken wir auf: Neuen Benutzer hinzufügen Danach müssen wir die Einstellungen für den Benutzer vornehmen. Als Benutzername habe ich Andavos benutzt. Als Host müssen wir in der Auswahlliste Lokal angeben. Also Kennwort habe ich andavos angegeben. Danach setzen wir die Globale Rechte, dies heißt, wir bestimmen, was der Benutzer alles darf, und was nicht. Bei Daten und Struktur sollten wir alles Auswählen, die Einstellungen bei Administration ist nicht zwingend Notwendig, und auf den meisten Server hat man dort keine Rechte, also muss man diese nicht Auswählen. Dann auf Ok drücken und das war's. Seite: 53 Was kann man mit PHP machen? Danach gelangen wir zu der Übersicht zurück und dort sollte in der Liste ein neuer Eintrag vorhanden sein mit dem Benutzer Andavos und dem Host localhost. So das war es schon, was wir an der MySQL-Datenbank anpassen mussten. Als nächsten schauen wir, wie wir Tabellen und Spalten in unsere Datenbank bekommen. Tabellen und Spalten Jetzt wollen wir eine Datenbank erstellen mit unserer ersten Tabellen. Eine Möglichkeit wäre jetzt, SQL-Befehle zu benutzen, aber das ist für den Anfang zu umständlich. Aber zum Glück war im XAMPP ein netter PHP-Script names phpMyAdmin enthalten. Man findet den Script unter http://localhost/phpmyadmin/. Mit diesem Script können wir Datenbank erstellen, Tabellen erstellen, bearbeiten, löschen etc. Bei den meisten Webspaceangeboten mit MySQL wurde phpMyAdmin schon installiert. Wenn wir phpMyAdmin jetzt aufrufen, müssen wir nichts mehr einstellen. Wichtig: Es gibt phpMyAdmin in vielen verschiedenen Versionen, die sich Teilweise im Aussehen stark Seite: 54 Was kann man mit PHP machen? unterscheiden. Dies ist aber weiter nicht schlimm, evt. sind bei euch keine Symbole sondern normaler Text und evt. ist dies auch noch auf Englisch, aber dafür reicht einfaches Schulenglisch. Direkt auch der Startseite finden wir ein Formular: Neue Datenbank anlegen In diesem Feld haben wir die Möglichkeit, eine neue Datenbank anzulegen. Bei den meisten Webspace angeboten haben wir diese Möglichkeit nicht, denn dort wurde die Datenbank bereits für uns angelegt. Aber auf dem eigenem PC legen wir erstmal eine neue Datenbank an. Wir tippen in das Feld den Namen der neuen Datenbank ein, z.B. homepage. Das Feld Kollation müssen wir nicht beachten, also lassen wir es unverändert. Anschließend klicken wir auf Anlegen. Haben wir das gemacht, ist im linken Auswahlmenü ein neuer Eintrag mit dem Namen unserer Datenbank. Die restlichen Einträgen sollten wir nicht verändern, da diese teilweise Daten über den Server enthalten. Als nächstes wählen wir Links den Eintrag homepage aus, denn das ist unsere Datenbank. Wenn wir dies gemacht haben, sehen wir erneut ein Formular: Neue Tabelle in Datenbank hompage erstellen Darunter sind 2 Eingabefelder, unter anderem wie die neue Tabelle heißen soll (Name) und wie viele Spalte sie enthalten soll (Felder). Bei Name geben wir jetzt z.B. links an und bei Felder 5 Dann noch auf Ok klicken und schon wurde eine neue Tabelle erstellt. Jetzt wurde wieder ein Formular geladen, wo wir den Spalten noch Namen und Eigenschaften geben müssen. Unter Feld geben wir den Namen der Spalte an. Bei Typ geben wir an, was für ein Feld das ist, z.B. ein Feld das nur Zahlen enthält, oder Text. Bei Länge/Set geben wir an, wieviele Zeichen in das Feld max. gespeichert werden. Das Feld Kollation ist erstmal unwichtig und kann ausgelassen werden. Mit Attribute bestimmen wir die Eigenschaften der Spalte, Standard dient dazu, welcher Wert in die Spalte eingetragen wird, wenn die Spalte nicht ausgefüllt wird. Extra ist wieder eine Eigenschaft. Das Symbol mit dem Schlüssel steht für Primärschlüssel. Dies bedeutet soviel wie, dass der Wert in der Spalte eindeutig ist, und in keiner anderen Spalte stehen darf/kann. Als erstes brauchen wir die Spalte: id. Fast jede Tabelle hat diese Spalte, denn so kann man jede Zeile später identifizieren/ansprechen. Für diese Spalte benutzen wir folgende Werte (von links nach rechts): id, int, 10, unsigned, not null, , auto_increment, primary, , Die Spalte id ist ein Zahlenfeld (int). Diese Zahl darf max. 10 Stellen haben. unsigned bedeutet, dass in dem Feld nur positive Zahlen gespeichert werden. Mit auto_increment legen wir fest, das der Wert des Feldes jedes mal um 1 erhöht wird, wenn ein Seite: 55 Was kann man mit PHP machen? neuer Eintrag hinzukommt. Außerdem bestimmen wir, dass dieses Feld der Primärschlüssel ist. Damit können wir jede Zeile einzeln ansprechen. Die nächsten Felder stehen so aus: url, varchar, 150, not null, urlname, varchar, 150, not null, name, varchar, 150, not null, beschreibung, text, , not null, Erklärung: varchar ist ein Bezeichnungsfeld. Diese Felden dürfen max. 255 Zeichen haben. Bei Length/Set geben wir an, wie viele Zeichen die einzelnen Spalten haben dürfen. Bei der Spalte url z.B. nur 150. text ist ein Textfeld, dies kann mehr als 255 Zeichen behalten, bis zu 65535 Zeichen. Falls man einen noch längeren Text hat, sollte man longtext benutzen. Dieses not null bestimmt, das der Wert nicht NULL sein darf. Dies ist ein spezieller Wert der Informatik, der praktisch ein 'nichts' darstellt, auch als NULL-Byte genannt. Wenn man jetzt z.B. keinen Namen angibt, so bleibt das Feld in der Datenbank leer. Ein leeres Feld ist aber etwas anderes als NULL. Die unterschiedlichen Spaltentypen gibt man an, damit man Platz spart, und damit die Ausgabe schneller ist. Deswegen sollte man für das id Feld z.B. keinen longtext als Type wählen. So sieht es fertig aus (Bild) Danach auf Speichern klicken und schon ist unsere 1. Tabelle fertig. Haben wir die Datenbank im linkem Fenster ausgeählt, sehen wir die Tabelle links. Dürcken wir jetzt darauf, öffnet sich im rechtem Fenster eine Seite, wo wir die verschiedenen Spalten mit deren Eigenschaften sehen können. Falls wir etwas an einer Spalte ändern möchten, klicken wir auf Ändern bzw. auf den Bleistift schon haben wir wieder ein Formular wo wir die Werte anpassen können. , und Falls wir Spalten vergessen haben, können wir unter Felder hinzufügen neue Spalten anlegen. Dort können wir auch bestimmen, wo diese angefügt werden, z.B. An das Ende der Tabelle. Klickt man dort auf OK, bekommen wir wieder ein Formular, wo wir den Spalten Namen und Typen zuweisen müssen. Gut jetzt haben wir einen Tabelle, aber wie kommen dort jetzt Daten hinnein? Dies erklärt euch Tabellen füllen mit phpMyadmin Tabellen füllen So jetzt haben wir schon eine Tabelle mit Spalten. Allerdings können wir damit noch nicht viel Anfang, denn zuerst müssen wir ja diese Tabelle mit Daten füllen. Dafür kann man entweder einen PHP-Script schreiben, oder wir benutzen wieder phpMyAdmin. Seite: 56 Was kann man mit PHP machen? Dazu rufen wir zuerst unsere Tabelle auf, indem wir im linken Fenster auf unser Datenbank homepage klicken. Danach öffnet sich im rechten Fenster eine Seite, wo die Tabellen der Datenbank sind. Dort ist auch unsere Tabelle links. Rechts neben links ist ein Link, Einfügen bzw. . Falls man jetzt erst im linkem Fenster auf die Datenbank homepage geklickt hat, und danach dann wieder im linkem Fenster auf die Tabelle links geklickt hat, so steht der Link für Einfügen oberhalb der Struktur der Tabelle. In dieser Auswahlleiste können wir zwischen den einzelnen Anzeigen hin und her springen, klicken wir wieder auf Struktur, dann wird die Struktur der Tabelle angezeigt. Klicken wir auf Anzeigen, so stehen wir die eingetragenen Werte, sofern welche vorhanden sind. Haben wir jetzt dort drauf geglickt öffnet sich ein Formular mit den Spalten die wir im letzen Kapitel erstellt haben. Das id-Feld sollten wir leer lassen, denn dies ist ja auto_increment, sprich es wird bei jedem neuem Eintrag um 1 erhöht. Dieses Feld lassen wir also komplett leer. Ganz links steht Field (unser Spaltenname), dann Typ, dort sehen wir nochmals welche Eigenschaften die Spalte hat. Bei Function könntet ihr jetzt bestimmte Eigenschaften auswählen, wie der Eintrag gespeichert werden soll, allerdings lassen wir dieses Feld für den Anfang immer leer. Bei Wert schreibt ihr den Wert/Text, der später in der Tabelle stehen soll. Bei mir sieht das nach dem Ausfüllen so aus: Das Formular Feld darunter sieht identisch aus, und wir können es benutzen um einen 2. Wert einzufügen. Allerdings wenn wir die Auswahl: Ignorieren anlassen, werden die Daten nicht gespeichert. Klicken wir jetzt noch auf Ok, wird der Eintrag in die Tabelle gespeichert. So können wir jetzt immer wieder neue Datensätze anlegen. Wurden die Daten wirklich gespeichert? Natürlich können wir auch per phpMyAdmin nachgucken, ob der Eintrag gespeichert wurde. Dazu klicken wir auf unser Datenbank homepage. Im rechtem Fenster sieht man dann eine (HTML)-Tabelle mit den (MySQL)-Tabellen der Datenbank. Dort sieht man dann auch unsere Tabelle: links Klicken wir auf den Link, ist im rechten Fenster (oben) eine Menüleiste. Dort ist auch ein Link Anzeigen. Klicken wir dort drauf, sehen wir die ersten 30 Einträge der Tabelle links. Seite: 57 Was kann man mit PHP machen? Wenn ihr jetzt die Einträge vor euch habt, steht ihr zwei Bilder, einmal Bearbeiten und Löschen Jetzt haben wir schon Daten in der Tabelle, aber wie kann man diese wieder ausgeben? Dafür muss der PHP-Script erstmal eine Verbindung aufbauen. Verbindung aufbauen Im letzen schritt habt ihr ja schon gesehen, wie man eine Tabelle mit zugehöriger Datenbank anlegt. Grundsätzlich können in eine Datenbank so viele Tabellen, wie nötig. Aus diesen Tabellen werden die Werte später wieder abgefragt. Wenn ihr die letzten Schritte befolgt habt, sied ihr jetzt besitzer einer leeren Tabelle mit dem Namen "links" in der Datenbank "homepage". Ihr könnt jetzt über "Einfügen" (oben rechts) schonmal Werte vorraussetzen, was hier wohl praktisch ist, doch kann man natürlich auch innerhalb eines PHP-Scripts Daten schreiben/lesen. Dabei gibt es einige immer wieder vorkommende Sachen: - Zuerst muss die Verbindung aufgebaut werden - Auswählen der Datenbank - Der eigentliche Befehl wird entweder erst geschrieben und in einer Variable gespeichert, die dann als Argument zu mysql_query() fungiert, oder er wird direkt in mysql_query() geschrieben - Nach den eigentlichen Arbeiten kann die Verbindung wieder geschlossen werden. Verbindungsaufbau Für den Verbindungsaufbau braucht ihr: Den Namen eures Severs, euren Benutzernamen und euer Passwort zur Datenbank. Der Befehl hierzu lautet: <?php $verbindung = mysql_connect("servername", "euerBenutzername","euerPasswort"); ?> Dieses Script muss vor euren Arbeiten mit der Datenbank stehen. Macht ja auch wenig Sinn, die Verbindung am Ende aufzubauen ;) Meistens ist der Servername: localhost. Auswählen der Datenquellen Nun habt ihr eine Verbindung zum Server, auf dem die Datenbank liegt, doch unter Umständen haben das hunderte andere Leute auch. Ihr müsst jetzt noch eure Datenbank auswählen. Die Verbindung zur Datenbank wird mit dem Befehl mysql_select_db("Datenbankname"); hergestellt. Damit wir dort schneller Fehler erkennen, kann die Abfrage auch so aussehen: <?php $verbindung = mysql_connect ("Servername", "Username", "Passwort") or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch"); mysql_select_db("Datenbankenname") or die ("Die Datenbank existiert nicht."); ?> Dieses die beendet den Scriptablauf, wenn ein Fehler auftritt und gibt die Fehlermeldung in den Klammern aus. Wenn alles klappt seht ihr bisher keinen Text. Um eine Verbindung auf eurem PC zu machen, müsst ihr als Servername localhost angeben und dann Seite: 58 Was kann man mit PHP machen? den Username und das Passwort angeben, das ihr am Anfang gespeichert hat, bei mir also Username: Andavos und Passwort: andavos Jetzt haben wir eine Verbindung aufgebaut, aber wie können wir jetzt die Daten ausgeben? Einfache Datenabfrage und Ausgabe Nach dem letzten Kapitel habt ihr immerhin schon einige Daten in eurer Tabelle. Doch wie bekommt man sie wieder raus? Zuerst einmal muss man wieder den obligatorischen Schritt mit dem Verbindungsaufbau machen. Einfache Abfrage Eine einfache Abfrage ist gar nicht so kompliziert, hier ist erst mal die allgemeine Form: <?php $abfrage = "SELECT Spaltenname FROM Tabellenname"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { echo "$row->Spaltenname"; } ?> Auf unser Beispiel mit der Linkliste würde bezogen, würde es z.B. so aussehen: <?php $abfrage = "SELECT url FROM links"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { echo "$row->url <br>"; } ?> Zuerst wird die Anfrage gesendet, dies geht wieder per mysql_query(). Danach folgt eine whileSchleife, die ausdrückt: "Führe die Anweisung solange aus, bis in das Array $row keine Werte mehr geschrieben werden. ". Dazu benutzen wir den Befehl mysql_fetch_object() Um nun einzelne Spalten anzusprechen muss man als Anweisung echo "$row->spaltenname"; benutzen, wobei man natürlich die Werte nicht nur ausgeben muss, sondern sie auch z.B. überprüfen lassen kann. Diese Ausgabe funktioniert aber nur innerhalb der while-Schleife, außerhalb nicht. Innerhalb der while-Schleife könnt ihr ganz normale PHP-Befehle benutzen und sogar weitere Tabellen abfragen. Natürlich möchte man nicht nur eine Spalte einer Tabelle ausgeben. Um mehrere auszugeben muss man die Abfrage etwas anpassen: <?php $abfrage = "SELECT id, url, urlname FROM links"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { echo "$row->id, $row->url, $row->urlname <br>"; } ?> Dabei werden alle Spaltennamen mit einem Komma von einander getrennt. Seite: 59 Was kann man mit PHP machen? Möchte man alle Spalten abfragen, kann man auch anstatt die Spaltennamen zu schreiben, ein * benutzen. <?php $abfrage = "SELECT * FROM links"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { echo "$row->name, $row->url, $row->urlname <br>"; } ?> Achtung: Man kann zwar das Sternchen (*) benutzen, allerdings ist die Ausgabe dann etwas langsamer, denn MySQL muss alle Spalten abfragen und zwischenspeichern, obwohl evt. nur 2 oder 3 Spalten benötigt werden. Auf Rechnern mit wenig Arbeitsspeicher kann so das Script schon merklich langsamer werden. Deswegen sollte man die verschiedenen Spaltennamen mit einem Komma voneinander trennen. Auch wenn man alle Spalten benötigt, sollte man die Spalten einzeln aufführen, denn so muss der Server die Reihenfolge nicht immer wieder neu berechnen. Allerdings sollte man darauf nur achten, wenn man viele (8 und mehr) Abfragen pro Seite hat, und dieses Script viele Personen (30 und mehr) auf einmal benutzen, oder wenn man einen langsamen Server hat. Ist dies nicht der Fall, dann kann man ruhig Sternchen benutzen, denn den der zeitliche Unterschied ist kaum messbar. In Beispielen findet man zwar meistens ein Sternchen, denn so muss der Autor nicht darauf achten, dass der Leser die Datenbank richtig abfragt. Es gibt aber noch viele weitere Abfragen. Weitere Abfragen WHERE Bisher haben wir immer alle Datensätze abgefragt, aber zum Glück können wir auch gezielt einzelne Datensätze abfragen. Dabei ändert sich nur der Text (Wert) der Variable $abfrage, alles andere bleibt gleich. Zu erst lernen wir das Attribut WHERE kennen, damit fragen wir Datensätze ab, die einem oder mehreren Kriterien entsprechen. Die Abfrage dafür muss so aussehen: <?php $abfrage = "SELECT * FROM links WHERE id = '1'"; ?> Wie ihr wisst, muss danach wieder das alte Script folgen, also so: <?php $abfrage = "SELECT * FROM links WHERE id = '1'"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { echo "$row->url <br>"; } ?> Seite: 60 Was kann man mit PHP machen? Aber wie schon oben erwähnt, ändert sich nur der Text (Wert) von $abfrage. Mit dieser Abfrage wählen wir alle Datensätze aus, welche die id 1 haben, und nur dieser Datensatz wird dann ausgegeben. Wir können aber auch andere Kriterien setzen, z.B. so: <?php $abfrage = "SELECT * FROM links WHERE id != '1'"; ?> Hiermit geben wir alle Datensätze aus, die als ID nicht den Wert 1 haben. Oder wir fragen die Datensätze ab, in denen die id kleiner als 10 ist <?php $abfrage = "SELECT * FROM links WHERE id < '10'"; ?> Dies geht natürlich auch mit größer (>) aber auch mit allen anderen Operatoren die ihr von den Schleifen/if-Anweisungen her kennt. Wir können auch andere Spalten überprüfen lassen, z.B. alle Datensätze ausgeben, in denen als name Andavos angegeben wurde. Dies sieht dann so aus: <?php $abfrage = "SELECT * FROM links WHERE name LIKE 'Andavos'"; ?> Anstatt das Gleichheitszeichens wurde jetzt LIKE benutzt. Man könnte zwar ein Gleichheitszeichen benutzen, allerdings sollt ihr beide Varianten sehen. Man kann auch NOT LIKE benutzen, dies ergibt den selben Effekt wie !=. Evt. möchte man ja auch mehrere Datensätze abfragen, dafür gibt es das Attribut: IN () <?php $abfrage = "SELECT * FROM links WHERE id IN ('1', '3')"; ?> Dies würde die Datensätze 1 und 3 abfragen. Das gleiche geht auch mit Text. Natürlich kann man die Werte auch durch Variablen ersetzen und den Variablen dann Werte zu weisen, z.B. aus einem Formular. Manchmal möchte man ja nur Datensätze abfragen, in denen der Name mit A anfängt. Für unbekannte Zeichen benutzt man in MySQL das: Prozentzeichen (%). <?php $abfrage = "SELECT * FROM links WHERE name LIKE 'A%'"; ?> Man kann das Prozentzeichen immer benutzen, wenn man die genaue Zeichenfolge nicht kennt, also wenn man alle Namen ausgeben möchte, die ein a haben: Die Abfrage sieht so aus: <?php $abfrage = "SELECT * FROM links WHERE name LIKE '%a%'"; ?> Man kann auch mehrere Kriterien setzen, man benutzt dazu AND, OR und XOR. Sie haben die gleiche Funktion wie bei einer if-Anweisung. Seite: 61 Was kann man mit PHP machen? <?php $abfrage = "SELECT * FROM links WHERE name LIKE 'Nils' AND id < '10'"; ?> Diese Abfrage würde alle Datensätze ausgeben die als name Nils haben und als id einen kleineren Wert als 10. ORDER BY Möchte man die Ausgabe sortieren, z.B. so, dass der neuste Beitrag immer oben steht (dafür kann man auch gut das id-Feld benutzen). Man kann aber auch andere Felder (z.B. das URL-Feld) sortieren lassen, z.B. alphabetisch. Hierfür benötige wir ORDER BY <?php $abfrage = "SELECT * FROM links ORDER BY id"; ?> Diese Abfrage würde die Einträge der id nach aufsteigend (1,2,3,4) ausgeben, wenn wir am Schluss noch ein DESC schreiben, wird die Ausgabe der id nach absteigend (4,3,2,1) ausgegeben. <?php $abfrage = "SELECT * FROM links ORDER BY id DESC"; ?> Manchmal sieht man auch anstatt einem DESC ein ASC, dies hat die gleiche Wirkung, wie die Abfrage von oben (1,2,3,4), aber dies wird von PHP als Standard eingesetzt, wenn es nicht angegeben wurde. Wir können jetzt auch die anderen Felder sortiert ausgeben lassen <?php $abfrage = "SELECT * FROM links ORDER BY name"; ?> Dies würde die Ausgabe nach der Spalte name alphabetisch (a,b,c,d) ausgeben. Die Angabe von DESC würde dies wieder umdrehen (d,c,b,a). Möchten wir für die Sortierung mehrere Kritieren angeben, müssen wir diese durch Komma trennen. <?php $abfrage = "SELECT * FROM links ORDER BY name, id DESC"; ?> Diese Abfrage sortiert die Ausgabe erst nach dem name (a,b,c,d) und dann nach der id allerdings falsch herum (4,3,2,1). LIMIT Möchte man nur eine gewisse Anzahl von Datensätzen ausgeben, setzt man den Befehl LIMIT ein. <?php $abfrage = "SELECT * FROM links LIMIT 3"; ?> Diese Abfrage würde nur 3 Datensätze ausgeben, denn mit LIMIT bestimmen wir, das nur eine gewisse Anzahl von Datensätzen ausgeben wird. <?php $abfrage = "SELECT * FROM links LIMIT 10,5"; ?> Hiermit werden 5 Datensätze ab dem 10. abgefragt. Somit realisiert man z.B. später eine Blätterfunktion. Seite: 62 Was kann man mit PHP machen? Natürlich kann man auch alle Funktionen verbinden: <?php $abfrage = "SELECT * FROM links WHERE name LIKE 'Nils' AND id < '20' ORDER BY url, id DESC LIMIT 10,5"; ?> Dies würde den Datensätze ausgeben, in denen als name Nils steht und die id kleiner ist als 20. Die Abfrage wird dann bei url alphabetisch sortiert (a,b,c) und die id absteigend sortiert (3,2,1). Anschließend werden nur 5 Datensätze vom 10. ab ausgegeben. Die Ausgabe könnte so aussehen: 18 | www.ab.de 11 | www.ab.de 15 | www.ac.de 12 | www.ac.de 19 | www.ad.de Davor entsprachen die Datensätze 1 bis 9 auch den Kriterien, wurden aber durch das LIMIT nicht ausgegeben. Aber Achtung, die Reihenfolge der einzelnen Attribute dürfen nicht willkürlich sein. Zuerst muss dort SELECT * FROM tabelle stehen. Als nächstes kommt WHERE mit den Kriterien. Danach kommt ORDER BY mit den genaueren Bestimmungen zu Ausgabe. Zum Schluss kommt LIMIT. Abfrage auf der ganzen Seite benutzen Möchte man die Abfrage einer Tabelle auf der ganzen Seite benutzen (z.B. fürs Design), könnte man die Seite in die While-Schleife schreiben, das wäre aber sehr umständlich. Es geht auch einfacher. Wenn wir nur 1 Wert als Ausgabe haben, dann kann die while-Schleife auch entfallen. <?php $abfrage = "SELECT * FROM links WHERE id = '1'"; $ergebnis = mysql_query($abfrage); $row = mysql_fetch_object($ergebnis); echo "$row->url"; ?> Damit wir nur 1 Wert erhalten, können wir uns die Eigenschaft des id Feldes zu Nutzen machen, denn es gibt nur ein Feld in der Tabelle, das den Wert 1 enthält. Dies haben wir durch den Primary (Primärschlüssel) erreicht. Man könnte auch LIMIT benutzen. <?php $abfrage = "SELECT * FROM links LIMIT 1"; $ergebnis = mysql_query($abfrage); $row = mysql_fetch_object($ergebnis); echo "$row->url"; ?> Achtung: Sobald mehr als 1 Datensatz gefunden wurde, erhalten wir Fehler bei der Ausgabe. Oft möchte man ja auch, das der PHP Script Daten hinzufügt. Seite: 63 Was kann man mit PHP machen? Daten speichern Befehle ausführen Nun werden die Daten gespeichert, die z.B. von einem Formular, übermittelt wurden. Im ersten Schritt wird der Befehl in einer Variablen gespeichert. Der normale Befehl zum Schreiben von Daten in eine Tabelle lautet: <?php $eintrag = "INSERT INTO Tabellenname (Spaltenname1, Spaltenname2, Spaltenname3) VALUES ('Wert1', 'Wert1', 'Wert3')"; ?> Dabei können beliebig viele Spalten angesprochen werden, ich habe einfach 3 als Beispiel benutzt. Außerdem wurde der Text in der Variable $eintrag gespeichert. Als nächstes kommt ein neuer Befehl ins Spiel: mysql_query();. Er sendet den Befehl an die Datenbank, damit er dort ausgeführt wird. Als Argument (das in den Klammern) hat er den Befehl. Es sieht dann also in etwa so aus: <?php $eintragen = mysql_query($eintrag); ?> Für unser Beispiel mit der Linkliste könnte es so aussehen: <?php $eintrag = "INSERT INTO Tabellenname (url, urlname, name, beschreibung) VALUES ('http://www.php-einfach.de', 'PHP-Einfach.de', 'Andavos', 'Die PHP-Hilfe')"; $eintragen = mysql_query($eintrag); ?> Natürlich könnt ihr auch anstatt fixer Werte Variablen benutzen, also so: <?php $eintrag = "INSERT INTO Tabellenname (url, urlname, name, beschreibung) VALUES ('$url', '$urlname', '$name', '$beschreibung')"; $eintragen = mysql_query($eintrag); ?> Wurde der Eintrag jetzt gespeichert? Das ist eine gute Frage. Wenn alles glatt ging, dann gibt mysql_query true zurück, sonst false. Man könnte also eine if-Anweisung machen: <?php if($eintragen == true) { echo "Eintrag war erfolgreich"; } else { echo "Fehler beim Speichern"; Seite: 64 Was kann man mit PHP machen? } ?> Dies ist bei jeder Funktion, die mysql_query ausführt der Fall, also auch wenn man Daten löscht, neue einträgt, alte verändert etc. Natürlich können wir auch per phpMyAdmin nachsehen, ob der Eintrag gespeichert wurde. Dazu klicken wir auf unsere Datenbank homepage. Im rechtem Fenster sieht man dann eine (HTML)-Tabelle mit den (MySQL)-Tabellen der Datenbank. Dort sieht man dann auch unsere Tabelle: links Rechts daneben steht dann: Browse (Anzeigen). Klicken wir darauf, sehen wir die ersten 30 Einträge der Tabelle links. Falls wir schon die Tabelle ausgewählt haben (im linkem Fenster angeklickt), findet man diesen Link unterhalt der Tabellenstruktur. Jetzt hat der PHP-Script Daten der Tabelle hinzugefügt, aber wie können wir jetzt wieder diese Daten ändern? Daten verändern Manchmal ist es notwendig, bestimmte Zelleninhalte zu ändern, bzw. anzupassen. Dies immer per phpMyAdmin zu machen, wäre zu umständlich. Aber zum Glück kann man sich dafür auch ganz einfach ein PHP-Skript schreiben. <?php $aendern = "UPDATE Tabellenname Set Spaltenname1 = 'Wert2' WHERE Spaltenname2 = 'Wert2'"; $update = mysql_query($aendern); ?> auf unser Beispiel bezogen: <?php $aendern = "UPDATE links Set url='http://www.PHP-Einfach.de' WHERE id = '2'"; $update = mysql_query($aendern); ?> Hierbei kann man für WHERE wieder alle möglichen Vergleiche setzen, so wie ihr es schon bei Weitere Abfragen kennen gelernt habt. Es funktioneren auch die anderen Attribute wie LIMIT und ORDER BY. Allerdings macht ORDER BY nur Sinn, wenn man auch LIMIT benutzt hat. Wenn es denn mal nötig sein sollte, kann man auch direkt eine ganze Spalte auf einen Wert setzen, dazu lässt man einfach den WHERE-Teil weg. Es ist auch möglich, mehrere Spalten auf einmal zu ändern, dazu teil man die Spaltenname='Wert'Paare durch ein Komma. <?php $aendern = "UPDATE links Set Seite: 65 Was kann man mit PHP machen? url = 'http://www.php-einfach.de', urlname = 'PHP-Einfach', beschreibung = 'die PHP Hilfe' WHERE id = '2'"; $update = mysql_query($aendern); Allerdings benutze ich dann mehrere Abfragen, denn so kann man besser kontrollieren, ob etwas nicht funktioniert hat (z.B. durch einen Rechtschreibfehler). Man weiß dann, wo man suchen muss. So mache ich es meistens: <?php $aendern = "UPDATE links Set url = 'http://www.php-einfach.de' WHERE id = '2'"; $update = mysql_query($aendern); $aendern = "UPDATE links Set urlname = 'PHP-Einfach' WHERE id = '2'"; $update = mysql_query($aendern); $aendern = "UPDATE links Set beschreibung = 'die PHP Hilfe' WHERE id = '2'"; $update = mysql_query($aendern); ?> Doch man kann die UPDATE-Funktion auch "missbrauchen". Wenn man eine einzelne Zelle löschen möchte, kann man dessen Zelleninhalt einfach durch '' überschreiben. <?php $aendern = "UPDATE links Set urlname='' WHERE id='2'"; $update = mysql_query($aendern); Evt. ist ja auch nötig, eine ganze Zeile zu löschen. MySQL Einführung - Daten löschen Es soll schonmal vorkommen, dass man bestimmte Daten aus einer Tabelle löschen möchte, sei es aufgrund von Veraltung oder sonstigen Anlässen. Glücklicherweise ist das recht einfach. Auch diesmal ändert sich nur der Befehl, den wir schreiben, Aufbau und Beenden der Verbindung bleiben natürlich wieder gleich. Der Befehl zum Löschen lautet: <?php $loeschen = "DELETE FROM Tabellenname WHERE Spaltenname= 'Wert'"; $loesch = mysql_query($loeschen); ?> Als Spaltenname benutzt man (fast) immer das Feld id und als Wert natürlich eine Zahl (eine id). Denn das Feld id hat einen eindeutigen Wert (Primärschlüssel), und somit löschen wir dann eine ganz bestimmte Zeile/Datensatz aus der Tabelle. Auf unser Beispiel bezogen sähe es so aus: <?php $loeschen = "DELETE FROM links WHERE id = '2'"; $loesch = mysql_query($loeschen); ?> Hierbei kann man für WHERE wieder alle möglichen Vergleiche setzen, so wie ihr es schon bei Weitere Abfragen kennen gelernt habt. Es funktioneren auch die anderen Befehle wie LIMIT und ORDER BY. Allerdings macht ORDER BY nur sinn, wenn man auch LIMIT benutzt hat. Falls man alle Daten löschen möchte, muss das Attribut WHERE entfallen, denn dann werden alle Zeilen gelöscht. Mit diesem Befehl können allerdings nur ganze Zeilen/Datensätze gelöscht werden. Seite: 66 Was kann man mit PHP machen? Hin und wieder möchte man ja wissen, wieviele Zeilen gefunden wurden. Lest dafür das Kapitel über Anzahl der Zeilen. Anzahl der Zeilen herraus finden Manchmal stellt sich die Frage, wieviele Zeilen/Datensätze wurden denn gefunden? Denn dies wäre nützlich bei Suchanfragen oder auch bei einer Blätterfunktion. Zum Glück geht dies ganz einfach. Dazu lernen wir jetzt einen neuen MySQL Befehl kennen, und zwar mysql_num_rows(). Der Script sieht so aus: <?php $abfrage = "SELECT id FROM links"; $ergebnis = mysql_query($abfrage); $menge = mysql_num_rows($ergebnis); echo $menge; ?> Bei der Abfrage können wir wieder die gleichen Attribute wie bei Weitere Abfragen benutzen. Auch können wir mit der Abfrage die Ergebnisse wieder ausgeben, dazu würden wieder das $row = mysql_fetch_object($ergebnis) benutzen. Falls wir die Werte nicht ausgeben möchten, sondern nur die gefundene Zeilenanzahl wissen wollen, sollten wir nur 1 Spalte abfragen, z.B. id, denn dies spart Arbeitskapazität. Allerdings ist diese Variante bei größeren Tabellen extrem langsam und speicherintensiv. Denn wir fragen ja die komplette Tabelle ab, und in $ergebnis wird dann das Ergebnis gespeichert. Wenn die Tabelle jetzt z.B. 1 Millionen Einträge hat, dann wären diese 1 Mio. Datensätze in $ergebnis gespeichert. Dies würde desweiteren ca. 4 MB Speicherplatz benötigen, und für Scripts ist dieser sehr begrentzt. Darum gibt es in MySQL eine weitere Methode, wie man schneller und sparsamer die Anzahl der Zeilen ermittelt. Allerdings können wir danach nicht das $ergebnis per Schleife ausgeben, dafür benötigen wir eine erneute Anfrage an die Datenbank: <?php $abfrage = "SELECT COUNT(id) FROM links"; $ergebnis = mysql_query($abfrage); $menge = mysql_fetch_row($ergebnis); $menge = $menge[0]; echo $menge; ?> Hier benutzen wir die SQL-Funktion: COUNT(id). Der Vorteil an der Funktion ist, dass die Anzahl der Einträge direkt aus der Tabellen-Information ausgelesen wird. Außerdem werden nur ca. 4 Byte Platz benötigt. Diese Variante ist bei einer Tabelle mit 90 000 Einträgen ca. um den Faktor 2000 (200000%) schneller. Bei kleineren Tabellen ist der Unterschied nicht so gravierend. So zum Schluss lernen wir noch, wie wir eine Verbindung beenden Verbindung beenden Nachdem das Script die Arbeit erledigt hat, sollte man die Verbindung zur Datenbank auch wieder schließen. Dafür verwendet ihr den Befehl mysql_close: Seite: 67 Was kann man mit PHP machen? <?php mysql_close($verbindung); ?> Dies macht aber nur Sinn, wenn ihr mit mehreren verschiedenen Datenbanken (nicht Tabellen") in einem Script arbeitet. Wenn man nur mit einer Datenbank arbeitet, reicht es, wenn ihr die Verbindung nicht schließt. Wann sollte ich die Verbindung beenden? Die Verbindung wird zwar am Ende des Scripts automatisch wieder geschlossen, doch kann es ja durchaus einmal vorkommen, dass das Script nicht bis zum Ende durchlaufen wird. Das würde aufgrund der Beschaffenheit von SQL die Systemleistung beeinträchtigen. Deswegen sollte man immer die Verbindung dann beenden, wenn man keine weiteren Abfragen macht, z.B. wenn man nur in den ersten Zeilen des Scripts Abfragen macht. Allerdings lohnt es sich nicht, wenn in der letzen / einer der letzen Zeilen die letze Abfrage ist. Dann kann man ruhig auf die Schließung der Verbindung verzichten. Damit wären auch schon die wichtigsten Funktionen von MySQL geklärt. Die erweiterten Funktionen benutzt man eher, wenn man wenigstens fortgeschrittene Kenntnisse besitzt. Wenn ihr mehr erfahren wollt, schaut euch mal die MySQL-Referenz auf php.net an. Mit den bisherigen Befehlen könnt ihr eigentlich alles programmieren, von einer Shoutbox, über Newsletterscripts bis hin zu Webshops/Foren. Alle Scripts die ihr hier herunterladen könnt, benutzen nicht viel mehr Funktionen als die gezeigten. Man muss nur wissen, wie man die Befehle richtig anwendet, und das lernt man nur durch viel Übung. Zum Anfang könnt ihr ja mal versuchen, folgendes zu programmieren: -Linkliste -Shoutbox -Gästebuch So jetzt kommt es immer wieder mal vor, dass eine Abfrage einfach nicht, funktioniert. Darum ist das nächste Kapitel über Error-Handling MySQL Fehler finden Es kommt immer wieder vor, dass eine Abfrage einfach nicht funktioniert. Das Problem dann zu finden ist gar nicht so leicht, aber nur, wenn man ein paar Tricks nicht kennt. Oft bekommt man solch eine Fehlermeldung: Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /test.php on line 5 Wollen wir uns mal anschauen, wie die Fehlermeldung zustande gekommen ist: <?php //Verbindungsaufbau zur Datenbank $abfrage = "SELECT name, password FROM tabelle"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis) Seite: 68 Was kann man mit PHP machen? { //Mache etwas } ?> Also irgendwie meckert PHP herrum, dass etwas mit mysql_fetch_object nicht in Ordnung ist. Und zwar steht in der Fehlermeldung, dass das Argument (die Variable), keine gültige MySQL-Resource ist. Aber was bedeutet das jetzt? Und zwar gibt mysql_query(); sofern alles funktioniert hat, eine MySQL-Resource zurück, wenn nicht, ein false. Eine MySQL-Resource ist in etwa der Speicherort wo das Ergebnis hinterlegt ist. Also bemängelt mysql_fetch_object(); das $ergebnis keine gültige Resource ist, also muss $ergebnis false sein. Daraus folgern wir, dass irgendetwas nicht mit der Abfrage stimmt. Um das herrauszufinden, gibt es die Funktion: mysql_error();. Diese Funktion gibt den letzten MySQL Fehler aus, wir können den Script ja z.B. so anpassen: <?php //Verbindungsaufbau zur Datenbank $abfrage = "SELECT name, password FROM tabelle"; $ergebnis = mysql_query($abfrage) OR die("Error: $abfrage <br>".mysql_error()); while($row = mysql_fetch_object($ergebnis) { //Mache etwas } ?> Also dieses OR die() bewirkt, dass falls mysql_query() fehlerhaft ist, etwas ausgegeben wird. Und zwar wird zuerst die Abfrage, und danach die Rückgabe von mysql_error() ausgegeben. Das könnte z.B. so aussehen: Error: SELECT name, password FROM tabelle Unknown column 'password' in 'field list' Naja diese Fehlermeldung ist ziehmlich eindeutig, und zwar ist das Feld password nicht vorhanden. Evt. heißt es ja passwort oder pw?. Eine weitere Fehlerquelle ist oft soetwas: <?php //Verbindungsaufbau zur Datenbank $abfrage = "SELECT betreff, text, show FROM news WHERE id = '1'"; $ergebnis = mysql_query($abfrage) OR die("Error: $abfrage <br>".mysql_error()); //.... ?> Dies führt zu einem Fehler, und zwar: Error: SELECT betreff, text, show FROM news WHERE id = '1' You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM news WHERE id = '1'' at line 1 Auch wenn die 3 Spalten wirklich vorhanden sind, führt uns dies nicht weiter. Denn show (oder SHOW) ist ein von MySQL reserviertes Wort/Befehl. Man kann diesen Namen so nicht als Spaltennamen benutzen, genauso wie z.B. delete, update o.ä. hier versagen würde. Entweder benutzt man also nicht reservierte Wörter, oder man muss den Spaltennamen show in backticks setzen: <?php $abfrage = "SELECT betreff, text, `show` FROM news WHERE id = '1'"; //... ?> Seite: 69 Was kann man mit PHP machen? Diese backticks (`) sind keine einfachen Anführungszeichen! Mit diesen Umschließt man z.B. Spaltennamen, Tabellennamen und ähnliches. Die Abfrage könnte dann auch so aussehen: <?php $abfrage = "SELECT `betreff`, `text`, `show` FROM `news` WHERE `id` = '1'"; //... ?> Eine Liste mit reservierten Wörter findet ihr im MySQL-Handbuch. Fehler in INSERT, UPDATE u.ä Mit mysql_query($abfrage) OR die(mysql_error()); lassen sich nicht nur Fehler in SELECT Befehlen finden, sondern man kann mit ihnen auch Fehler in INSERT oder UPDATE Befehlen finden. Wenn also ein Datenwert nicht eingetragen, aktualisiert oder verändert wird, sollte man als erstes immer dieses OR die(...) ergänzen. Denn mysql_error() funktioniert mit jeder SQL Anweisung. Falls Ihr Hilfe braucht, dann besucht bitte unser Forum Ihr könnt auch ohne Anmeldung Fragen stellen. Tutorials: PHP Übersicht Gästebuch Wie man mit PHP und Textdateien ein Gästebuch erstellt, erfährst du hier. Logfiles Mit PHP selbst Logfiles machen, wie das funktioniert, ist hier beschrieben. Sitemap PHP kann auch Automatisch eine Sitemap für deine Homepage erstellen. Loginscript Dies ist ein Einfacher Loginscript, wobei die Benutzernamen in einer Textdatei gespeichert sind. Loginscript Sessions Bei diesem Script werden noch Sessions zum Login verwendet, allerdings werden der Username im Quelltext gespeichert. Loginscript mit Sessions und Dateien Hier werden die beiden vorherigen Loginscripts miteinandern kombiniert. Links anklickbar Dieser Script erkennt Links & E-Mail Adressen automatisch in einem Text und fügt automatisch den entsprechenden HTML-Quellcode hinzu. Counter Ein einfacher Counter mit Reloadsperre per Sessions. Dateiupload Wie lädt man per PHP Datein auf den Webspace hoch? Hier erfährst du es. Formular mailer Seite: 70 Was kann man mit PHP machen? Dieser Formularmailer erkennt automatisch alle Felder in einem Formular und sendet deren Inhalt an eine eingetragende Mail Adresse. Cookies Wiederkehrfunktion mit Cookies. Codeschnipsel Codeschnipsel hinzufügen Atom-Uhrzeit Diese Funktion gibt die genau Atomzeit zurück. Beispiel für Domaincheck (23 Endungen) Dieses Script ermittelt, ob eine Domain bereits registriert ist. Benchmarkklasse (v1.0.0) Erweiterte Laufzeit- und Performancemessung. Besucherzähler (MySQL) mit IP-Sperre Ein Besucherzähler, der mit MySQL arbeitet und für eine einstellbare Zeit Anfragen gleicher IPAdressen nicht erneut zählt. Es werden weder Cookies noch Sessions verwendet. Bild verkleinern (JPEG/PNG/GIF) Allgemeine Funktion zum Verkleinern von Bildern. Bildergalerie Hier will ich euch nun zeigen wie man sich eine kleine Bildergallerie mit Vorschau erstellen kann. Captcha mit dynamischen Fragen Hallo , Chat Ein kleiner Chat per PHP Counter Funktion via PHP Liebe/r Besucher, in diesem Tutorial erkläre ich euch wie ihr euch einen erweiterten Counter via PHP / MySQL ganz einfach programmiert! Datenbankbackup Diese Script erstellen ein Backup von einer Datenbank bzw. Tabellen. Datum nach Zeitzonen Manchmal schreibt man ja auch Programme die eine Zeitangabe ausgeben. Beispiel ist hier ja direkt ein Forum. Design Patterns in PHP5 Hi, dynamische Signatur Seite: 71 Was kann man mit PHP machen? Hallo Community, Eigene Sessionverwaltung PHP-Klasse für eine eigene Sessionverwaltung Ein Gästebuch mit OOP Oft besteht die Frage, wozu man OOP benutzen soll. Ich werde hier jetzt mal eine Antwort darauf geben! Ein PHP Formular mit Feldauswertung Dieses Script überprüft ob alle Felder eines Formulars ausgefüllt wurden und hebt nicht ausgefüllte hervor. Einfacher Countdown Selbsterklärend, mehr gibts bald, hier nur mal das Skript, dürfte selbst erklärend sein. Einfaches Uploadscript Hier ist ein einfaches upload Script mit dem ihr oder Besucher eurer Homepage Dateien auf den Server hochladen könnt, sie werden dann automatisch in die angegebenen Ordner gespeichert. Email bannen und überprüfen (V1.0.3) Ich habe eine einfache Funktion geschrieben, womit ihr Emails aus euren Gästebüchern bannen könnt. Email mit Anhang Diese Funktion sendet eine Email mit einer Datei als Anhang. Erweiterte Blätterfunktion Manchmal ist es nicht ausreichend, wenn die Blätterfunktion alle Unterseiten anzeigt. Erweiterte var_dump() Funktion Diese Funktion liefert den Wert der Funktion var_dump(mixed $var). Die Ausgabe wird aber noch ein wenig verschönert. So werden beispielsweise die unschönen Zeilenumbrüche nach der Typangabe der Variable/des Array-Eintrages entfernt. Fehler-Handling per E-Mail Das hier baut man einfach in seine PHP-Fehlerseite ein. Den Fehlercode (404, 500...) kann man einfach per GET übertragen: File Transfering(FTP!) Umgang mit der FTP Funktionalität von PHP. Fortschrittsbalken mit <div> Hallo, ich habe dieses Skript mal ausgebuddelt, etwas erweitert und wollte es jetzt zur Verfügung stellen. Der Titel und die Kommentare sollten eigentlich alles sagen. Gesammelte Codeschnipsel Da wir oft auch fertige Funktionen in den Themen finden, mach ich dieses Thema mal auf. Hier können wir wichtige Funktionen sammeln, die im Lauf eines Themas entstanden sind. Dafür dient folgende Form: Seite: 72 Was kann man mit PHP machen? Gewichteter Zufall bei diskreten Werten Mit der PHP-Funktion mt_rand() kann eine Zufallszahl innerhalb bestimmter Grenzen erzeugt werden. Jede der Zahlen innerhalb dieser Grenzen tritt jedoch mit gleicher Wahrscheinlichkeit auf. Manchmal wünscht man sich jedoch, dass bestimmte Werte häufiger vorkommen, als andere. Bspw. wenn Banner, Bilder oder berühmte Zitate dem Benutzer zwar zufällig angezeigt werden sollen, bestimmte aber häufiger als andere. Größe einer Datenbank Dieser Script gibt den Speicherbedarf von einer Datenbank aus. Gästebuch mit Admin-Freigabe Gästebücher gibt es duzende in Internet. Professionell, gratis und gut. Doch die meisten haben einen riesigen Copyright-Vermerk, oder so komplizierte Quelltexte, dass es einem als Anfänger unmöglich ist den Code zu ändern bzw. das Design zu personifizieren. Weiter werden bei den meisten Gästebücher die Beiträge gleich veröffentlicht. Viele finden es besser, den Beitrag erst freizugeben. Ich habe mir dieses Problem einmal angeschaut, und mit eine kleine Lösung mit MySQL überlegt. Gästebuch mit BBcode Funktion Du suchst ein Gästebuch mit einer BBcode Funktion? Dann ist genau dies hier das richtige! Also lies weiter! Herkunft des Besuchers (Stadt usw.) Dieses Script liefert die Herkunft des Besuchers. Herkunft einer IP-Adresse ermitteln. (IP to Country) Zu beginn dieses Codeschnipsel wollen wir erstmal klären, wofür man diese Funktion gebrauchen kann. Beispiel dafür wären Spam-Filter, internationale Online-Shops, Besucherstatistiken oder z.B. Blockierung von Inhalten für bestimmte Herkuntsländer. Include-Sperre Falls ihr wollt, dass eine eurer Dateien entweder nur includet werden, oder nicht von allen Scripten includet werden darf, helfen euch folgende Schnipsel: IP sperre Lästige Besucher per IP sperren. IP-Prüffunktion (IPv4) IP überprüfen (IPv4) jpg Bilder beim Upload verkleinern Dieses Script verkleinert jpg Bilder beim Upload komplette SQL DB nach einem Ausdruck durchsuchen Diese Funktion durchsucht eine beliebige SQL Datenbank komplett nach einem Suchwort. Komprimierte Ausgabe Diese Funktion sendet die HTML-Ausgabe komprimiert an den User. Laufzeit Hiermit kann man die Laufzeit eines Scripts ermitteln. Seite: 73 Was kann man mit PHP machen? Live - Counter Ein Counter welcher euch die Anzahl der Besucher ausgibt, welche gerade eure Homepage besuchen. Login Skript Hey Leute, md5, sha1, Crypt Generator Ich habe das Script ein bissl umgeschrieben! Das einzige was ich nicht hinbekomme ist das der IHA wert umgewandelt wird! ansonsten klappt alles ;) Der Generator sieht genau fast so gleich aus wie der von PHP-Einfach.de! Für dieses Tutorial brauchst du noch nicht mal PHP kenntnisse, um dieses Tutorial zu verstehen! Also sprich ein Tutorial für Dumme! Mehrfachauswahl auswerten Jeder kennt sie die Select boxen mit mehrfach Auswahl, doch wie Wertet man sie aus? Mehrsprachig mittels PHP Einige haben Probleme Webseiten Mehrspraching via PHP zu machen und lösen meist ihre Probleme mit HTML! Doch hier eine Problemlösung die ich gefunden habe das man mittels PHP die eigene Webseite Mehrspraching zu gestalten! PHP kenntnisse sollten vorhanden sein! Mysql-klasse (PHP5) Im Anhang ist sie noch mal als .zip-datei. Newsletter via MySQL Du möchtest ein Newsletter an deine Freunde schicken? Willst aber nur etwas einfaches und nichts ausführliches haben? Dann habe ich genau das richtige für dich. Nopaste Moin Moin, Personalausweis Überprüfung Mit dieser Funktion kann man überprüfen, ob ein Personalausweis gültig ist, und die enthalten Daten extrahieren. Prüfen ob Variable leer ist Oft hat man das Problem das man überprüfen möchte ob eine Variable leer ist. Zwar stellt PHP einem die Funktion empty() zur Verfügung, allerdings hat diese eine Menge nachteile. Z.B. wenn man einen String hat der nur aus Freizeichen und Tabulatoren (Einrückungen) besteht, wird diese Funktion angeben das die Variable einen Wert hat. Oft ist genau das nicht erwünscht. Die nachfolgende Funktion sollte garantiert funktionieren auch wenn euer String nur aus Leerzeichen besteht. referer counter hallo, Regestrierung Klasse hallo, das ist meine erste "Klasse" Reguläre Ausdrücke(RegEx) Tutorial Dieses Tutorial erklärt euch den Umgang mit preg_match Seite: 74 Was kann man mit PHP machen? Rundmail (Beispiel) Hallo, Sicherheitscode Dieser Script stellt ein Bild mit einem Sicherheitscode dar. Speicherplatz ausgeben Ermittelt den freien Speicherplatz. Subdomain Weiterleitung Einfacher redirect fuer eine Subdomain, um doppelten Suchmaschineninhalt zu vermeiden. Suchfunktion für Mitgliedersuche Hier eine kleine Suchfunktion für Userlisten oder ähnlichem. Diese Funktion ist recht simpel aufgebaut und jederzeit ohne Probleme erweiterbar. Taschenrechner Klasse Hallo. Thumbnails Ein Thumbnail ist die verkleinerte Version eines Bildes. Upload Image Hallo! Valides PHP Gästebuch OHNE MySQL Wie man mit PHP und Textdateien ein Valides Gästebuch erstellt, erfährst du hier. Verwendung von UTF-8 Da hier im Forum bereits öfters die Frage nach UTF-8 kommt, werde ich versuchen euch einige Grundlagen, was den Umgang mit UTF-8 angeht, bei zu bringen. Übersetzung Diese Funktion dient zur Übersetzung mittels Babelfish von einzelnen Texten. Youtubevideo Eintragfunktion Trägt Videos von Youtube in die eigene Datenbank ein Zeitdifferenz So berechnet man die vergangene Zeit zwischen zwei Timestamps. Zufälliges Bild Auf der Startseite möchte man oft ein zufälliges Bild anzeigen. Zufälliges Passwort Diese Funktion erstellt ein zufälliges Passwort beliebiger Länge. [Code] {PHP&Javascript} Einfaches Fotoalbum Ein kleines, aber feines Fotoalbum. Seite: 75 Was kann man mit PHP machen? Farbcode Um in HTML Farben zu definieren, benutzt man i.d.R. einen Farbcode. Der Farbcode beginnt mit einer Raute (#). Danach kommen 6 Zahlen und/oder Buchstaben. Klicken Sie hier einfach auf eine Farbe, und schon erscheint der Farbcode im Eingabefenster. Farbcode: #7000C0 Farbe wählen: Geben Sie hier eine Farbe ein und drücken Sie dann auf "Farbe erkennen". #7000C0 Farbe Erkennen Passwortsicherheit Wie lange dauert es, bis man ein Passwort mit einer bestimmten länge knacken kann? Hier kannst du es ausrechnen lassen. Allerdings sind die Zeitangaben nur für die Länge des Passwortes bestimmt, wenn du dort z.B. 8 Stellen eingibst, wird es nur für ein Passwort von 8 Stellen berechnet. Allerdings wissen Angreifer meistens nicht, wie lang das Passwort ist. Daraum fangen die bei Passwörter mit einer Stelle und nicht gleich mit der achten Stelle. Darum muss man die Zeit dazu rechen, bei der das Programm bei der 8. Stelle ist. Leider PHP probleme mit extrem großen Zahlen (ab 300 Stellen) zu rechnen, wenn manchmal minimale Zeit-Ergebnise bei Riesen Zahlen erscheinen, wundert euch nicht. Mögliche Zeichenanzahl*: 62 Passwortlänge: 6 Passworteingaben pro Sekunde **: 25000000 Berechnen * Wie viele verschiedene Zeichen für den Angriff genutzt werden ** Neue PC's schaffen zwischen 10 Mio. und 25 Mio. Passworteingaben pro Sekunde, spezielle CrackComputer schaffen mehr als 100 Mrd. Passwörter pro Sekunde (Preis ca: 25 000 Euro). Seite: 76 Was kann man mit PHP machen? Seite: 77