PHP-Hilfe
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
art
befehl
beispiel
bild
datei
datenbank
erzeugen
formular
funktion
kneipe
rest
sekunde
server
string
tag
text
verbindung
zeichen
zeile
-
Hi Leute ich hab f?r euch mal das wichtigste aus PHP rausgesucht und euch mitgebracht ihr findet es im n?chsten Beitrag...
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
1) PHP tag/befehl">Befehle in HTML einbauen
Dazu gibt es 4 M?glichkeiten:
1. <? ... ?>
2. <?php ... ?>
3. <script language="php"> ... </script>
4. <% ... %>
"..." steht f?r beliebige PHP-Befehle.
2) Unser erster PHP-Befehl!
Der echo-Befehl gibt Texte (sogenannte Strings) aus:
<?
echo "Hallo";
?>
Merke: Alle PHP-Befehle werden mit ";" abgeschlossen.
Es gibt eine Reihe von Sonderzeichen. Wichtigstes Sonderzeichen: " ": Neue Zeile.
C- oder Perl-Kennern sind diese Zeichen nat?rlich vertraut.
echo "Hallo
";
echo "Hallo
";
Man beachte dabei den Unterschied zu
echo "Hallo<BR>";
echo "Hallo<BR>";
Im ersten Fall wird lediglich im vom Webserver ausgelieferten HTML-Text ein Zeilumbruch durchgef?hrt. Im zweiten Fall enth?lt der HTML-Text den HTML-Befehl zum Zeilenumbruch.
3) Variablen
Um sinnvolle Anwendungen erstellen zu k?nnen, ben?tigen wir Variablen.
Merke: Alle Variablennamen beginnen mit $.
$text = "Ich bin ein String !";
echo $text;
echo $text,$text,$text;
$l = "langer";
$k = "kurzer";
echo "Ich bin ein $l$l$l$l$l$l Text!";
echo "Ich bin ein $k Text!";
$i = 10;
$j = 5;
echo $i,"+"$j,"=",$i+$j;
Der Typ der Variablen (ganze Zahl, Gleitpunktzahl, String) wird je nach Verwendung von PHP automatisch bestimmt. Der Benutzer braucht sich darum nur in Spezialf?llen k?mmern.
4) Vordefinierte Variablen
Da PHP speziell zur Erzeugung von dynamischen Webseiten geschaffen wurde, ist es ein Kinderspiel, Eingaben, die aus HTML-Formularen stammen, zu bearbeiten.
Ein Beispiel.
Die Formulardatei enthalte:
<FORM ACTION="tuwas.html" METHOD=POST>
<INPUT NAME="beliebigername">
<INPUT TYPE="submit">
</FORM>
Der HTML-Formular-Kenner sieht sofort: Beim Klicken auf den Submit-Button wird also die Datei tuwas.html aufgerufen. Diese Datei k?nnte dann so aussehen:
<?
echo "Sie haben $beliebigername eingegeben. ";
?>
Kurz gesagt: der Text, der in das Formularfeld beliebigername eingegeben wurde, ist dann in der PHP-Variablen $beliebigername enthalten.
Achtung: Anf?nger sollten immer METHOD=POST beim Formular angeben!
5) Einfache Rechenoperationen
Folgende Rechenoperationen stehen in PHP zur Verf?gung:
? "+": Addition, $i+$j,
? "-": Subtraktion, $i-$j
? "*": Multiplikation, $i*$j
? "/": Division, $i/$j
? "%": Reste-Bildung, $i%$j: z.B. 23%17 ergibt 6, da 23 geteilt durch 17 gleich 1 Rest 6 ist.
? ".": Verkn?pft Strings:
? $l = "langer";
? $k = "kurzer";
? echo $l.$k;
ergibt langerkurzer
Dazu kommen noch ein paar Abk?rzungen, um dem Programmierer das Leben zu erleichtern:
? $i++ erh?ht $i um 1.
? ++$i erh?ht $i ebenfalls um 1.
? $i-- erniedrigt $i um 1.
? --$i erniedrigt $i ebenfalls um 1.
Der Unterschied zwischen $i++ und ++$i ist:
$i=0;
echo $i++;
gibt 0 aus, anschlie?end wird $i auf den Wert 1 erh?ht.
$i=0;
echo ++$i;
erh?ht zuerst $i auf 1 und gibt den Wert 1 aus.
6) Erste Schleifen
Gleich ein Beispiel:
$t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>
";
$i = 0;
while ($i<10) {
echo $t;
$i++;
}
Hier wird 10-mal der Text in der Variablen $t ausgegeben. Zu Beginn wird $i auf 0 gesetzt. $i wird in jedem Schleifendurchlauf um 1 erh?ht, bis $i den Wert 10 erreicht. Dann ist die Bedingung ($i<10) nicht mehr wahr und die Schleife bricht ab.
7) Weitere Befehle zur Ablaufkontrolle
In 6) haben wir die erste M?glichkeit kennengelernt, eine Programm-Schleife zu erzeugen. Statt
$t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>
";
$i = 0;
while ($i<10) {
echo $t;
$i++;
}
kann man auch schreiben:
$t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>
";
$i = 0;
do {
echo $t;
$i++;
} while ($i<10);
Was ist der Unterschied?
Man bemerkt den Unterschied, wenn z.B. statt $i=0; zu Beginn $i=10; gesetzt wird. Im ersten Fall ist die Bedingung ($i<10) nicht wahr und die Befehle innerhalb der geschweiften Klammern werden nicht ausgef?hrt.
Im zweiten Fall werden zuerst die Befehle innerhalb der geschweiften Klammern ausgef?hrt, danach wird getestet, ob ($i<10). Dies ist nicht der Fall, also wird abgebrochen. D.h. aber, die Schleife wird mindestens einmal durchlaufen.
Eine weitere M?glichkeit, eine Schleife zu programmieren, ist der for-Befehl. Gleich ein Beispiel:
$t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>
";
for ($i=0;$i<10;$i++) {
echo $t;
}
Der for-Befehl besteht aus drei Ausdr?cken.
for (ausdruck1;ausdruck2;ausdruck3) { ... }
? Mit ausdruck1 wird die Schleife initialisiert, d.h. normalerweise wird die Variable, die die Schleifendurchl?ufe z?hlt, auf den Anfangswert gesetzt.
? ausdruck2 gibt die Abbruchbedingung an.
? In ausdruck3 wird die Variable, die die Schleifendurchl?ufe z?hlt, erh?ht bzw. erniedrigt.
Der for-Befehl hat den Vorteil, da? alle zur Kontrolle der Schleife n?tigen Befehle in einer Zeile stehen. Ein weiteres Beispiel, diesmal wird heruntergez?hlt.
$t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>
";
for ($i=10;$i>0;$i--) {
echo $t;
}
8) Fallunterscheidungen
Zur Fallunterscheidung gibt es den if-Befehl:
if ($i<0) {
echo "$i ist kleiner als Null
";
}
oder auch
if ($i<0) {
echo "$i ist kleiner als Null
";
} else {
echo "$i ist nicht kleiner als Null
";
}
Man kann diesen Befehl auch schachteln:
if ($i<0) {
echo "$i ist kleiner als Null
";
} else if ($i>0) {
echo "$i ist groesser als Null
";
} else {
echo "$i ist Null
";
}
Hat man mehrere Tests der gleichen Variable, so kann man mit dem switch-Befehl evtl. Arbeit einsparen:
switch ($name) {
case "Heinrich":
echo "Ich bin der kluge Heinrich";
break;
case "Hans":
echo "Ich bin der dumme Hans";
break;
case "Agathe":
echo "Ich bin die Agathe und kl?ger als Heinrich und Hans";
break;
default:
echo "Wir sind der Rest";
}
Falls die Variable $name den Wert "Hans" hat, wird als n?chster Befehl
echo "Ich bin der dumme Hans";
ausgef?hrt. Normalerweise w?rden dann alle nachfolgenden Befehle ausgef?hrt werden, u.a.
echo "Ich bin die Agathe und kl?ger als Heinrich und Hans";
Dies ist meist nicht erw?nscht, man springt deshalb mit break aus dem switch-Befehl heraus.
9) Weitere Vergleichsm?glichkeiten
Bisher konnten wir testen, ob $i<10 oder $i>10 gilt. Es gibt aber noch mehr M?glichkeiten:
? $i==10: Ist $i gleich 10?
? $i!=10: Ist $i ungleich 10?
? $i>=10: Ist $i gr??er oder gleich 10?
? $i<=10: Ist $i kleiner oder gleich 10?
Man kann auch kombinieren:
? ($i==10) && ($j>0): Ist $i gleich 10 und $j gr??er als 0?
? ($i==10) || ($j==0): Ist $i gleich 10 oder $j gleich 0?
10) Nochmals vordefinierte Variablen
In 4) haben wir gelernt, da? in einer PHP-Datei, die aus einem Formular gestartet wird, die Namen der Formular-Elemente als Variablen zur Verf?gung stehen. Dies kann man n?tzen, um Formular und Befehle, die das Formular behandeln, in eine einzige Datei zu schreiben:
Angenommen unsere Datei form.html enth?lt folgendes Formular:
<FORM ACTION="form.html" METHOD=POST>
<INPUT NAME="beliebigername">
<INPUT TYPE="submit">
</FORM>
Dann ruft sich beim Klicken auf submit die Datei selbst auf. Allerdings ist dann die Variable beliebigername beliebiger Name gesetzt. Dies k?nnen wir folgenderma?en ausn?tzen:
<?
if (isset($beliebigername)) {
echo "Sie haben $beliebigername eingegeben
";
}
?>
<P>
<FORM ACTION="form.html" METHOD=POST>
<INPUT NAME="beliebigername">
<INPUT TYPE="submit">
</FORM>
Wird die Datei zum ersten Mal aufgerufen, d.h. ohne da? man auf den submit-Button klickt, so ist die Variable $beliebigername nicht gesetzt, der Ausdruck isset($beliebigername) ist also nicht wahr. F?llt man das Formular dann aus und klickt auf submit, so ist die Variable gesetzt, isset($beliebigername) ist wahr, und es wird "Sie haben $beliebigername eingegeben "; ausgegeben.
Will man danach abbrechen, so sollte der Befehl
exit;
verwendet werden.
11) Dateien hinzuladen
Der Befehl
include("dateiname");
liest den Inhalt der Datei dateiname so, als ob er an dieser Stelle stehen w?rde. Damit kann z.B. einheitliches Layout bei einer gr??eren Anzahl von Dateien erreicht werden.
12) Dateien lesen und schreiben
Wir wollen nun von Dateien, die auf dem Server liegen, lesen, bzw. in diese Dateien etwas hineinschreiben. Dies ist n?tzlich, um z.B. Z?hler oder G?steb?cher zu erzeugen.
Wichtig:
Aus Sicherheitsgr?nden ist der Webserver einem Benutzer auf dem Server-Computer zugeordnet, der sehr wenig Rechte hat. U.a. darf er nicht einfach in eine Datei in ihrem Verzeichnis schreiben. Genausowenig darf er eine Datei in Ihrem Verzeichnis erzeugen.
Um z.B. eine Datei xxx zu erzeugen, in die der Webserver schreiben darf, m?ssen Sie folgenderma?en vorgehen:
? Verwenden Sie z.B. das Programm ws_ftp unter Windows 95 oder Windows NT, so kann man im ftp-Programm die Datei anw?hlen, auf die rechte Maustaste klicken und dann den Befehl chmod verwenden.
? Steht der Befehl chmod nicht per Mausklick zur Verf?gung, so kann man die Rechte dennoch mit einem ftp-Befehl eingeben: Der Befehl lautet
? site chmod xyz DATEINAME
x, y, z sind 3 Ziffern, die die Rechte f?r den Datei-Eigent?mer, die Benutzergruppe des Datei-Eigent?mers (das sind ?blicherweise alle anderen Benutzer auf dem Computer) und den Rest der Welt bestimmen. Dabei gilt:
o Jede der 3 Ziffern liegt zwischen 0 und 7.
o 0 bedeutet: keinerlei Zugriffsrecht.
o 1 bedeutet: Ausf?hrrecht (wichtig bei Programmen und Verzeichnissen).
o 2 bedeutet: Schreibrecht (was gleichzeitig auch "L?schrecht" ist).
o 4 bedeutet: Leserecht.
Der Clou an der Sache ist, da? die Zahlen addiert werden k?nnen: Will man einer Datei Lese- und Schreibrecht zuordnen, so ist die Zahl 2+4=6 anzugeben.
Beispiele:
site chmod 777 DATEINAME
gibt jedem das Recht, alles mit der Datei DATEINAME anzustellen.
site chmod 754 DATEINAME
bedeutet, der Eigent?mer darf alles mit der Datei anstellen, die Gruppe des Eigent?mers darf die Datei ausf?hren und lesen, der Rest darf die Datei nur lesen.
Achtung: Der Webserver l?uft normalerweise unter "Rest", ist also weder der Eigent?mer noch geh?rt er zur Gruppe des Eigent?mers.
OK. Gehen wir davon aus, da? wir nun eine Datei mit dem Namen xxx haben, deren Inhalt wir lesen wollen.
1. Zuerst m?ssen wir die Datei ?ffnen, dabei mu? angegeben werden, was mit der Datei geschehen soll: Wollen wir lesen, schreiben, anh?ngen,...
Der Befehl lautet
2. $datei = fopen("xxx","r");
Das hei?t, wir ?ffnen die Datei mit dem Namen xxx und wollen darin lesen ("r"). Die technischen Details lassen wir dabei von der Variablen $datei regeln, d.h. wenn wir sp?ter aus der Datei lesen wollen, so ben?tzen wir die Variable $datei.
3. Nun lesen wir zeilenweise den Inhalt der Datei, und zwar so lange, bis wir ans Ende der Datei gelangt sind:
4. while (!feof($datei)) {
5. $zeile = fgets($datei,1000);
6. echo $zeile;
7. }
feof($datei) ist wahr, sobald wir an das Datei-Ende gelangt sind. $zeile = fgets($datei,1000); liest maximal die n?chsten 1000 Zeichen, h?rt aber auf, sobald eine neue Zeile beginnt, oder das Ende der Datei erreicht ist.
echo $zeile; gibt einfach das Gelesene wieder aus.
8. Schlie?lich mu? die Datei noch geschlossen werden:
9. fclose($datei);
Folgende M?glichkeiten gibt es, eine Datei zu ?ffnen:
? "r": nur lesen, begonnen wird am Dateianfang.
? "r+": lesen und schreiben, begonnen wird am Dateianfang.
? "w": nur schreiben. Existiert die Datei bereits, wird der bisherige Inhalt gel?scht. Existiert sie nicht, wird versucht. sie zu erzeugen.
? "w+": lesen und schreiben. Ansonsten wie "w".
? "a": nur schreiben. Begonnen wird am Ende der Datei (a wie append, anh?ngen). Existiert sie nicht, wird versucht. sie zu erzeugen.
? "a+": lesen und schreiben. Ansonsten wie "a". Achtung: Es wird beim Lesen nat?rlich auch am Ende der Datei begonnen (dort steht nat?rlich nichts mehr...)
Mit dem Befehl
fwrite($datei, "Ein Text");
kann der String Ein Text in die Datei geschrieben werden.
13) Bildbearbeitung
Achtung:
In PHP gibt es den Befehl ImageGif(). Dieser Befehl erzeugt ein GIF-Bild. Dazu werden Funktionen aus der frei erh?ltlichen Bibliothek gd verwendet. Die Firma Unisys h?lt die Rechte an einem Patent zur LZW-Komprimierung von Daten, die unter anderem auch bei der Erzeugung von GIF-Bilder eingesetzt wird. Da Unisys die unrechtm??ige Verwendung von LZW-Komprimierung momentan mit rechtlichen Schritten unterbindet, ist es in der neuen Version der Bibliothek gd nicht mehr m?glich, GIF-Bilder zu erzeugen. Somit ist auch der PHP-Befehl ImageGif() wirkungslos.
Mit PHP k?nnen wir nicht nur HTML-Text erzeugen, wir k?nnen sogar Bilder dynamisch erzeugen. Zum Beispiel k?nnen wir eine Datei "bild.php3" erstellen, die ein Bild zur?ckliefern wird. In diese Datei schreiben wir keine HTML-Befehle, sondern ausschlie?lich PHP-Befehle. Ausschlie?lich hei?t auch, da? vor dem ersten <?-Befehl nichts, auch kein Leerzeichen oder Leerzeile, stehen darf. Ansonsten ist der Browser sofort der ?berzeugung, da? ein Textdokument ankommt.
Ein Beispiel:
<?
Header( "Content-type: image/gif");
$im = imagecreate(200,100);
$blue = ImageColorAllocate($im, 0x2c,0x6D,0xAF);
ImageFilledRectangle($im,0,0,200,100,$blue);
ImageGif($im);
ImageDestroy($im);
?>
Ruft man diese Datei auf, so erscheint ein blaues Rechteck. Nat?rlich kann diese Datei auch mit
<IMG SRC="bild.php3">
in eine HTML-Seite eingebunden werden.
Was bewirken obige Befehle? Der Befehl
Header( "Content-type: image/gif");
teilt dem Browser mit, da? nun ein GIF-Bild kommen wird. (Um Fehlermeldungen in unserer PHP-Datei angezeigt zu bekommen, k?nnen wir diesen Befehl auch zeitweise auskommentieren, indem wir davor ein #-Zeichen setzen.)
Der Befehl
$im = imagecreate(200,100);
erzeugt ein Bild, das 200 Pixel breit und 100 Pixel hoch ist.
Jede Farbe, die wir verwenden wollen, mu? zuerst erzeugt werden. Dies geschieht mit dem Befehl
$blue = ImageColorAllocate($im, 0x2c,0x6D,0xAF);
Dabei bezeichnet $im das Bild, f?r das wir die Farbe erzeugen wollen, w?hrend die restlichen drei Parameter die hexadezimalen RGB-Werte sind. (Man beachte die Schreibweise: 0x2c ergibt den dezimalen Rot-Anteil 36.)
Mit
ImageFilledRectangle($im,0,0,200,100,$blue);
zeichnen wir ein ausgef?lltes Rechteck, das bei 0,0 (links oben) beginnt und 200 Pixel nach rechts und 100 Pixel nach unten endet, und in der eben erzeugten Farbe $blue gef?llt ist.
Der Befehl
ImageGif($im);
erzeugen zuerst ein GIF-Bild aus der internen Darstellung und sendet es an den Betrachter, w?hrend
ImageDestroy($im);
den internen Speicherplatz f?r das Bild freigibt.
Es gibt nun eine Reihe von weiteren M?glichkeiten. Zum Beispiel kann noch ein Text in das Bild geschrieben werden:
$white = ImageColorAllocate($im, 255,255,255);
imagestring($im, 5, 20, 20, "Hallo", $white);
Der erste Befehl erzeugt wei?e Farbe: Man sieht, die RGB-Werte k?nnen auch als Dezimal-Werte angegeben werden. Der zweite Befehl schreibt den Text "Hallo" in Schriftgr??e 5 beginnend bei Position 20,20 (20 Pixel nach rechts, 20 Pixel nach unten). Die beiden Befehle sollten direkt vor ImageGif($im); stehen.
Wer Lust auf mehr Bildbearbeitung bekommen hat, findet weitere Information im PHP-Handbuch. ?ber Rechtecke hinaus k?nnen die ?blichen Elemente wie Kreisb?gen, Linien, Polygone, Punkte verwendet werden.
14) Zugriff auf Datenbanken
Eines der Haupteinsatzgebiete von PHP ist der Online-Zugriff auf Datenbanken.
Was ist eine Datenbank?
Vereinfacht gesagt: Eine Datenbank enth?lt Datens?tze, die mit einer speziellen Sprache bearbeitet werden k?nnen. Zum Beispiel k?nnen bestimmte Datens?tze ausgelesen werden, neue Datens?tze hinzugef?gt werden, Datens?tze k?nnen aktualisiert oder gel?scht werden. All diese Vorg?nge nennt man Abfragen.
Weit verbreitet sind sogenannte SQl-Datenbanken, d.h. Datenbanken, die mit der Sprache SQL (Abk?rzung f?r Structured Query Language) bearbeitet werden k?nnen. PHP kann mit Datenbanken verschiedener Hersteller umgehen, besonders beliebt ist die Datenbank MySQL.
Vorteile von MySQL:
relativ schnell und kostenlos.
Um eine SQL-Abfrage mit PHP auszuf?hren, mu? zuerst die Datenbank ge?ffnet werden (vergleichbar mit dem Zugriff auf eine Datei), dann wird die SQL-Befehlszeile an die Datenbank geschickt, die Antwort der Datenbank wird aufgenommen und schlie?lich wird die Datenbank-Verbindung wieder geschlossen.
Zuerst m?ssen wir uns etwas Hintergrundwissen ?ber die SQL-Befehlszeile verschaffen:
15) SQL-Grundlagen
SQL-Datenbanken bestehen aus 1 oder mehreren sogenannten Tabellen. Jeder Datensatz der Datenbank ist genau eine Zeile in einer Tabelle.
Beispiel: Ein Kneipenf?hrer f?r Bayreuth.
Die Tabelle kneipen:
ID Name Art Note Kommentar
1 Herzogkeller Biergarten 1 Sehr sch?ner Baumbestand
2 Glenk Biergarten 1 Gute Bratw?rste
3 ... ... ... ...
Man kann nun auf eine dieser Tabellen zugreifen, aber auch Tabellen verk?pfen. Wir wollen uns hier der Einfachkeit halber auf eine einzige Tabelle beschr?nken.
Es gibt im wesentlichen vier Abfragem?glichkeiten:
Auslesen: SELECT Einf?gen: INSERT ?berschreiben: UPDATE L?schen: DELETE
Will man z.B. alle kneipennamen, die sich in der Datenbank befinden, auslesen, so gibt man den SQL-Befehl
SELECT Name FROM kneipen;
ein.
Will man Name und Art der Kneipe ausgeben, so lautet der Befehl
SELECT Name,Art FROM kneipen;
Soll schlie?lich die ganze Zeile ausgelesen werden, so gen?gt der Befehl
SELECT * FROM kneipen;
Die auszulesenden Datens?tze k?nnen nun noch weiter spezifiziert werden:
SELECT * FROM kneipen WHERE NOTE=1;
gibt nur die Datens?tze aus, die in der Spalte Note eine 1 enthalten.
Sortiert k?nnen die Datens?tze mit
SELECT * FROM kneipen WHERE NOTE=1 ORDER BY Name;
werden.
Neue Datens?tze werden folgenderma?en hinzugef?gt:
INSERT kneipen (Name,Art,Note,Kommentar) VALUES ('Glenk','Biergarten','1','Gute Bratw?rste');
Vorhandene Datens?tze k?nnen mit
UPDATE kneipen SET Note='2',Kommentar='Die Bratw?rste lassen nach' WHERE ID=2;
?berschrieben werden.
Das soll als erster Einblick gen?gen. SQL ist eine sehr m?chtige Abfragesprache, insbesondere f?r Kombinationsabfragen aus mehreren Tabellen gleichzeitig (inner joins, outer joins,...) existiert eine eigene, beinahe mathematische Theorie.
16) SQL-Befehle mit PHP
Die obigen SQL-Befehle verwenden wir nun mit PHP. Wir wollen als Beispiel alle Datens?tz aus der Tabelle kneipen in der Datenbank www2 ausgeben.
Zuerst mu? eine Verbindung von PHP zum Datenbank-Server (d.h. dem Computer, auf dem die Datenbank liegt) hergestellt werden:
$verbindung = @mysql_connect("localhost","Nutzername","Passwort");
localhost bedeutet, wir verbinden uns zum gleichen Computer, auf dem sich auch der Webserver befindet.
Dies funktioniert, da in unserem Fall Webserver und Datenbank auf einem Rechner liegen. Wie man vielleicht erahnt, kann also auch auf eine Datenbank auf einem beliebigen anderen Rechner im Internet zugegriffen werden - vorausgesetzt man besitzt die entsprechende Berechtigung.
Nutzername ist ein g?ltiger Benutzername f?r diese Datenbank (dies wurde vom Datenbank-Verwalter so festgelegt).
Passwort bedeutet, dieser Benutzer ben?tigt ein Passwort.
Wir k?nnen ?berpr?fen, ob die Verbindung klappt:
if (!$verbindung) { echo "Keine Verbindung m?glich! "; exit; }
Steht die Verbindung, so k?nnen wir die Abfrage starten.
Zur besseren ?bersicht schreiben wir die SQL-Abfrage in eine Variable:
$abfrage = "SELECT Name,Art from kneipen";
Diese Abfrage wird an den Datenbank-Server geschickt. Das Resultat fangen wir in der Variablen $erg auf.
$erg = mysql_db_query("www2",$abfrage,$verbindung);
Die erste Variable gibt die Datenbank an, die wir abfragen wollen. Die zweite Variable enth?lt den SQL-Befehl, die dritte Variable enth?lt die Verbindung, die mit mysql_connect geschaffen wurde. Nun kommt eine etwas kniffliger Arbeit:
Wir m?ssen aus $erg die zur?ckgelieferten Datens?tze auslesen. H?tten wir einen INSERT, UPDATE oder DELETE Befehl verschickt, br?uchten wir nur testen, ob $erg wahr oder falsch ist, d.h. ob die Abfrage geklappt hat oder nicht.
Da wir aber den SELECT-Befehl an die Datenbank geschickt haben, wollen wir die von der Datenbank zur?ckgelieferten Datens?tze auslesen.
Wir haben pro Datensatz die beiden Spalten Name und Art angefordert. Diese lesen wir nun zeilenweise aus:
list($Name,$Art) = mysql_fetch_row($erg);
Die Variable $erg enth?lt nach der Abfrage Zeilen mit jeweils 2 Spalten (Name und Art). mysql_fetch_row($erg) gibt genau eine Zeile aus.
Zu Beginn steht eine Art Zeiger auf der ersten Zeile, f?hrt man den Befehl mysql_fetch_row($erg) aus, rutscht der Zeiger zur n?chsten Zeile usw. Will man alle Zeilen ausgeben, empfiehlt sich eine Schleife:
while (list($Name,$Art) = mysql_fetch_row($erg))
{
echo "$Name ist ein(e) $Art<BR> ";
}
Die Ergebnisse verarbeiten wir also zeilenweise zu HTML-Text.
Am Ende empfiehlt es sich, die Verbindung zur Datenbank zu kappen:
mysql_close($verbindung);
Dies waren nur die einfachsten MySQL-Befehle in PHP, die aber schon f?r sehr viele Anwendungen ausreichen. Weiterf?hrende Befehle kann man im Handbuch nachlesen.
17) Ein weiterer SQL-Befehl
Nachdem wir nun ein wenig Erfahrung mit SQL-Befehlen sammeln konnten, trauen wir uns auch an den DELETE-Befehl heran. Wichtig ist f?r diesen Befehl, da? ganz genau (und vorsichtig) spezifiziert wird, welcher Datensatz oder welche Datens?tze aus der Datenbank gel?scht werden sollen. In unserem Beispiel ist es am besten, wenn man ?ber das Feld ID den zu l?schenden Datensatz angibt, denn dieses Feld enth?lt f?r jeden Datensatz eine eindeutige Nummer. Wollen wir den Datensatz mit ID=120 l?schen, so geben wir als Abfrage an:
$abfrage = "DELETE FROM kneipen WHERE ID=120";
Achtung: Vergi?t man den WHERE-Teil, werden alle Datens?tze der Tabelle gel?scht! Als Ersteller einer dynamischen Webseite mit PHP und einer Datenbank sollte man also immer genau dar?ber nachdenken, was den Betrachtern erlaubt werden soll und was nicht.
18) Funktionen
Ein wichtiger Bestandteil einer jeden Programmiersprache ist die F?higkeit, mehrere Befehle zu einem einzigen Befehl zusammenzufassen, d.h. neue Funktionen zu definieren. PHP hat diese F?higkeit selbstverst?ndlich auch.
Ein Beispiel:
Wir wollen f?r eine Anzahl von Tagen berechnen, wieviele Sekunden diese Tage zusammen haben:
function tag ($anzahl) {
$sekunden = 3600 * 24 * $anzahl;
return $sekunden;
}
$x = tag(7);
echo "7 Tage bestehen aus $x Sekunden !";
$anzahl nennt man auch Argument der Funktion. Eine Funktion kann mehrere Argumente, oder auch kein Argument besitzen:
function zinseszins ($prozent,$laufzeit) {
$kapital = 10000.0;
$x = 1.0 + ($proz/100.0);
$y = $kapital * exp( $laufzeit*log($prozent) );
return $y;
}
$proz = 6;
$zeit = 10;
$x = $zinseszins($proz,$laufzeit);
echo "Das Kapital betr?gt $x Euro";
Mehr zu den verwendeten mathematischen Funktionen kann man wiederum im Handbuch nachlesen.
Problematisch ist im obigen (zugegebenerma?en etwas konstruierten) Beispiel, da? die Variable $kapital in der Funktion selbst festgelegt wird. Nat?rlich wird man auch diesen Wert normalerweise als Argument der Funktion ?bergeben, also etwa:
function zinseszins ($prozent,$laufzeit,$kapital) { ...
Wir wollen aber jetzt den Fall betrachten, da? diese Variable bereits gesetzt ist, und wir sie nicht als Argument ?bergeben wollen. Dann m?ssen wir explizit angeben, da? die Variable "von au?en" stammt. Dies geschieht durch den Befehl global:
$kapital = 10000.0;
function zinseszins ($prozent,$laufzeit) {
global $kapital;
$x = 1.0 + ($proz/100.0);
$y = $kapital * exp( $laufzeit*log($prozent) );
return $y;
}
$proz = 6;
$zeit = 10;
$x = $zinseszins($proz,$laufzeit);
echo "Das Kapital betr?gt $x Euro";
19) String-Funktionen
Ein weiteres wichtiges Bet?tigungsfeld von PHP ist die Bearbeitung von Zeichenketten. Es gibt eine ganze Reihe von Befehlen um Zeichenketten zu manipulieren, wir stellen hier nur die wichtigsten vor, der Rest kann im Handbuch nachgeschlagen werden. trim entfernt Leerzeichen, Tabulatorzeichen etc. (sogannten "whitespace") vor dem ersten und nach dem letzten "echten" Zeichen in der Zeichenkette.
$x = " Ich bin eine Zeichenkette! ";
$y = trim($x);
Die Befehle ltrim() und chop() entfernen whitespace vor, bzw. nach der Zeichenkette
F?r die verspielten PHP-Programmierer: strtoupper() und strtolower() wandeln alle Zeichen eines Strings in Gro?buchstaben, bzw. Kleinbuchstaben um.
Achtung: Probleme kann es bei Umlauten geben.
Der Befehl ucfirst() wandelt das erste Zeichen eines Strings in Gro?buchstaben um (wenn m?glich).
Der Befehl ucwords() hingegen wandelt in jedem Wort eines Strings das erste Zeichen in Gro?buchstaben um (wenn m?glich).
Der folgende Befehl ist besonders wichtig, wenn man vorhandenen Text f?r das WWW aufbereiten will:
$x = nl2br($y);
ersetzt alle Zeilenumbruch-Zeichen ("") des Strings $y in die Zeichenfolge <BR> .
Daneben gibt es noch einige wichtige Funktionen, um Strings zu vergleichen, zu ersetzen und mit HTML-Sonderzeichen umzugehen.
20) Cookies
Als Cookies werden kurze Informationen bezeichnet, die der WWW-Server beim Client (Betrachter) hinterlassen kann. Sie sind vor allem beim elektronischen Einkaufen im WWW von Bedeutung, genauer gesagt sind sie immer dann von Bedeutung, wenn der Server weitergehende Information vom Betrachter haben mu?, als nur die Internet-Adresse, die eine Seite anfordert.
Cookies bestehen aus folgender Information:
? Name: Name
? Value: Wert
? expires: Verfallsdatum
? domain: Adressraum der Server, die das Cookie wieder lesen d?rfen.
? path: Nur ?ber Seiten, die in diesem Verzeichnis, oder Unterverzeichnissen davon liegen, darf das Cookie angefordert werden.
? secure: Wenn gesetzt, darf das Cookie nur ?ber verschl?sselte Informationskan?le ?bertragen werden.
Beispiel: Wir wollen feststellen, ob ein Betrachter eine Seite schon einmal aufgerufen hat. Dazu setzen wir beim ersten Aufruf der Seite ein Cookie. Dies mu? allerdings vor dem HTML-Head geschehen, d.h. am Anfang der Datei. (Unbedingt auch die Ausgabe von Leerzeilen, -Zeichen vor diesem PHP-Teil vermeiden!)
<?
$t = time()+3600*24*10;
SetCookie("mycookie","Schon besucht",$t,"/test",".de");
?>
<HTML>
...
Dieser Befehl setzt ein Cookie mit dem Namen mycookie auf den Wert "schon besucht" mit einem Verfallsdatum von 10 Tagen. Lesen darf dieses Cookie jeder Server mit der Endung .de, allerdings nur aus Dateien, die in einem Verzeichnis /test, oder Unterverzeichnissen davon liegen.
Das Verfallsdatum des Cookie mu? in Sekunden seit dem 1. Januar 1970 angegeben werden. Die Funktion time() gibt die Sekunden seit dem 1. Januar 1970 der momentanen Zeit an. Weitere Datums- und Zeitfunktionen sind im Handbuch nachzulesen. Da die Berechnung der Sekunden nicht immer ganz ?bersichtlich ist, empfiehlt sich die Verwendung einer Funktion:
function tage ($anzahl) {
$sekunden = time()+ 3600 * 24 * $anzahl;
return $sekunden;
}
SetCookie("mycookie","Schon besucht",tage(10),"/test",".de");
Cookies lesen ist mit PHP wieder sehr einfach realisiert: Der Inhalt des Cookies ist in einer Variablen mit dem Namen des Cookies enthalten:
echo "$mycookie";
gibt also den Wert des Cookies aus, in unserem Fall den Text "Schon besucht".
Ein Server kann mit PHP ein Cookie wieder entfernen, indem lediglich der Befehl setcookie mit dem Namen des Cookies als Argument angegeben wird:
SetCookie("mycookie");
21) Variable Variable
Dies ist nun schon fortgeschrittene PHP-Programmierung: In manchen F?llen will man Schleifen ?ber eine Menge von Variablen laufen lassen. Zum Beispiel wenn man viele Eingabefelder in einem Formular hat:
<INPUT NAME="feld0" >
<INPUT NAME="feld1" >
<INPUT NAME="feld2" >
...
<INPUT NAME="feld99" >
Nun ist es sehr m?hsam, alle Felder einzeln zu behandeln. Will man z.B. einfach den Inhalt aller Eingabefelder ausgeben, so kann man statt der folgenden 100 Befehle
echo "feld0: $feld0 <BR>
";
echo "feld1: $feld1 <BR>
";
...
echo "feld99: $feld99 <BR>
";
auch folgenderma?en vorgehen. Wir basteln uns den jeweiligen Variablennamen zusammen:
for ($i=0;$i<100;$i++) {
$v = "feld".$i;
echo "$v: ${$v} <BR>
";
}
Mit einem $v erhalten wir den Variablennamen, mit ${$v} greifen wir auf den Inhalt der Variablen mit dem Namen $v zu.
22) Arrays aus Formularen
Abschlie?end noch ein letzter Trick: Wenn wir in einem Formular aus einer Menge von HTML-Checkboxen mit PHP ermitteln wollen, welche Checkboxen angeklickt wurden, dann scheitert die bisherige Vorgehensweise:
<INPUT TYPE=CHECKBOX NAME="x" VALUE=1 > Option 1
<INPUT TYPE=CHECKBOX NAME="x" VALUE=2 > Option 2
...
Schickt man dieses Formular ab, so hat die PHP-Variable $x nur den Wert der ersten angeklickten Checkbox. Der Trick ist, in HTML die Checkbox zum Beispiel so zu benennen:
<INPUT TYPE=CHECKBOX NAME="x[]" VALUE=1 > Option 1
<INPUT TYPE=CHECKBOX NAME="x[]" VALUE=2 > Option 2
...
Dadurch wird in PHP ein Array mit dem Namen $x existieren. Die Werte k?nnen dann so ausgelesen werden:
for ($i=0;$i<sizeof($x);$i++) {
echo "$x[$i] ";
}
Soweit zur Einf?hrung in PHP. Nat?rlich spiegelt dies nur einen geringen Teil der M?glichkeiten von PHP wider. Aber das bisher Gelernte sollte es dem Leser erm?glichen, sich selbst im PHP-Handbuch neue Befehle anzueignen.
H?ufige Fehlermeldungen von PHP / MySQL
Warning: Wrong parameter count for func_dyn() in /home/users/file.php3 on line 92
Man ?bergibt einer Funktion eine falsche Anzahl an Parametern und dadurch kommt der Fehler zustande.
Warning: fopen("datei.htm","r") - No such file or directory
Bei dem Fehler sollte man pr?fen ob die angegebene Datei oder Verzeichnis existiert. Wenn es sich um ein Verzeichnis handelt, mu? es evtl. erstellt werden.
Parse error: parse error in /home/users/file.php3 on line 92
Der Fehler deutet auf einen Fehler in der Synthax von PHP. Einfach in die angegebene Zeile schauen und pr?fen ob am Ende ein ; steht oder eventuell ein ' oder " vergessen wurde.
Access denied for user: 'user@mydomain.de' to database 'mydata'
Diese Meldung weist auf einen falschen oder fehlenden Nutzernamen oder Passwort hin.
Fatal error: Call to unsupported or undefined function mysql_connect() in /home/users/file.php3 on line 92
Diese Fehlermeldung weist auf eine fehlende oder falsche Komponente hin. In dem Beispiel wurde die Bibliothek f?r den Zugriff auf MySQL nicht gefunden. Zu pr?fen in der Datei php.ini
Warning: 0 is not a MySQL result index in /home/users/file.php3 on line 92
Der SQL-Query ist hier fehlerhaft und sollte gepr?ft werden. Um den Fehler genauer zu analysieren in die n?chste Zeile ein
print (mysql_error());
geschrieben wird. Damit wird der SQL-Fehler genau angezeigt.
Unknown database 'mydata'
Die Datenbank "mydata" existiert nicht und mu? vor dem Aufruf erstellt werden
-
Das musst du bei den Tutorials reinschreiben unter "PHP&MySQL". Hier bringt dir das nichts.
Hier=> http://www.lima-city.de/tutorials.php ganz unten auf "Tutorial schreiben" und dann einfach das einf?gen was du hier gemacht hast.
Nach ein paar Tagen, sobald ein Knight dein Tutorial gepr?ft hast bekommst du Gulden. Das kann aber ein bisschen geh'n, kommt ganz drauf an wieviel die Knights zutun haben. -
@ freshprince:
machs die texte nicht sooooooooooooo lang, dann werden sie mehr gelesen... -
Ja wie gesagt sowas geh?rt nicht ins Forum sondern zu den Tutorials. Allerdings muss ich dich entt?uschen der erste Befehl in PHP ist nicht das ausgeben des Textes Hallo es MUSS hello world hei?en
-
@ freshprince:
machs die texte nicht sooooooooooooo lang, dann werden sie mehr gelesen...
lol, ich schreib lieber l?ngere Post's als dass ich als Spammer hin gestellt werde das was du gemacht hast ist Spam, und das was ich hier poste auch fast... also lassen wa's. -
*smile*
klasse-6d find ich ja suess? steckt da ne wirklich ne ganze Schulklasse hinter? F?nd ich super klasse von eurem Lehrer!
Gru?
Firi -
*smile*
klasse-6d find ich ja suess? steckt da ne wirklich ne ganze Schulklasse hinter? F?nd ich super klasse von eurem Lehrer!
Gru?
Firi
lol von was tr?umst du nachst?
ein klase das geht nciht, und w?re schwachsinn!
desweiteren gibts auch en 10c hier(ich) wo dann die siete der klasse drauf is, also n?chsten mla kopf nicht nur halten sondern auch benutzen!
MfG
Kraeusi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage