Weitere PHP-Beispiele/Browsergames und Bemerkungen:

Alle Dateien eines Verzeichnisses ausgeben:
Es werden alle Dateien im Verzeichnis 'dateien' angezeigt.

Das Skript:

<html>
<body bgcolor="#C0C0C0"><font size ="6" color="#ff0000">

<?php
$handle=opendir ('dateien/');
echo "Dateien im Verzeichnis 'dateien':<br>";

while ( $file = readdir ( $handle ) ) {
if( $file != "." && $file != "..") {
echo "$file <br>";}
}

closedir($handle);
?>

</font>
</body></html>


Alle Bilder im JPG- und GIF-Format eines Verzeichnisses als Link ausgeben:

Das Skript:
 
<html>
<body bgcolor="#C0C0C0"><font size ="6" color="#ff0000">

<?php
$handle=opendir ('.');
echo "<b>Bilder</b>:<br>";

while ( $file = readdir ( $handle ) ) {
if(substr($file, -4) == '.jpg' || substr($file, -4) == '.gif') {

echo "<a href='$file'>$file</a> <br>";
}
} closedir( $handle );
?>

</font>
</body></html>

 


Seite mit Passwort schützen:
Auf der Seite pwdadmin1.php wird nach einem Passwort gefragt.
Dieses wird beim Abschicken des Formulars an die Datei pwdadmin2.php geschickt.
Wenn dieses mit dem in der Variablen $p gespeicherten Passwort (hier "passwort")
überein stimmt, wird der Inhalt der Seite gezeigt. Andernfalls erscheint "keine Berechtigung !!!".

Das Skript von pwdadmin1.php:

<html>
<body bgcolor="#C0C0C0"><font size ="6" color="#ff0000">

<h1> <font color='#ff0000'> Anmeldung für Admins</font></h1>

<form action="pwdadmin2.php" method='post'>


<font Color="#0000ff" size="4" >
<hr><br>
Geben Sie hier bitte Ihr Kennwort ein:
<input type='password' name='pwd' size='20' maxlength ='30' ><br><br>


</select>

<br><br><input type='submit' name='submit' value='Zum Adminbereich'><br><br>


</font>
</body></html>

Das Skript von pwdadmin2.php:

<html>
<body bgcolor="#C0C0C0"><font size ="6" color="#ff0000">

<h1><font color ='#ff0000'>Menü Adminbereich</font></h1>
<hr size="3" color="#ff0000">
<?php

$pwd=$_POST["pwd"];
$p="passwort";
if($pwd != $p):
echo "keine Berechtigung !!!"; ?>
<?php else: ?>

Hier bist du im gesicherten Bereich.
Das Passwort war richtig.


<?php endif; ?>

</body></html>



Grafiken in einem Datenbankfeld speichern:
Wie schon im Buch bemerkt, kann man in einem Datenbankfeld des Typs BLOB auch
Dateien, z.B. Bilder, speichern. Für dieses Beispiel muss zunächst eine Datenbank (Name
datenbank)
und eine Tabelle (Name bilder) angelegt werden. Unten sind die nötigen MySQL
Befehle zu sehen:


CREATE DATABASE `datenbank` ;

CREATE TABLE `datenbank`.`bilder` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`filename` VARCHAR( 200 ) NULL ,
`mimetype` VARCHAR( 5 ) NULL ,
`filedata` BLOB NULL);
 
Das Skript upload.php dient zum Hochladen der Datei und speichern in dem Datenbankfeld mit
dem Namen filedata. Zusätzlich wird der Typ der Datei (z.B. jpg) und der Name in den Feldern
mimetype und filename gespeichert. Mit dem Skript bild.php kann man sich die Datei ansehen.
Dazu muss im Browser z.B. bild.php?id=1 eingegeben werden, wenn man das erste Bild in der
Tabelle bilder sehen möchte. Mit dem Befehl header wird dem Browser mitgeteilt, um welche
Art von Datei es sich handelt. Man kann das Bild sogar auf einer HTML-Seite wie eine gewöhnliche
Grafik einbinden (mit dem HTML-Befehl <img src = "bild.php?id=1">).

Das Skript von upload.php:

<html><body>
<h2>Bild hochladen</h2><hr>

<form action="upload.php" method="post"
enctype="multipart/form-data">
<font face="Arial">Bild auswählen: </font>
<input type ="file" name = "uploadfile" > <br>
<input type ="submit" name ="go" value="Hochladen" >
</form>

<?php
error_reporting(0);
$size=$_FILES["uploadfile"]["size"];
$data=$_FILES["uploadfile"]["tmp_name"];
$name=$_FILES["uploadfile"]["name"];
$type=$_FILES["uploadfile"]["type"];

if (!$data) die(" ");

echo "Die Bildgröße des hochgeladenen Bilds: $size <br>";

$tempfile=fopen($data,"rb");
$filedata=fread($tempfile,$size);
$filedata=addslashes($filedata);

$sql="insert into bilder (filename, mimetype, filedata)
values ('$name', '$type','$filedata')";

$link=mysql_connect("localhost","root","");
mysql_select_db("datenbank");

mysql_query($sql);

echo "Das Bild wurde mit der gespeichert!";
?>
</body>
</html>

Falls man die folgende Zeile (z.B. am Ende des Programms) einfügen würde
copy($data,"bilder/$name");
dann würde das Bild zusätzlich im Verzeichnis bilder (muss natürlich vorhanden sein unter htdocs)
gespeichert werden. Dies ist aber nicht zu empfehlen, sonst könnte jeder alle möglichen Dateien
auf den Server laden und es gäbe auch bei gleichen Dateinamen Probleme.

Das Skript von bild.php:

<?php
$id = $_GET["id"];
$sql="select filename, mimetype, filedata from bilder
where id='$id'";
$link=mysql_connect("localhost","root","");
mysql_select_db("datenbank");

$result=mysql_query($sql);
$mimetype=mysql_result($result,0,"mimetype");
$filedata=mysql_result($result,0,"filedata");
header("Content-Type: $mimetype");
echo($filedata);
?>


Photoalbum mit Adminbereich:
PHP-Programme zum Verwalten und Anzeigen von Photoalben findet man hier. In der Datei sql.txt
befinden sich die SQL-Anweisungen zum Anlegen der notwendigen Tabellen. In der Datei db.php
kann das Admin-Passwort geändert werden. Hier stehen auch die Daten für die Datenbankverbindung.

 

IP-Adresse anzeigen:
Mit dem folgenden Skript wird die IP-Adresse der Person angezeigt, die diese Seite öffnet.

Das Skript von ip.php:

<html>
<body>

<?php
echo "Deine IP-Adresse lautet: ".$_SERVER['REMOTE_ADDR'];
?>


</body>
</html>

 


Zähler erstellen:
Mit dem folgenden Skript wird ein so genannter Zähler erstellt. Hierin dürfen keine HTML-Kommandos
erscheinen, da dieses Skript eine Grafik erzeugt. Wird dieses beispielsweise unter dem Namen zaehler.php
gespeichert, so kann dieser Zähler auf einer Seite wie eine Grafik (mit <img src="zaehler.php">) eingebunden
werden.

Das Skript speichert täglich alle ip-Adressen von Personen in der Tabelle ip, die die Datei zaehler.php aufrufen.
Damit soll sichergestellt werden, dass keine Person an einem Tag zweimal gezählt wird (was allerdings passieren
könnte, wenn sich die ip-Adresse einer Person an einem Tag ändert und diese dann noch mal zaehler.php aufruft).

Das Skript von zaehler.php:
(Hier können die SQL-Kommandos zum Erstellen der benötigten Datenbank und Tabellen geladen werden. Dabei
wird auch ein erster Datensatz in der Tabelle 'zahl' angelegt mit dem Wert 0 im gleichnamigen Feld 'zahl'.)

<?php
mysql_connect("localhost","root","");
mysql_select_db("zaehler");

$ip = $_SERVER['REMOTE_ADDR'];;

// alte ips löschen
$abf5="delete from ip where datum < CURDATE()";
mysql_query($abf5);

// Zählerstand lesen
$abf="select * from zahl";
$a=mysql_query($abf);
$a1 = mysql_fetch_array($a);
$a1x=$a1[0];

// prüfen, ob ip schon eingetragen wurde
$abf2="select count(*) from ip where ip='$ip'";
$b=mysql_query($abf2);
$b1 = mysql_fetch_array($b);
if ($b1[0]==0):
$a1x=$a1x+1;
$abf3="update zahl set zahl = $a1x";
mysql_query($abf3);
$abf4="insert into ip (datum,ip) values (CURDATE() ,'$ip')";
mysql_query($abf4);
endif;

//erzeuge Bild
$im = ImageCreate (90, 20);
//Weiss und Schwarz zuordnen
$weiss = ImageColorAllocate ($im, 255,0, 0);
$schwarz = ImageColorAllocate ($im, 0, 0, 0);
//Weissen Hintergrund zeichnen
ImageFilledRectangle($im,0,0,80 ,20,$weiss );
//Zählerstand anzeigen
imagestring ( $im, 6, 35,2, "$a1x", 1);
// Schwarzes Rechteck um das Bild
ImageRectangle($im,0,0,90,20,$schwarz);
//Bild ausgeben
Header ("Content-type: image/png");
ImagePNG ($im);
ImageDestroy ($im);

?>



Daten per PHP-Session übergeben:
Alternativ zum Übertragen von Daten per POST oder GET kann man auch PHP-Sessions verwenden.
Im folgenden Beispiel werden Daten per PHP-Session (von seite1.php zu seite2.php und umgekehrt) übertragen,
sobald auf den Link geklickt wird:

Das Skript von seite1.php:

<?php session_start(); ?>

<!-- keine Kommentare, Leerzeilen ... vor obigen PHP-Block mit session_start. -->

So oft wurde die Seite gewechselt:
<?php if (!isset($_SESSION["n"])) $_SESSION["n"]=0;$_SESSION["n"]++;
echo $_SESSION["n"];
$_SESSION['x']="<br>Hier noch ein zweiter Wert, der übergeben wird!<br>";  ?>

<br><a href="seite2.php?<?php SID ?>">hier geht’s zur nächsten Seite</a>

Das Skript von seite2.php:

<?php session_start(); ?>

<!-- keine Kommentare, Leerzeilen ... vor obigen PHP-Block mit session_start. -->

So oft wurde die Seite gewechselt:
<?php if (!isset($_SESSION["n"])) $_SESSION["n"]=0;
$_SESSION["n"]++;
echo $_SESSION["n"];
echo "<br>".$_SESSION['x']; ?>

<br><a href="seite1.php?<?php SID ?>"> hier geht’s zur nächsten Seite</a>

Bermerkungen:
Löschen von der Werte von Session-Variablen:

unset($_SESSEION["var"]) oder mit $_SESSION=array() alle löschen.

Statt Link Formular mit Submit-Button verwenden:
Ersetzt man in seite1.php die letzte Zeile (mit <a href…) durch
<form method="post" action = "seite2.php">
<input type="hidden" name ="PHPSESSID" value ="<?
php =session_id() ?>">
<input type = "submit" value="nächst Seite" >

dann werden die Daten beim Klicken auf den submit-Button per Session übergeben.
In dem versteckten Feld (‚hidden’) wird die Session-ID übergeben.


Änderung des root-Passworts in MySQL:
Das root-Passwort in MySQL steht standardmäßig auf '', d.h. man benötigt
keine Passwort für den Hauptbenutzer root, nachdem XAMPP neu installiert wurde.

Diese kann man aber ändern, indem man im SQL-Fenster von PHPMyAdmin
update mysql.user set Password=PASSWORD('neuespwd') where user='root';
eingibt, dann wäre 'neuespwd' das neue Passwort für den Hauptbenutzer root.

Beim Verbinden über PHP zu MySQL müsste dann
mysql_connect("localhost","root","neuespwd");
verwendet werden, statt wie in den Beispielen:
mysql_connect("localhost","root","");

Das Passwort kann man auch per Klicken im PHPMyAdmin ändern. Hier muss man
als Datenbanken mysql und als Tabelle user wählen. Hier kann man dann auf Anzeigen
klicken, dann die Zeile(n) mit user=root bearbeiten (auf Stift klicken). Hier muss man dann aber
als Funktion PASSWORD wählen, wenn man den Wert im Feld Passwort ändern möchte.
Danach auf OK klicken, zum Speichern.

Nach einer Änderung des Passworts am besten neu starten.

Aber Achtung: Man muss für den PHPMyAdmin auch das neue root-Passwort einstellen.
Hierzu muss man im Verzeichnis phpmyadmin die Datei config.inc.php editieren und die Zeile
$cfg['Servers'][$i]['password'] = '';
in
$cfg['Servers'][$i]['password'] = 'neuespwd';
ändern.

Analog können auch neue Benutzer angelegt werden.
 


Münzspiel mit Einsatz:
Es folgt noch ein Münzspiel, bei dem man am Anfang 100 Punkte hat und von diesen 100 Punkte
einen Teil (oder alle) setzen kann. Setzt man richtig, erhält man den Einsatz dazu, ansonsten ist
er weg und die Punktzahl reduziert. Im gleichen Verzeichnis wie dieses Skript muss sich ein Bild
von dem "Wappen" der Münze mit dem Namen "1.jpg" und eines von der "Zahl" der Münze
("2.jpg") befinden.

Das Skript von muenze.php:

<HTML>
<HEAD><TITLE> Münzwurf </TITLE>
</HEAD>

<body bgcolor="#C0C0C0" background=""><font size ="4" color="#ff0000">
<b>Münzspiel:</b><br>
Es wird ein mal eine Münze geworfen.<br><br>
<form action="<?php echo $PHP_SELFE; ?>" method="post">

Auf was setzt du?<br>
<select name="tipp" size="2">
<option value="1">Wappen</option>
<option value="2">Zahl</option>
</select>

<br><br> Einsatz eingeben:<input type ="text" name= "einsatz" value="0" ><br>
Der Einsatz kann maximal die vorhandenen Punkte betragen!<br><br>
<input type ="submit" name= "spiel" value="werfen" ><br>
<hr>

<?php
$spiel=$_POST["spiel"];

// Falls das erste mal auf submit geklickt wurde:
if ($spiel=="werfen"):
$tipp=$_POST["tipp"];
$einsatz=$_POST["einsatz"];
$punkte = $_POST["punkte"];

// Falls keine Zahl als Einsatz eingegeben wurde, wird dieser auf Null gesetzt!
if (!is_numeric($einsatz)){$einsatz=0;}

srand(microtime()*1000000);
// Zufallszahl ziehen (1 oder 2)
$x=rand(1,2);

?>
Ergebnis:<br>
<table border='1'><tr>
<?php
echo "<td><img src='".$x.".jpg'></td>";
?>
</tr></table>

<?php
if ($x==$tipp){
echo "<br>Gewonnen!"; $g=1;}
else {
echo "<br>Verloren!"; $g=0;}

// man kann maximal die vorhandenen Punkte setzten.
// Einsatz auch darf nicht negativ sein!
if ($einsatz>$punkte) {$einsatz=$punkte;}
if ($einsatz<0) {$einsatz=0;}

if ($g==1) {$punkte = $punkte + $einsatz;}
else { $punkte=$punkte-$einsatz;}

echo "<br>Dein Einsatz betrug $einsatz.";
echo "<br>Punktestand:<input type='hidden' name='punkte' value ='$punkte' ><br>";
echo "Du hast nun $punkte Punkte!";

else:
// Nach dem Laden der Seite hat man 100 Punkte!
echo "<br>Punktestand:<input type='hidden' name='punkte' value ='100' ><br>";
echo "Du hast nun 100 Punkte!";
endif;
?>
</form>
</font>
</body></HTML>



Zwei Würfelspiele:
Hier sind noch zwei Würfelspiele zu finden.

 


Black Jack:
Hier ist das Skript für eine Black Jack Variante. Die Bilder der Karten könnt ihr hier herunter laden.

Das Skript von blackjack.php:

<HTML>
<HEAD><TITLE> Special Black Jack </TITLE>
</HEAD>

<body bgcolor="#C0C0C0" background=""><font size ="4">
<h1>Black Jack</h1>

<form action="index.php" method="post">

Einsatz eingeben:<input type ="text" name= "einsatz" value="0" ><br>
Der Einsatz kann maximal die vorhandenen Punkte betragen!<br><br>
<input type ="submit" name= "spiel" value="spielen" ><br>
<hr>
</font><font size ="4" color="#0000ff">
<?php
$spiel=$_POST["spiel"];
// Werte der Karten:
$werte=array(7,8,9,10,10,10,10,11,7,8,9,10,10,10,10,11,7,8,9,10,10,10,10,11,7,8,9,10,10,10,10,11);

