PHP-Einfach.de PHP lernen leicht gemacht

Navigation
» Startseite
» Newsübersicht
» Kontakt
» Impressum

Community
» Forum
» Gästebuch

Tutorial
» PHP Tutorial
» MySQL Tutorial
» PHP
» MySQL
   » Login & MySQL
   » Blätterfunktion
   » Gästebuch
   »Gästebuch Spam
» Codeschnipsel

Downloads
» Einführung
» Scripts
» Command Board

Sonstiges
» md5-Generator
» Generator
» Wissenswertes

PHP lernen


Dieses Projekt wird unterstützt von
Lichteffekte Shop

 
Partner:
PHP Forum
Mathe Nachhilfe
Suchmaschinenoptimierung

Gästebuch mit Blätterfunktion

Die meisten Seiten haben ein Gästebuch, wodrin sich die Besucher verewigen können. Wenn die Seite aber bekannte ist, reicht es nicht mehr aus, wenn man die Einträge nur auf einer Seite anzeigt, deswegen programmieren wir heute in PHP ein MySQL-Gästebuch mit Blätterfunktion.

So schwer ist das gar nicht.

Tabelle
Zuerst einmal brauchen wir eine Tabelle, die Tabelle bekommt den Namen Gaestebuch hat 6 Spalten mit folgenden Eigenschaften:

id, int, 5, unsigned, not null, , auto_increment, primary,
datum, int, 11, unsigned, not null,
name, varchar, 150, , not null,
email, varchar, 150, , not null,
inhalt, text, , , not null,
aktiv, tinyint, 1, unsigned, not null,

Die Ausgabe: gb.php
So auf der Seite, wo wir die Beiträge ausgeben, soll auch ein Formular sein, wo die Besucher sich eintragen können.
Dafür brauchen wir ein normales Formular, ca. so:
<html>
<head>
<title>Gästebuch</title>

Wollen Sie einen Beitrag hinzufügen?<br>
<form action="eintragen.php" Method="post">
Ihr Name:<br>
<input name="name" size="40"><br><br>

E-Mail:<br>
<input name="email" size="40"><br><br>


Inhalt:<br>
<textarea name="inhalt" cols="40"
 rows="12" wrap="physical"></textarea><br>
<input type="submit" value="Absenden">
</form>
So als nächstes wollen wir die Beiträge ausgeben, zuerst einmal der gesamte Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
<?php
$seite
= $_GET["seite"];  //Abfrage auf welcher Seite man ist

//Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
if(!isset($seite))
   {
   
$seite = 1;
   }

//Verbindung zu Datenbank aufbauen

$link = mysql_connect("localhost","Username","Passwort") or die ("Keine Verbindung moeglich");
mysql_select_db("Datenbank") or die ("Die Datenbank existiert nicht");


//Einträge pro Seite: Hier 15 pro Seite
$eintraege_pro_seite = 15;

//Ausrechen welche Spalte man zuerst ausgeben muss:

$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;


//Tabelle Abfragen
//Tabelle heißt hier einfach: Tabelle
$abfrage = "SELECT * FROM Gaestebuch WHERE aktiv = '1' ORDER BY id DESC LIMIT $start, $eintraege_pro_seite";
$ergebnis = mysql_query($abfrage);
while(
$row = mysql_fetch_object($ergebnis))
    {
    
$inhalt = $row->inhalt;
    
$inhalt = htmlentities($inhalt);
    
$inhalt = nl2br($inhalt);
    
$datum = date("d.m.Y H:i", $row->datum);

    
//Der Besucher hat keine E-Mail Adresse angegeben:
    
if($row->email == "")
       {
       
$name = "<b>$row->name</b>";
       }
    else
       {
       
//Der User hat eine Email Adresse angegeben:
       
$name = "<a href=\"mailto:$row->email\">$row->name</a>";
       }

    echo
"
   <table align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"5\" bgcolor=\"#000000\" width=\"50%\">
   <tr bgcolor=\"#ffffff\">
   <td>
   Von <b>$name</b> am $datum
   </td>
   </tr>
   <tr bgcolor=\"#ffffff\">
   <td>
   $inhalt
   </td>
   </tr>
   </table><br>  "
;
    
   }


//Jetzt kommt das "Inhaltsverzeichnis",
//sprich dort steht jetzt: Seite: 1 2 3 4 5


//Wieviele Einträge gibt es überhaupt

//Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten
//also der gleiche Text wie in der Variable $abfrage, blo&szlig; das hier das LIMIT fehlt
//Sonst funktioniert die Blätterfunktion nicht richtig,
//und hier kann nur 1 Feld abgefragt werden, also id

$result = mysql_query("SELECT id FROM Gaestebuch WHERE aktiv = '1'");
$menge = mysql_num_rows($result);

//Errechnen wieviele Seiten es geben wird
$wieviel_seiten = $menge / $eintraege_pro_seite;

//Ausgabe der Seitenlinks:
echo "<div align=\"center\">";
echo
"<b>Seite:</b> ";


//Ausgabe der Links zu den Seiten
for($a=0; $a < $wieviel_seiten; $a++)
   {
   
$b = $a + 1;

   
//Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
   
if($seite == $b)
      {
      echo
"  <b>$b</b> ";
      }

   
//Aus dieser Seite ist der User nicht, also einen Link ausgeben
   
else
      {
      echo
"  <a href=\"?seite=$b\">$b</a> ";
      }


   }
echo
"</div>";
?>
Naja so schwer ist der Code nicht, wer das Tutorial über die Blätterfunktion gelesen hat, kann folgenden Abschatzt überfliegen:
Blätterfunktion
Also zuerst wird abgefragt, auf welcher Seite man sich befindet, dies wird dann in der Variable $seite gespeichert. Wer noch die Version 4.0.5 benutzt, muss $_GET["seite"]; benutzen. Dann wird geguckt ob überhaupt eine Seite angegeben wurde, wenn nich, ist man automatisch auf Seite 1.

Danach wird eine Verbindung zur Datenbank aufgebaut, diesen Abschnitt müsst ihr dann bearbeiten wenn ihr den Script testen wollt.
Wenn das getan wurde, wird angegeben, wieviele Einträge man pro Seite haben möchte, in diesem Fall sind es 15 pro Seite, was eigentlich ein ganz guter Wert ist.

In $start wird der Startwert der Ausgabe gespeichert. Wenn man auf Seite 5 ist, so beträgt dieser 60, also wird ab der 60 Zeile die Einträge ausgegeben.

Danach erfolgt eine Abfrage der Tabelle, hier heißt die Tabelle einfach nur: Tabelle, bei der Abfrage ist nur der LIMIT Abschnitt wichtig, wenn man auf Seite 5 ist, so wird ab dem 60 Eintrag die folgenden 15 Einträge ausgegeben.
In die Abfrage können aber auch noch andere Kriterien sein, wie z.B. ORDER BY id DESC oder auch WHERE Kriterien.

So das war jetzt die Ausgabe, wo wir nur die ID ausgegeben haben, jetzt möchten wir dem User auch die Links zu den einzelnen Seiten ausgeben, dazu Fragen wir die Tabelle ab, wichtig hierbei ist, dass wir die gleichen Kriterien benutzen (WHERE...), wie bei der Ausgabe der Daten, bis auf das LIMIT, das darf dort nicht stehen, und es reicht wenn wir nur 1 Feld abfragen, z.B. id.
Danach finden wir herraus, wieviele Zeilen in der Tabelle sind, und speichern diesen Wert in $menge. Den Wert teilen wir durch die Einträge pro Seite.

In einer for-Schleife geben wir dann die einzelnen Seiten aus, aber wenn der User auf der gleichen Seite ist wie die, die gerade ausgegeben wird, so erstellt der PHP Script keinen Links, sondern nur eine fettgeschriebenen Zahl.

So das wars dann auch mit der Blätterfunktion, ich hoffe sie hilft euch weiter wenn ihr z.B. ein Gästebuch erstellen wollt. Aber ihr müsst aufpassen, das ihr nich zuviele Seiten habt, denn wenn dort 100 Links zu 100 Unterseiten sind, sieht das nicht besonders gut aus. Aber wie man das Problem löst, erfahrt ihr später, denn das ist gar nicht so leicht.

Blätterfunktion zuende

So das war die Blätterfunktion, bei der Ausgabe wandeln wir den Timestamp in ein lesbares Datum um, und bearbeiten den Inhalt so, das aus \n ein <br> wird und fremde HTML Codes verschwinden.

Danach überprüfen wir, ob der User eine E-Mail Adresse angegeben hat, wenn nicht, wird eine andere Tabelle ausgegeben.
Außerdem fragen wir nur Einträge ab, die aktiv sind, dazu brauchen wird das letze Feld in der Tabelle. Wenn es eine 1 enthält, ist der Eintrag aktiv, sonst nicht.

So das wars auch alles über die Ausgabe, jetzt kommen wir zum speichern.

Daten speichern: eintragen.php
Erst wieder der gesamte Code für: eintragen.php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
<?php
$link
= mysql_connect("localhost","Username","Passwort") or die ("Keine Verbindung moeglich");
mysql_select_db("Datenbank") or die ("Die Datenbank existiert nicht");

$name = $_POST["name"];
$email = $_POST["email"];
$inhalt = $_POST["inhalt"];

$datum = time();
$aktiv = 1; //1: Einträge werden aktiviert gespeichert, 2: Einträge werden deaktiviert gespeichert

//Wurden die benötigten Felder ausgefüllt?
if($name == "" OR $inhalt == "")
    {
   echo
"Bitte die Felder \"Name\" und \"Inhalt\" ausfüllen<br> <a href=\"gb.php\">Zurück</a>";
   exit;
//Script Ablauf wird unterbrochen, Eintrag wird nicht gespeichert
   
}

$eintrag = "INSERT INTO Gaestebuch (datum, name, email, inhalt, aktiv) VALUES ('$datum', '$name', '$email', '$inhalt', '$aktiv')";
$eintragen = mysql_query($eintrag);

//Wurde der Eintrag erfolgreich gespeichert?
if($eintragen == true)
   {
   echo
"Beitrag erfolgreich gespeichert. ";
   }
else
   {
   echo
"Fehler beim Speichern";
   }

echo
"<br> <a href=\"gb.php\">Zurück</a>";
?>
Nachdem wir die Verbindung zur Datenbank aufgebaut haben, fragen wir die Informationen aus dem Formular ab. Wenn der User entweder einen Namen oder keinen Inhalt angegeben hat, schicken wir ihn zurück, damit er den rest ausfüllen kann und der Scriptablauf wird per exit unterbrochen.

Wenn er beide Felder ausgefüllt hat, speichern wir den Eintrag in der Datenbank.

Wenn der Beitrag erfolgreich gespeichert wurde, enthält $eintragen ein true, sonst ein false. Daran kann man gut überprüfen, ob ein Fehler aufgetreten ist oder nicht.

Anschließen bekommt der User eine Statusmeldung und er kann über den Link sich die Eintrag nochmals angucken.

Autor Andavos

News
13.08 - » Spam im Gästebuch
Endlich Schluss mit dem Spam

08.12 - » Clanletter 2.0
Clanletter wurde komplett neu programmiert

01.09 - » Command Board 1.0 - 2.0
Das Command Board 1.0 Beta 2.0 ist erschienen


Mehr

Forum
» Entwickler Forum

» insert nach login

» Tabellenzelle zu groß







© PHP-Einfach.de 2003 - 2012