// Falls das erste mal auf submit geklickt wurde:
if ($spiel=="spielen"):
$tipp=$_POST["tipp"];
$einsatz=$_POST["einsatz"];
$punkte = $_POST["punkte"];

// Falls keine Zahl als Einsatz eingegeben wurde, wird dieser auf Null gesetzt!
if (!is_numeric($einsatz)){$einsatz=0;}


// n = Anzahl Züge,m=Anzahl Karten
$n=4;
$m=32;
$a=array();
srand(microtime()*1000000);
$x=rand(1,$m);
$a[1]=$x;

for($i=2;$i<=$n;$i++){
while(in_array($x,$a))
{srand(microtime()*1000000);
$x=rand(1,$m);}
$a[$i]=$x;}


?>
<br>Karten der Bank:<br>
<table border='1'><tr>
<?php
echo "<td><img src='".$a[1].".JPG'><br>Wert:".$werte[$a[1]-1]."</td>";
echo "<td><img src='".$a[2].".JPG'><br>Wert:".$werte[$a[2]-1]."</td>";
?>
</table>
Summe Punkt der Bank:
<?php $bankwert = $werte[$a[1]-1]+$werte[$a[2]-1];
echo $bankwert; ?>
<br><br>


Deine Karten:<br>
<table border='1'><tr>
<?php
echo "<td><img src='".$a[3].".JPG'><br>Wert:".$werte[$a[3]-1]."</td>";
echo "<td><img src='".$a[4].".JPG'><br>Wert:".$werte[$a[4]-1]."</td>";
?>
</tr></table>

Summe deiner Punkt:
<?php $meinwert = $werte[$a[3]-1]+$werte[$a[4]-1];
echo $meinwert; ?>
<br><br>


<hr>
</font>
<font size ="4" color="#ff0000">

<?php
if ($meinwert>$bankwert){
echo "<br>Gewonnen!"; $g=1;}
else {
echo "<br>Verloren!"; $g=0;}

// man kann maximal die vorhandenen Punkte setzten.
// Einsatz darf auch nicht negativ sein!
if ($einsatz>$punkte) {$einsatz=$punkte;}
if ($einsatz<0) {$einsatz=0;}

if ($g==1) {$punkte = $punkte + $einsatz;}
else { $punkte=$punkte-$einsatz;}

echo "<br>Dein Einsatz betrug $einsatz.";
echo "<br>Punktestand:<input type='hidden' name='punkte' value ='$punkte' ><br>";
echo "Du hast nun $punkte Punkte!";

else:
// Nach dem Laden der Seite hat man 100 Punkte!
echo "<br>Punktestand:<input type='hidden' name='punkte' value ='100' ><br>";
echo "Du beginnst mit 100 Punkte!";
endif;
?>
</form>
</font>
</body></HTML>
 

Special Black Jack:
Falls man eine etwas komplexere Black Jack Variante haben möchte, dann kann man hier alle benötigten Dateien
herunterladen. Hier werden die Ergebnisse auch in einer Tabelle der Datenbank bgame gespeichert. Die SQL
Syntax zur Erstellung dieser Tabelle befindet sich wieder in der Datei sql.txt. Die Dateien sollten wieder in ein
Unterverzeichnis des XAMPP-Verzeichnisses htdocs kopiert werden.
 


PC - Datenbank:
Hier seht ihr ein Beispiel für eine Web-Datenbank. Auf den Beispielseiten zur PC-Datenbank können PC-Teile
und PC-Zubehör zum Verkauf angeboten, ein Bild hochgeladen (wird in einer MySQL-Datenbank gespeichert),
Änderungen am eingestellten Angebot vorgenommen oder das Angebot gelöscht werden. Man kann außerdem
nach diversen Suchkriterien in der Datenbank suchen.

Alle benötigten Dateien aus diesem Beispiel können hier heruntergeladen werden. Um die Datenbank mit Tabelle
in MySQL anzulegen, könnt ihr wieder die Datei sql.txt verwenden (z.B. einfach in das SQL-Fenster von dem
PHPMyAdmin kopieren und abschicken). Die Verbindung zur Datenbank muss in db.php eingestellt werden.


Warenkorb:
Hier seht ihr ein Beispiel für einen einfachen Warenkorb.


Bei Fragen: e-Mail schicken.