Computerhilfen.de
Design und Entwicklung => Webmaster Forum & Hilfe => Thema gestartet von: Syrus am 30.04.05, 16:53:24
-
Hallo ich habe vor ein Gästebuch zu erstellen, das ganze klappt auch schon relativ gut. Es gibt keine Fehler im Programm allerdings wenn ich einen eintrag schreib wird der auch angezeigt wenn ich jetzt noch einen schreib wird der vorige gelöscht und nur der aktuellste angezeigt!?! Woran kann das liegen???
Quellcodes:
start.php:
<?php
echo"<html><head><title>Start</title></head><body bgcolor='#A56003'>";
echo"<p align='center'><font color='#FFFFFF'><span style='font-size: 20pt'>Gästebuch Version 0.1a</span></font></p>";
echo"<form method='GET' action='eintragen.php'>";
echo"<p> </p>";
echo"<p> </p>";
echo"<p><font color='#FFFFFF' style='font-size: 16pt'>Name:</font></p>";
echo"<p><font color='#FFFFFF'>";
echo"<input type='input' name='namen' value=''></font></p>";
echo"<p><font color='#FFFFFF' style='font-size: 16pt'>email: </font></p>";
echo"<p><font color='#FFFFFF'>";
echo"<input type='input' name='mail' value=''>";
echo" </font></p>";
echo"<p align='left'>";
echo"<font color='#FFFFFF'><span style='font-size: 16pt'>Ihr Text:</span></font></p>";
echo"<p align='left'>";
echo"<textarea name='text' rows='12' cols='107'>";
echo"</textarea><br><br>";
echo"</p>";
echo"<tr><td> </td><td><input type='submit' value='Abschicken'></td></tr>";
echo"</body>";
echo"</html>";
?>
eintragen.php:
<?php
$dh=fopen("gbdok.txt","a");
fwrite($dh,"$namen,$mail,$text\n");
fclose($dh);
echo"<table border=1 width='100%' height='30'><tr><th height='25' width='15%'>Name</th>";
echo"<th height='30' width='15%'>email</th><th height='30'>Text</th></tr>";
echo"<tr><td width='15%'>$namen </td><td width='15%'>$mail </td><td>$text</td></tr>";
echo"</table>";
?>
-
Das liegt daran, dass Du die Textausgabe in der eintragen.php machst und die nur die Daten vom letzen Eintrag geliefert bekommt.
Ich würde eine etwas andere Architektur wählen.
start.php: Hier werden nur die Einträge angezeigt und ein Link zum Eintragen geliefert.
formular.php: Hier werden die Daten eingegeben und an eintragen.php weitervermittelt.
eintragen.php: Hier wird der Eintrag gespeichert.
Nun wirst Du aber nicht drumherum kommen, die Datei in der start.php auszulesen.
Bin gerade etwas in Eile, aber vielleicht denk ich mir ja morgen mal was aus, bzw. vielleicht hast Du's bis dahin ja auch schon ;)
Gruß Spawn
-
Also irgendwie is des doof mit dem php entweder er überschreibt es oder er gibt nichts aus!
Ich hab des jetzt übrigens in 3 dateien unterteilt aber helfen tut das nicht wirklich!
Also es funktioniert soweit, dass der jetzt alles in dem .txt dokument abspeichert das einzige was ich noch brauche ist der befehl, dass der das da wieder rausliest!!!!
Ich hock jetzt seit 3 stunden dran und der scheiß läuft immer noch nich was muss denn in die datei rein die das auslesen soll??? eigentlich doch nur: datei öffnen, daten rauslesen, datei schließen, daten ausgeben oder sowas in der richtung also bei mir geht da gar nix mitlerweile gibt er ja nicht mal mehr was aus früher hat er immerhin noch das aktuellste rausgelesen
-
Das Problem an dem Code, den Du gepostet hast ist, dass Du die neuen Daten an die eintragen.php übermittelst und dann schreibst:
echo"<table border=1 width='100%' height='30'><tr><th height='25' width='15%'>Name</th>";
echo"<th height='30' width='15%'>email</th><th height='30'>Text</th></tr>";
echo"<tr><td width='15%'>$namen </td><td width='15%'>$mail </td><td>$text</td></tr>";
echo"</table>";Die Daten werden zwar vorher korrekt in die Textdatei gespeichert, aber nur das eine übermittelte Ergebnis wird angezeigt.
Du solltest nur den Eintrag machen, die Daten aber nciht anhand dessen anzeigen sondern aus der Datei auslesen. Das funktioniert ähnlich fwrite, mit fread()
Eine Beschreibung findest Du zB hier:
http://de.php.net/manual/de/function.fread.php
Du könntest das in etwa so verwenden (ungetestet):
<?php
$handle = fopen("gbdok.txt", "r");
$contents = '';
while (!feof($handle)) {
$contents .= fread($handle, 8192);
}
fclose($handle);
?>
Dann würden alle Daten in der $contents gespeichert werden.
Blöderweise musst Du sie dann wieder auseinanderpflücken, da an Deinem Beispiel die komplette gbdok.txt in $contents gespeichert wird.
Dazu bräuchtest Du dann Stringmanipulationen (schau einfach mal auf oben genannte Seite, da gibts viele Referenzen).
Gruß Spawn
PS: Hast Du MySQL? Damit geht's auch und wahrscheinlich auch etwas einfacher.
-
Hi |
Stimmt vollkommen: du solltest deine Textdatei in einem separaten Skript auslesen. Du musst in deinem Fall die Textdatei wieder zerhacken, um an die Daten zu kommen. Das könnte so aussehen:
<?
$entries = file("gbook.txt");
foreach($entries as $num => $content)
{
$this_entry = explode(",", $content);
echo($this_entry[0]."---".$this_entry[1]."---".$this_entry[2]."<br>");
}
?>
Würde dir aber auch zu MySQL raten, sofern verfügbar. Das ist schneller als die Verwendung von Textfiles, und die Handhabung der Daten wird einfacher.
greez 8)
JoSsiF
-
Ich habs jetzt auch nochmal mit Textdatei versucht und ein (einigermaßen gutes) Ergebnis bekommen. Hier erstmal der Code:
start.php
<?php
echo"<html><head><title>Start</title></head><body bgcolor='#A56003'>";
echo"<p align='center'><font color='#FFFFFF'><span style='font-size: 20pt'>Gästebuch Version 0.1a</span></font></p>";
echo"<table border=1 width='100%' height='30'>";
echo"<tr><th height='25' width='15%'>Name</th>";
echo"<th height='30' width='15%'>email</th><th height='30'>Text</th></tr>";
$handle = fopen("gbdok.txt", "r");
while (!feof($handle)) {
$name = fgets($handle, 4096);
$email = fgets($handle, 4096);
$text = fgets($handle, 4096);
echo"<tr><td width='15%'>$name </td><td width='15%'>$email </td><td>$text</td></tr>";
}
fclose($handle);
echo"</table>";
echo("<a href='formular.php'>Neuer Eintrag</a>");
echo"</body>";
echo"</html>";
?>formular.php
<?php
echo"<html><head><title>Formular</title></head><body bgcolor='#A56003'>";
echo"<form method='GET' action='eintragen.php'>";
echo"<p> </p>";
echo"<p> </p>";
echo"<p><font color='#FFFFFF' style='font-size: 16pt'>Name:</font></p>";
echo"<p><font color='#FFFFFF'>";
echo"<input type='input' name='namen' value=''></font></p>";
echo"<p><font color='#FFFFFF' style='font-size: 16pt'>email: </font></p>";
echo"<p><font color='#FFFFFF'>";
echo"<input type='input' name='mail' value=''>";
echo" </font></p>";
echo"<p align='left'>";
echo"<font color='#FFFFFF'><span style='font-size: 16pt'>Ihr Text:</span></font></p>";
echo"<p align='left'>";
echo"<textarea name='text' rows='12' cols='107'>";
echo"</textarea><br><br>";
echo"</p>";
echo"<tr><td> </td><td><input type='submit' value='Abschicken'></td></tr>";
echo"</body>";
echo"</html>";
?>eintragen.php
<?php
$dh=fopen("gbdok.txt","a");
fwrite($dh,$namen."\n");
fwrite($dh,$mail."\n");
fwrite($dh,$text."\n");
fclose($dh);
echo("<a href='start.php'> zurüeck zum Start</a>");
?>
In der eintragen.php wird jetzt nach jeder Variable (name, mail....) ein Zeilenumbruch gemacht und in der start.php zeilenweise mit fgets ausgelesen.
Einziges Problem: Wenn im Text ein Zeilenumbruch ist, gibts Ärger, da die zweite Zeile dann schon als nächster Name interpretiert wird.
Das wollte ich eigentlich durch "fwrite($dh,nl2br($text)."\n");" umgehen, so dass jeder Zeilenumbruch im Text durch ein <br> ersetzt wird, hat aber irgendwie nciht funktioniert und da hab ichs wieder rausgenommen.
Vielleicht findest Du dafür ja noch eine Lösung.
Gruß Spawn
-
Und genau deswegen ist es sinnvoll, für jeden "Datensatz" eine eigene Zeile zu verwenden und die einzelnen Attribute (Name, Mail etc.) per Trennzeichen zu notieren.
Kurz noch bemerkt: das bisher verwendete Komma ist als Separator natürlich totaler ** Netiquette! **, denn in fast jedem Text kommt irgendwie mal ein Komma vor. Besser wäre sowas wie "|" oder auch eine Zeichenfolge, deren Auftretenswahrscheinlichkeit innerhalb eines Textes sehr gering ist.
greez 8)
JoSsiF
-
Wie kann ich das Trennungszeichen verändern bzw. das Problem mit dem Zeilenumbruch umgehen???
Hat da zufällig jdm. eine Lösung parat?
-
MySQL. Ist das bei Dir möglich? Das hat einige Vorteile. Besonders wenn Du weiterdenkst und dann vielleicht auch mal einen Eintrag bearbeiten oder sogar löschen willst.
-
Wie kann ich das Trennungszeichen verändern
Na das solltest du aber schon wissen, schließlich hast du ja das bisherige Trennzeichen auch selber gesetzt ;D
Schau mal in dein 1. Posting in diesem Thread. Dort steht folgende Zeile:
fwrite($dh,"$namen,$mail,$text\n");Was wird da das Trennzeichen sein?
Wenn du dort etwas änderst, musst du noch den 1. Parameter im explode-Befehl anpassen, denn der bestimmt das Trennzeichen, anhand dessen der String zerhackt wird.
Ansonsten geb ich Spawn Recht: MySQL ist schon zu empfehlen, wenn's dann auch im solche Sachen wie Löschen geht. Ansonsten wird's mit der Textdatei etwas unkomfortabel.
Übrigens: Wenn dein Webhoster PHP anbietet, wird sicher auch MySQL dabei sein, denn die beiden Sachen treten häufig als "Gespann" auf.
greez 8)
JoSsiF
-
Also mysql ist nicht vorhanden ist auch nicht so schlimm da ich das ja eh nur hobbymäßig mache bzw. es (noch) nich ins internet stellen werde!
Zu den Trennungszeichen ich habe die Kommas als normales zeichen gesehen ich hab nich gewusst dass die das trennungszeichen sind (bzw. dass ich das verändern kann)
Danke an alle
-------------
edit1:
lustig! Wenn ich mir die textedatei (gbdok) ansehe dann ist sie auf chinesisch oder so geschrieben!
edit2:
was hat es in der einen datei mit dem Punkt auf sich???
fwrite($dh,$namen."\n");
also der punkt nach $namen
sorry wegen den dummen fragen aber ich bin html anfänger und wage mich gerade auf neues terrain!
-
Der Punkt fungiert in php als Verkettungszeichen.
fwrite($dh,$namen."\n"); bedeutet also: schreibe den Inhalt von $namen gefolgt von "\n" (also dem Zeilenumbruch) in die Datei.
Gruß Spawn
PS: Wenn Du php mehr so zum Spaß machst lies Dir am besten mal ein paar Tutorials durch. Da werden viele grundlegende Sachen erstmal erklärt und es ist trotzdem nicht langweilig, da es in php sooo viele Grundlagen nicht gibt (zumindest wenn man schon eine Programmiersprache einigermaßen beherrscht).
Obwohl, selber lernen ist eignetlich auch cool. Naja, Du machst das schon ;)
-
Ja Tutorials wollt ich mir auch mal anschaun nur wollt ich mich vorher noch schnell durch eine kleine Aufgabe durchbeißen!
Danke erstmal für die vielen hilfreichen Beiträge!!!!
Dann noch eine abschließende Frage:
Wie kann man das mit den Zeilenumbrüchen lösen???
-
Nunja, wie gesagt: Eigentlich wollte ich das ganze durch nl2br() umgehen. nl2br oder auch NewLineToBreak sollte eigentlich jeden Zeilenumbruch durch ein <br> ersetzen, was das Problem lösen sollte. Allerdings hat das bei mir nicht funktioniert. Vielleicht habe ich aber auch irgendeinen blöden Fehler gemacht. Der Befehl funktioniert so:
$ohnenl = nl2br($mitnl);oder auch:
echo(nl2br($mitnl));etc....
Das Problem bei meinem Beispiel war eben, dass ich die Datei mit fgets() ausgelesen habe und das bis zum nächten Zeilenumbruch ausliest.
Du kannst allerdings auch Zeichen für Zeichen auslesen und bei einem Trennzeichen Deiner Wahl (zB |) Schluss machen.
Das geht dann in etwa so:
$s="";
$art = 0;
//$art steht für: 0:name 1:email 2:text
$handle = fopen ("gbdok.txt", "r");
do
{
$zeichen = fgetc( $handle ); //holt sich das nächste Zeichen
if($zeichen)
{
if($zeichen = "|")
{
switch($art)
{
case 0: $namen = $s; break;
case 1: $email = $s; break;
default: $text = $s; break;
}
$s = "";
$art = &art + 1;
if( $art == 3)
{
$art = 0;
//Ausgabe der Daten
}
}
else $s = $s + $zeichen;
}
}while($zeichen);
Puuh, das war mal schnell aus den Fingern gesaugt, ungetestet, ich hoffe es funktioniert. Vielleicht mal noch ne Erklärung:
$art gibt an, was gerade ausgelesen wird, 0 für name, 1 für mail, 2 für text. $s ist die momentan ausgelesene Zeichenkette.
Man beginnt also bei $art=0 und $s="" und liest das erste Zeichen. Dann das 2te usw. Wenn dann "|" kommt wird geschaut: $art = 0, also wird $name = $s und $art eins hochgesetzt.
Wenn $art dann drei ist, ist alles für einen Eintrag ausgelesen. Es wird ausgegeben (name, email, text) und $art wieder auf 0 gesetzt.
Und das solange bin $zeichen = false ist, also die Datei zuende.
Wahrscheinlich gibt es auch einen viiiieeeeel eleganteren Weg und bestimmt auch irgendwo n kleinen Fehler im Programm... :( ....versuch einfach mal und meld Dich, wenn Du's nicht packst.
Gruß Spawn
-
Also irgendiwe wird mir php ewig ein rätsel bleiben:
<html><head><title></title></head><body>
<?php
echo"<html><head><title></title></head><body>";
echo"<table border='1' width='72%' id='table1'>";
echo"<tr>";
echo"<td width='18%'>";
echo"<p align='left'>#</td>";
echo"<td width='18%'>";
echo"<p align='left'>1</td>";
echo"<td width='18%'>";
echo"<p align='left'>Name</td>";
echo"<td width='18%'>";
echo"<p align='left'>Syrus</td>";
echo"</tr>";
echo"<tr>";
echo"<td width='18%'>";
echo"<p align='left'>Betreff</td>";
echo"<td width='18%'>";
echo"<p align='left'>Gruß</td>";
echo"<td width='18%'>";
echo"<p align='left'>email</td>";
echo"<td wideth='18%'";
echo"<p align='left'>Syrus@...</td>";
echo"</tr>";
echo"<tr>";
echo"<td width='18%'>";
echo"<p align='left'>Datum</td>";
echo"<td width='18%'>";
echo"<p align='left'>10.02.2005</td>";
echo"<td width='18%'>";
echo"<p align='left'>Zeit</td>";
echo"<td width='18%'>";
echo"<p align='left'>15.50</td>";
echo"</tr>";
echo"</table>";
$auslesen=fopen("gbdok.txt","r");
foreach($auslesen as $value){
$paar=split("!&!",$value);
echo"<tr><td>$paar[0]</td><td>$paar[1]</td><td>$paar[2]</td><td>$paar[3]</td><td>$paar[4]</td><td>$paar[5]</td>
}
echo"<table border='1' width='72%' id='table2' height='26'>";
echo"<tr>";
echo"<td>";
echo"<p align='left'>text</td>";
echo"</tr>";
echo"</table>";
echo"</body></html>";
?>
ich will jetzt die daten auslesen, so dass er die in die freien felder der tabelle einfügt! Also praktisch als datum usw.! Es geht nur erst ma drum, dass er ne datei ausliest und diese dann aufteilt und richtig einfügt!!! (ich habe die felder schon ausgefüllt sprich bei name steht schon was muss dan halt natürlich weg!)
-
Sorry, hab mir Deins jetzt nciht genauer angeschaut, sondern mal "meins" von dem letzen Post fertiggemacht. Waren noch n paar Fehlerlies drin, jetzt geht's aber (meines Erachtens) ohne Probleme:
- Zeilenumbruch ist drin
- "|" wird als Trennzeichen genommen.
wieder das alte Spiel mit start,formular,eintragen:
start.php:
<?php
echo"<html><head><title>Start</title></head><body bgcolor='#A56003'>";
echo"<p align='center'><font color='#FFFFFF'><span style='font-size: 20pt'>Gästebuch Version 0.1a</span></font></p>";
echo"<table border=1 width='100%' height='30'>";
echo"<tr><th height='25' width='15%'>Name</th>";
echo"<th height='30' width='15%'>email</th><th height='30'>Text</th></tr>";
$handle = fopen("gbdok.txt", "r");
$s="";
$art = 0;
//$art steht für: 0:name 1:email 2:text
do
{
$zeichen = fgetc( $handle ); //holt sich das nächste Zeichen
if($zeichen)
{
if($zeichen == "|")
{
switch($art)
{
case 0: $namen = nl2br($s); break;
case 1: $email = nl2br($s); break;
default: $text = nl2br($s); break;
}
$s = "";
$art = $art + 1;
if( $art == 3)
{
$art = 0;
echo"<tr><td width='15%'>$namen </td><td width='15%'>$email </td><td>$text</td></tr>";
}
}
else $s = $s.$zeichen;
}
}
while($zeichen);
fclose($handle);
echo"</table>";
echo("<a href='formular.php'>Neuer Eintrag</a>");
echo"</body>";
echo"</html>";
?>formular.php:
<?php
echo"<html><head><title>Formular</title></head><body bgcolor='#A56003'>";
echo"<form method='GET' action='eintragen.php'>";
echo"<p> </p>";
echo"<p> </p>";
echo"<p><font color='#FFFFFF' style='font-size: 16pt'>Name:</font></p>";
echo"<p><font color='#FFFFFF'>";
echo"<input type='input' name='namen' value=''></font></p>";
echo"<p><font color='#FFFFFF' style='font-size: 16pt'>email: </font></p>";
echo"<p><font color='#FFFFFF'>";
echo"<input type='input' name='mail' value=''>";
echo" </font></p>";
echo"<p align='left'>";
echo"<font color='#FFFFFF'><span style='font-size: 16pt'>Ihr Text:</span></font></p>";
echo"<p align='left'>";
echo"<textarea name='text' rows='12' cols='107'>";
echo"</textarea><br><br>";
echo"</p>";
echo"<tr><td> </td><td><input type='submit' value='Abschicken'></td></tr>";
echo"</body>";
echo"</html>";
?>eintragen.php:
<?php
$dh=fopen("gbdok.txt","a");
fwrite($dh,$namen."|");
fwrite($dh,$mail."|");
fwrite($dh,$text."|");
fclose($dh);
echo("<a href='start.php'> zurüeck zum Start</a>");
?>
Schau's am besten mal in Ruhe durch, kannst Dir meiner Meinung nach so am besten n paar kleine Kniffe "abschauen" und für Dich weiterverwenden.
Gruß Spawn
PS: Obwohl ich überzeugt bin, dass es auch bessere Lösungen gibt. Dies ist eben eine unter vielen ;)
-
was hat es denn mit dem $hanle auf sich???
das ist ja keine variable sondern ein fester befehl oder!?!
Gruß Syrus
-
alles was mit $ beginnt sind Variablen.
Falls es dir nicht aufgefallen ist hat er in der start.php oben (unter den echo-zeilen) mit
"$handle = fopen (...." den inhalt der datei in diese Variable geschrieben um damit im rest des codes arbeiten zu können.
Gruß Jan
-
So ist es. $handle "repräsentiert" den Inhalt der Datei. Mir fiel noch etwas zu meinem Code ein: Der ist jetzt nicht gegen Fehler gesichert. Sollte also in der gbdok.txt etwas nicht "Muster-konformes" stehen, kommt etwas unsinniges beim Lesen heraus. Die Eintragen.php macht aber nur sinnvolle Einträge, müsste also schon von einem anderen Script manipuliert werden.
Gruß Spawn
-
Wichtig für alle, die das obige GB benutzen woll(t)en:
Mir ist gerade als ich das GB mal selbst einbauen wollte ein blöder Kinderfehler aufgefallen.
Zumal die GB-Datei Zeichen-für-Zeichen ausgelesen wird und php eine meiner Meinung nach etwas blöde Variablen-Handhabung hat, wird eine Datei als "beendet" eingestuft, wenn in der Datei eine "0" vorkommt.
Das geschieht zB an der Stelle:
if($zeichen)
{
bla
Dummerweise wird die Null gleichzeitig als "false" gehandhabt und somit "denkt" das Script, es folgt kein Zeichen mehr.
Überlege gerade wie ich das umgehen kann. Wenn jemand Ideen hat wäre ich sehr dankbar.
Gruß Spawn
-
Okay, ich hab ne Lösung, allerdings bin ich nicht sonderlich zufrieden damit. Ist nicht sehr "sauber" programmiert, aber zweckmäßig. Statt nur auf $zeichen (==true) abzufragen, frage ich jetzt ab:
if($zeichen || ord($zeichen)==48)Also ob $zeichen etwas enthält oder der ASCII-Wert des Zeichens gleich 48 (--> "0") ist.
Damit wäre die start.php jetzt:
<?php
echo"<html><head><title>Start</title></head><body bgcolor='#A56003'>";
echo"<p align='center'><font color='#FFFFFF'><span style='font-size: 20pt'>Gästebuch Version 0.1a</span></font></p>";
echo"<table border=1 width='100%' height='30'>";
echo"<tr><th height='25' width='15%'>Name</th>";
echo"<th height='30' width='15%'>email</th><th height='30'>Text</th></tr>";
$handle = fopen("gbdok.txt", "r");
$s="";
$art = 0;
//$art steht für: 0:name 1:email 2:text
do
{
$zeichen = fgetc( $handle ); //holt sich das nächste Zeichen
if($zeichen || ord($zeichen)==48)
{
if($zeichen == "|")
{
switch($art)
{
case 0: $namen = nl2br($s); break;
case 1: $email = nl2br($s); break;
default: $text = nl2br($s); break;
}
$s = "";
$art = $art + 1;
if( $art == 3)
{
$art = 0;
echo"<tr><td width='15%'>$namen </td><td width='15%'>$email </td><td>$text</td></tr>";
}
}
else $s = $s.$zeichen;
}
}
while($zeichen || ord($zeichen)==48);
fclose($handle);
echo"</table>";
echo("<a href='formular.php'>Neuer Eintrag</a>");
echo"</body>";
echo"</html>";
?>
Gruß Spawn
-
Hi..
Ich hab mal versucht alles in Txtdatei-basierendes Gästebuch in eine Datei (weil 3 waren mir zu viel (von wegen Start.hph,Eintrg.php etc)). Funktioniert soweit..vielleicht kann ja jemand noch einbauen das man die einträge auf mehrer seiten verteilt (z.b. 10 pro seite).. Sollte jemand das script aus irgendeinem grund für totalen schwachsin halten sacht bescheid, war ja nur ein versuch ;-)
einzige voraussetzung ist jetzt das eine leere textdatei im selben ordner liegt die mygb.txt heißt. Oder den code ändern :-)
<?
//Der PHP-Teil. Ohne PHP (oder einer anderen Internettauglichen
//Programmiersprache (wie z.B. Perl)) wird man kein Gästebuch zum
//Laufen bekommen.
//Script wird nur ausgeführt wenn der Benutzer auf "Eintragen" gedrückt hat
if(isset($_POST['submit']))
{
//Alles in eine Variable hintereinander schreiben
$GBeintrag = $_POST['myGBname']."|";
$GBeintrag .= $_POST['myGBhp']."|";
$GBeintrag .= $_POST['myGBmail']."|";
$GBeintrag .= date("d.m.y")."|"; //datum muss natürlich auch mit rein
//Falls jemand in der nachricht ein | verwendet hat sollten wir das
//ersetzen, da sonst beim auslesen fehler auftauchen
$_POST['myGBtext'] = str_replace("|","<!strich!>",$_POST['myGBtext']);
//Und dann noch die Zeilenumbrüche raus damit alles in einer Reihe steht
//ist kein muss, sieht aber besser aus
$_POST['myGBtext'] = str_replace("\r\n","<!umbruch!>",$_POST['myGBtext']);
$GBeintrag .= $_POST['myGBtext']."\r\n";
//Den eintrag in die Textdatei schreiben
$openfile = fopen("myGB.txt","a");
fwrite($openfile,$GBeintrag);
fclose($openfile);
}
//Hier das Gästebuch öffnen und alle Einträge einlesen
//nur einlesen wenn auch einträge vorhanden sind
if(filesize("myGB.txt")>0)
{
$openfile = fopen("myGB.txt","r");
$GB = fread($openfile,filesize("myGB.txt"));
fclose($openfile);
//Dann die Einzelnen einträge trennen
//und als Array speichern
$eintraege = explode("\r\n",$GB);
}
?>
<!--
Hier der Allgemein bekannte HTML-Teil welcher
das Aussehen der Seite und damit das des GBs bestimmt
Hier kann man nach belieben alles anpassen bis auf
Bestehen bleiben sollten jedoch die integrierten
PHP-Anweisungen welche sich zwichschen <? //und ?> befinden.
Sebstverständlich können diese natürlich an eine andere Stelle
verfrachtet werden.
//-->
<!-- KOPF DATEN //-->
<html>
<head>
<title>Mein Gästebuch</title>
<style type="text/css">
body {background-color: #FFFFFF;}
.GBtable {border: 1px solid #000000;
border-collapse: collapse;
width: 400px;}
.GBhead {background-color: #0000FF;
color: #FFFFFF;
font-weight: bold;}
.GBinput {background-color: #00FFFF;
border: 1px solid #000000;}
.GBcontent {background-color: #FFFFFF;}
</style>
</head>
<body>
<center>
<h1>Titel des Gästebuchs</h1>
<!-- EINGABE TEIL //-->
<form action="" method="POST">
<table class="GBtable">
<tr class="GBhead">
<td colspan="2">Hier ins Gästebuch eintragen</td>
</tr>
<tr>
<td>Dein Name</td>
<td><input class="GBinput" name="myGBname" size="30"></td>
</tr>
<tr>
<td>Deine Homepage</td>
<td><input class="GBinput" name="myGBhp" size="30" value="http://"></td>
</tr>
<tr>
<td>Deine Email</td>
<td><input class="GBinput" name="myGBmail" size="30"></td>
</tr>
<tr>
<td colspan="2" align="center">Deine Nachricht</td>
</tr>
<tr>
<td colspan="2" align="center"><textarea class="GBinput" cols="45" rows="10" name="myGBtext"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="submit" value="Eintragen"></td>
</tr>
</form>
</table>
<br><br>
<!-- EINTRÄGE ANZEIGEN -->
<?
//PHP-code um die Einträge anzuzeigen
//schleife nur durchlaufen wenn einträge im
//GB sind
if(filesize("myGB.txt")>0)
{
//solange einträge vorhanden sind wird eine schleife durchlaufen
//von hinten nach vorne (also neueste zuerst)
for($a=(count($eintraege)-2);$a>-1;$a--)
{
//Die einzelnen Teile des Eintrags teilen
$Eintrag = explode("|",$eintraege[$a]);
//Dann noch die Sonderstrings wie "<!umbruch!>" und "<!strich!>" wieder
//in die ursprünglichen zeichen ersetzen
$Eintrag[4] = str_replace("<!umbruch!>","\r\n",$Eintrag[4]);
$Eintrag[4] = str_replace("<!strich!>","|",$Eintrag[4]);
//und jetzt alles in tabellen ausgeben
?>
<table class="GBtable">
<tr class="GBhead">
<td>Von : <?=$Eintrag[0];?></td>
<td>am : <?=$Eintrag[3];?></td>
<td><a class="GBlink" href="mailto:<?=$Eintrag[2];?>">Email</a></td>
<td><a class="GBlink" href="<?=$Eintrag[1];?>" target="_blank">Homepage</td>
</tr>
<tr>
<td colspan="4"><?=$Eintrag[4];?></td>
</tr>
</table>
<br>
<?
}
}
?>
</center>
</body>
</html>
Gruß Jan
-
Sehr schick. Was mir erstmal auffiel: Du hast vergessen, dass GBlink zu implementieren. Aufgrunddessen wurden Links im Blau des Hintergrundes dargestellt.
Ansonsten sehr cool. Ich teste und bastel gerade mal n bissel. Mal sehen was rauskommt... ???
Gruß Spawn
-
ich weiß..nobody is perfect :-)
bastel du mal..bin aufs ergebnis gespannt..vielleicht kann man das ja dann irgendwie hier als Hilfe für die vielen "ICH BRAUCH EIN EINFACHES GÄSTEBUCH---JETZT!!!"-schreier verwenden ;-)
-
Das wäre cool. Aber von wegen "Nobody-is-perfect": Bis auf diese Kleinigkeit ist das Ding echt gut.
-
danke. anerkennung freut immer ;-)
-
kleine Anmerkung noch von mir:
Was ist, wenn zufällig 2 oder mehr Zugriffe gleichzeitig auf die Datei erfolgen? Solltest du unbedingt verhinden. Abfangen einfach mit:
...
flock($openfile,2);
fwrite($openfile,$GBeintrag);
flock($openfile,3);
...
www.php-resource.de/manual.php?p=function.flock
Mario 8)
-
Hi |
Hab mir das auch mal kurz angeschaut: nicht schlecht! :)
Hier und da hab ich den Code nochmal ein klein wenig reduziert bzw. optimiert:
<?
//Der PHP-Teil. Ohne PHP (oder einer anderen Internettauglichen
//Programmiersprache (wie z.B. Perl)) wird man kein Gästebuch zum
//Laufen bekommen.
//Script wird nur ausgeführt wenn der Benutzer auf "Eintragen" gedrückt hat
if($_POST['submit'])
{
//Alles in eine Variable hintereinander schreiben
$GBeintrag = $_POST['myGBname']."|";
$GBeintrag .= $_POST['myGBhp']."|";
$GBeintrag .= $_POST['myGBmail']."|";
$GBeintrag .= date("d.m.y")."|"; //datum muss natürlich auch mit rein
//Falls jemand in der nachricht ein | verwendet hat sollten wir das
//ersetzen, da sonst beim auslesen fehler auftauchen
$_POST['myGBtext'] = str_replace("|","<!strich!>",$_POST['myGBtext']);
//Und dann noch die Zeilenumbrüche raus damit alles in einer Reihe steht
//ist kein muss, sieht aber besser aus
$_POST['myGBtext'] = str_replace("\r\n","<!umbruch!>",$_POST['myGBtext']);
$GBeintrag .= $_POST['myGBtext']."\r\n";
//Den eintrag in die Textdatei schreiben
$openfile = fopen("myGB.txt","a");
fwrite($openfile,$GBeintrag);
flock($openfile,2);
fclose($openfile);
flock($openfile,3);
}
//Hier das Gästebuch öffnen und alle Einträge einlesen
$eintraege = @file("myGB.txt");
?>
<!--
Hier der Allgemein bekannte HTML-Teil welcher
das Aussehen der Seite und damit das des GBs bestimmt
Hier kann man nach belieben alles anpassen bis auf
Bestehen bleiben sollten jedoch die integrierten
PHP-Anweisungen welche sich zwichschen <? //und ?> befinden.
Sebstverständlich können diese natürlich an eine andere Stelle
verfrachtet werden.
//-->
<!-- KOPF DATEN //-->
<html>
<head>
<title>Mein Gästebuch</title>
<style type="text/css">
body {background-color: #FFFFFF;}
.GBtable {border: 1px solid #000000;
border-collapse: collapse;
width: 400px;}
.GBhead {background-color: #0000FF;
color: #FFFFFF;
font-weight: bold;}
.GBinput {background-color: #00FFFF;
border: 1px solid #000000;}
.GBcontent {background-color: #FFFFFF;}
a.GBlink:link, a.GBlink:visited, a.GBlink:hover, a.GBlink:active { text-decoration: none;
color: #FFFFFF; }
</style>
</head>
<body>
<center>
<h1>Titel des Gästebuchs</h1>
<!-- EINGABE TEIL //-->
<form action="" method="POST">
<table class="GBtable">
<tr class="GBhead">
<td colspan="2">Hier ins Gästebuch eintragen</td>
</tr>
<tr>
<td>Dein Name</td>
<td><input class="GBinput" name="myGBname" size="30"></td>
</tr>
<tr>
<td>Deine Homepage</td>
<td><input class="GBinput" name="myGBhp" size="30" value="http://"></td>
</tr>
<tr>
<td>Deine Email</td>
<td><input class="GBinput" name="myGBmail" size="30"></td>
</tr>
<tr>
<td colspan="2" align="center">Deine Nachricht</td>
</tr>
<tr>
<td colspan="2" align="center"><textarea class="GBinput" cols="45" rows="10" name="myGBtext"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="submit" value="Eintragen"></td>
</tr>
</form>
</table>
<br><br>
<!-- EINTRÄGE ANZEIGEN -->
<?
//PHP-code um die Einträge anzuzeigen
//solange einträge vorhanden sind wird eine schleife durchlaufen
//von hinten nach vorne (also neueste zuerst)
for($a = (count($eintraege) - 1); $a > -1; $a--)
{
//Die einzelnen Teile des Eintrags teilen
$Eintrag = explode("|",$eintraege[$a]);
//Dann noch die Sonderstrings wie "<!umbruch!>" und "<!strich!>" wieder
//in die ursprünglichen zeichen ersetzen
$Eintrag[4] = str_replace("<!umbruch!>","\r\n",$Eintrag[4]);
$Eintrag[4] = str_replace("<!strich!>","|",$Eintrag[4]);
//und jetzt alles in tabellen ausgeben
?>
<table class="GBtable">
<tr class="GBhead">
<td>Von : <?=$Eintrag[0];?></td>
<td>am : <?=$Eintrag[3];?></td>
<td><a class="GBlink" href="mailto:<?=$Eintrag[2];?>">Email</a></td>
<td><a class="GBlink" href="<?=$Eintrag[1];?>" target="_blank">Homepage</td>
</tr>
<tr>
<td colspan="4"><?=nl2br($Eintrag[4]);?></td>
</tr>
</table>
<br>
<?
}
?>
</center>
</body>
</html>
Kurz zur Erklärung:
Die Abfrage, ob die Dateigröße > 0 ist, kann man sich sparen. Wenn man (wie im jetzigen Skript) die Datei zeilenweise mit file(...) einliest, erhält man automatisch das Array mit den Einträgen, und das hat im Falle von NULL Einträgen auch die Länge NULL, weswegen die FOR-Schleife bei der Ausgabe dann auch gar nicht erst durchlaufen wird.
Die Textdatei muss zu Beginn auch nicht vorhanden sein - beim ersten Eintrag wird sie automatisch angelegt. Damit aber beim ersten Auslesen (keine Einträge vorhanden) keine Fehlermeldung kommt, wird ein "@" vor die Funktion file() geschrieben.
Bei der Ausgabe der Nachricht kam noch ein "nl2br" dazu, sonst werden ja keine Umbrüche dargestellt ;)
Würde aber sagen, dass hier ein schönes kompaktes und einfach zu implementierendes Gästebuch entstanden ist :D
greez 8)
JoSsiF
--------------
EDIT: schnell noch die Änderung von Mario mit aufgenommen :)
-
So, und jetzt auch mit einzelnen Seiten. Sieht noch nicht sonderlich gut aus, funktioniert aber erstmal.
Ich denk mal, ich bastel noch n bissel weiter.
Marios und JoSsiFs Änderungen sind auch mit drin.
Cooles Ding entstanden. Können wir fast n bissel wie stolz sein ;)
<?
//Der PHP-Teil. Ohne PHP (oder einer anderen Internettauglichen
//Programmiersprache (wie z.B. Perl)) wird man kein Gästebuch zum
//Laufen bekommen.
//Script wird nur ausgeführt wenn der Benutzer auf "Eintragen" gedrückt hat
if($_POST['submit'])
{
//Alles in eine Variable hintereinander schreiben
$GBeintrag = $_POST['myGBname']."|";
$GBeintrag .= $_POST['myGBhp']."|";
$GBeintrag .= $_POST['myGBmail']."|";
$GBeintrag .= date("d.m.y")."|"; //datum muss natürlich auch mit rein
//Falls jemand in der nachricht ein | verwendet hat sollten wir das
//ersetzen, da sonst beim auslesen fehler auftauchen
$_POST['myGBtext'] = str_replace("|","<!strich!>",$_POST['myGBtext']);
//Und dann noch die Zeilenumbrüche raus damit alles in einer Reihe steht
//ist kein muss, sieht aber besser aus
$_POST['myGBtext'] = str_replace("\r\n","<!umbruch!>",$_POST['myGBtext']);
$GBeintrag .= $_POST['myGBtext']."\r\n";
//Den eintrag in die Textdatei schreiben
$openfile = fopen("myGB.txt","a");
fwrite($openfile,$GBeintrag);
flock($openfile,2);
fclose($openfile);
flock($openfile,3);
}
//Hier das Gästebuch öffnen und alle Einträge einlesen
$eintraege = @file("myGB.txt");
//Die Variable $ppp steht für Posts-Per-Page und gibt an,
//wieviele Beiträge auf einer Seite angezeigt werden sollen
$ppp = 5;
?>
<!--
Hier der Allgemein bekannte HTML-Teil welcher
das Aussehen der Seite und damit das des GBs bestimmt
Hier kann man nach belieben alles anpassen bis auf
Bestehen bleiben sollten jedoch die integrierten
PHP-Anweisungen welche sich zwichschen <? //und ?> befinden.
Sebstverständlich können diese natürlich an eine andere Stelle
verfrachtet werden.
//-->
<!-- KOPF DATEN //-->
<html>
<head>
<title>Mein Gästebuch</title>
<style type="text/css">
body {background-color: #FFFFFF;}
.GBtable {border: 1px solid #000000;
border-collapse: collapse;
width: 400px;}
.GBhead {background-color: #0000FF;
color: #FFFFFF;
font-weight: bold;}
.GBinput {background-color: #00FFFF;
border: 1px solid #000000;}
.GBcontent {background-color: #FFFFFF;}
a.GBlink:link, a.GBlink:visited, a.GBlink:hover, a.GBlink:active { text-decoration: none;
color: #FFFFFF; }
</style>
</head>
<body>
<center>
<h1>Titel des Gästebuchs</h1>
<!-- EINGABE TEIL //-->
<form action="" method="POST">
<table class="GBtable">
<tr class="GBhead">
<td colspan="2">Hier ins Gästebuch eintragen</td>
</tr>
<tr>
<td>Dein Name</td>
<td><input class="GBinput" name="myGBname" size="30"></td>
</tr>
<tr>
<td>Deine Homepage</td>
<td><input class="GBinput" name="myGBhp" size="30" value="http://"></td>
</tr>
<tr>
<td>Deine Email</td>
<td><input class="GBinput" name="myGBmail" size="30"></td>
</tr>
<tr>
<td colspan="2" align="center">Deine Nachricht</td>
</tr>
<tr>
<td colspan="2" align="center"><textarea class="GBinput" cols="45" rows="10" name="myGBtext"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="submit" value="Eintragen"></td>
</tr>
</form>
</table>
<br><br>
<!-- EINTRÄGE ANZEIGEN -->
<?
//PHP-code um die Einträge anzuzeigen
//solange einträge vorhanden sind wird eine schleife durchlaufen
//von hinten nach vorne (also neueste zuerst)
$start = (count($eintraege)-2) - $ppp*$page;
$stop = (count($eintraege)-2) - $ppp*$page - $ppp + 1;
if($stop<0) $stop = 0;
for($a = $start; $a >= $stop; $a--)
{
//Die einzelnen Teile des Eintrags teilen
$Eintrag = explode("|",$eintraege[$a]);
//Dann noch die Sonderstrings wie "<!umbruch!>" und "<!strich!>" wieder
//in die ursprünglichen zeichen ersetzen
$Eintrag[4] = str_replace("<!umbruch!>","\r\n",$Eintrag[4]);
$Eintrag[4] = str_replace("<!strich!>","|",$Eintrag[4]);
//und jetzt alles in tabellen ausgeben
?>
<table class="GBtable">
<tr class="GBhead">
<td>Von : <?=$Eintrag[0];?></td>
<td>am : <?=$Eintrag[3];?></td>
<td><a class="GBlink" href="mailto:<?=$Eintrag[2];?>">Email</a></td>
<td><a class="GBlink" href="<?=$Eintrag[1];?>" target="_blank">Homepage</td>
</tr>
<tr>
<td colspan="4"><?=nl2br($Eintrag[4]);?></td>
</tr>
</table>
<br>
<?
}
//$max gibt die Anzahl der Einträge an
$max = count($eintraege)-1;
echo("<p align='center'>");
//ist man nicht auf Seite 0 kann man logischerweise eine Seite zurückgehen
if(($max > $ppp)&&($page>0)) echo("<a href='index.php?page=".($page-1)."'>vorherige Seite</a>");
echo(" Seite ".$page." ");
//und ist die Anzahl der Einträge größer, als die, die von der aktuellen
//Seite dargestellt wird, kann man eine Seite vorgehen
if(($max > $ppp)&&($max>($page+1)*$ppp)) echo("<a href='index.php?page=".($page+1)."'>nächste Seite</a>");
echo("</p>");
?>
</center>
</body>
</html>
Hier noch n paar Anmerkungen:
In Zeile 39 wird durch $ppp (posts-per-page ;D ) gesagt, wieviele Posts pro Seite angezeigt werden.
Und die Datei muss index.php heissen, wegens den Zeilen 151 und 155 mit:
echo("<a href='index.php?page=".($page+1)."'>nächste Seite</a>");
Bin aber auch für Verbesserungen und Weiterentwicklungen offen.
Gruß Spawn
PS: flock hat gerade einen Fehler gebracht:
Warning: flock(): 3 is not a valid stream resource in C:\Programme\Apachefriends\xampp\htdocs\xampp\gb2\index2.php on line 30
What the....?!
-
Funzt glaub ich noch nich so supi mit den Seiten, aber ich schau ma rein...
Die Datei muss übrigens nicht zwingend index.php heißen. Du kannst den Link auch mittels der Superglobal $PHP_SELF setzen (mach ich gleich noch mit rein).
greez 8)
JoSsiF
-
Ups... die Sache mit dem flock() hab ich versaut :-[
Die flock()-Befehle sind in der Hitze des Gefechts etwas zu tief gerutscht ;)
-
So, hier ein abgeänderter Entwurf:
<?
//Der PHP-Teil. Ohne PHP (oder einer anderen Internettauglichen
//Programmiersprache (wie z.B. Perl)) wird man kein Gästebuch zum
//Laufen bekommen.
// $page initialisieren, falls nicht gesetzt
if (!$_REQUEST['page'])
{
$page = 0;
}
else
{
$page = $_REQUEST['page'];
}
//Script wird nur ausgeführt wenn der Benutzer auf "Eintragen" gedrückt hat
if($_POST['submit'])
{
//Alles in eine Variable hintereinander schreiben
$GBeintrag = $_POST['myGBname']."|";
$GBeintrag .= $_POST['myGBhp']."|";
$GBeintrag .= $_POST['myGBmail']."|";
$GBeintrag .= date("d.m.y")."|"; //datum muss natürlich auch mit rein
//Falls jemand in der nachricht ein | verwendet hat sollten wir das
//ersetzen, da sonst beim auslesen fehler auftauchen
$_POST['myGBtext'] = str_replace("|","<!strich!>",$_POST['myGBtext']);
//Und dann noch die Zeilenumbrüche raus damit alles in einer Reihe steht
//ist kein muss, sieht aber besser aus
$_POST['myGBtext'] = str_replace("\r\n","<!umbruch!>",$_POST['myGBtext']);
$GBeintrag .= $_POST['myGBtext']."\r\n";
//Den eintrag in die Textdatei schreiben
$openfile = fopen("myGB.txt","a");
flock($openfile,2);
fwrite($openfile,$GBeintrag);
flock($openfile,3);
fclose($openfile);
}
//Hier das Gästebuch öffnen und alle Einträge einlesen
$eintraege = @file("myGB.txt");
//Die Variable $ppp steht für Posts-Per-Page und gibt an,
//wieviele Beiträge auf einer Seite angezeigt werden sollen
$ppp = 1;
?>
<!--
Hier der Allgemein bekannte HTML-Teil welcher
das Aussehen der Seite und damit das des GBs bestimmt
Hier kann man nach belieben alles anpassen bis auf
Bestehen bleiben sollten jedoch die integrierten
PHP-Anweisungen welche sich zwichschen <? //und ?> befinden.
Sebstverständlich können diese natürlich an eine andere Stelle
verfrachtet werden.
//-->
<!-- KOPF DATEN //-->
<html>
<head>
<title>Mein Gästebuch</title>
<style type="text/css">
body {background-color: #FFFFFF;}
.GBtable {border: 1px solid #000000;
border-collapse: collapse;
width: 400px;}
.GBhead {background-color: #0000FF;
color: #FFFFFF;
font-weight: bold;}
.GBinput {background-color: #00FFFF;
border: 1px solid #000000;}
.GBcontent {background-color: #FFFFFF;}
a.GBlink:link, a.GBlink:visited, a.GBlink:hover, a.GBlink:active { text-decoration: none;
color: #FFFFFF; }
</style>
</head>
<body>
<center>
<h1>Titel des Gästebuchs</h1>
<!-- EINGABE TEIL //-->
<form action="" method="POST">
<table class="GBtable">
<tr class="GBhead">
<td colspan="2">Hier ins Gästebuch eintragen</td>
</tr>
<tr>
<td>Dein Name</td>
<td><input class="GBinput" name="myGBname" size="30"></td>
</tr>
<tr>
<td>Deine Homepage</td>
<td><input class="GBinput" name="myGBhp" size="30" value="http://"></td>
</tr>
<tr>
<td>Deine Email</td>
<td><input class="GBinput" name="myGBmail" size="30"></td>
</tr>
<tr>
<td colspan="2" align="center">Deine Nachricht</td>
</tr>
<tr>
<td colspan="2" align="center"><textarea class="GBinput" cols="45" rows="10" name="myGBtext"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="submit" value="Eintragen"></td>
</tr>
</form>
</table>
<br><br>
<!-- EINTRÄGE ANZEIGEN -->
<?
//PHP-code um die Einträge anzuzeigen
//solange einträge vorhanden sind wird eine schleife durchlaufen
//von hinten nach vorne (also neueste zuerst)
$start = (count($eintraege)-1) - $ppp*$page;
$stop = (count($eintraege)-1) - $ppp*$page - $ppp + 1;
if($stop<0) $stop = 0;
for($a = $start; $a >= $stop; $a--)
{
//Die einzelnen Teile des Eintrags teilen
$Eintrag = explode("|",$eintraege[$a]);
//Dann noch die Sonderstrings wie "<!umbruch!>" und "<!strich!>" wieder
//in die ursprünglichen zeichen ersetzen
$Eintrag[4] = str_replace("<!umbruch!>","\r\n",$Eintrag[4]);
$Eintrag[4] = str_replace("<!strich!>","|",$Eintrag[4]);
//und jetzt alles in tabellen ausgeben
?>
<table class="GBtable">
<tr class="GBhead">
<td>Von : <?=$Eintrag[0];?></td>
<td>am : <?=$Eintrag[3];?></td>
<td><a class="GBlink" href="mailto:<?=$Eintrag[2];?>">Email</a></td>
<td><a class="GBlink" href="<?=$Eintrag[1];?>" target="_blank">Homepage</td>
</tr>
<tr>
<td colspan="4"><?=nl2br($Eintrag[4]);?></td>
</tr>
</table>
<br>
<?
}
//$max gibt die Anzahl der Einträge an
$max = count($eintraege);
echo("<p align='center'>");
//ist man nicht auf Seite 0 kann man logischerweise eine Seite zurückgehen
echo("<a href='$PHP_SELF?page=0'>erste Seite</a> ");
if(($max > $ppp)&&($page>0)) echo("<a href='$PHP_SELF?page=".($page-1)."'>vorherige Seite</a>");
echo(" Seite ".($page + 1)." ");
//und ist die Anzahl der Einträge größer, als die, die von der aktuellen
//Seite dargestellt wird, kann man eine Seite vorgehen
if(($max > $ppp)&&($max>($page+1)*$ppp)) echo("<a href='$PHP_SELF?page=".($page+1)."'>nächste Seite</a>");
echo(" <a href='$PHP_SELF?page=".(ceil($max / $ppp) - 1)."'>letzte Seite</a>");
echo("</p>");
?>
</center>
</body>
</html>
-
saubere arbeit jungs *g*
der informationshalber könnte man das hier :
Es sind <b><?=count($eintraege);?></b> Einträge im Gästebuch;
noch an geeigneter stelle unterbringen.
-
Letztendlich müsste man hier sowieso noch einiges bauen, z.B. wäre es zweckmäßig, nicht nur auf die jeweils vorherige und nächste Seite zu verlinken, sondern auch den direkten Link zu bestimmten Seiten anzubieten.
Wichtig wäre evtl. noch, ein paar Abfragen für Pflichtangaben (z.B. Name) einzubauen, dann die Mailadresse mit regulären Ausdrücken auf Gültigkeit zu checken usw.
Aber so gesehen findet man da nie ein Ende. Denke mal als Basis isses OK!
greez 8)
JoSsiF
-
Edit: ?! Da hats mir doch gerade den Post in der Mitte abgeschnitten...nochmal:Puh, okay. Waren paar Fehler bei der Seiten-Sache. Sollten jetzt raus sein. Die restlichen Vorschläge sind auch mit aufgenommen. And there it is:
<?
//Der PHP-Teil. Ohne PHP (oder einer anderen Internettauglichen
//Programmiersprache (wie z.B. Perl)) wird man kein Gästebuch zum
//Laufen bekommen.
// $page initialisieren, falls nicht gesetzt
if (!$_REQUEST['page'])
{
$page = 1;
}
else
{
$page = $_REQUEST['page'];
}
//Script wird nur ausgeführt wenn der Benutzer auf "Eintragen" gedrückt hat
if($_POST['submit'])
{
//Alles in eine Variable hintereinander schreiben
$GBeintrag = $_POST['myGBname']."|";
$GBeintrag .= $_POST['myGBhp']."|";
$GBeintrag .= $_POST['myGBmail']."|";
$GBeintrag .= date("d.m.y")."|"; //datum muss natürlich auch mit rein
//Falls jemand in der nachricht ein | verwendet hat sollten wir das
//ersetzen, da sonst beim auslesen fehler auftauchen
$_POST['myGBtext'] = str_replace("|","<!strich!>",$_POST['myGBtext']);
//Und dann noch die Zeilenumbrüche raus damit alles in einer Reihe steht
//ist kein muss, sieht aber besser aus
$_POST['myGBtext'] = str_replace("\r\n","<!umbruch!>",$_POST['myGBtext']);
$GBeintrag .= $_POST['myGBtext']."\r\n";
//Den eintrag in die Textdatei schreiben
$openfile = fopen("myGB.txt","a");
flock($openfile,2);
fwrite($openfile,$GBeintrag);
flock($openfile,3);
fclose($openfile);
}
//Hier das Gästebuch öffnen und alle Einträge einlesen
$eintraege = @file("myGB.txt");
//Die Variable $ppp steht für Posts-Per-Page und gibt an,
//wieviele Beiträge auf einer Seite angezeigt werden sollen
$ppp = 5;
?>
<!--
Hier der Allgemein bekannte HTML-Teil welcher
das Aussehen der Seite und damit das des GBs bestimmt
Hier kann man nach belieben alles anpassen bis auf
Bestehen bleiben sollten jedoch die integrierten
PHP-Anweisungen welche sich zwichschen <? //und ?> befinden.
Sebstverständlich können diese natürlich an eine andere Stelle
verfrachtet werden.
//-->
<!-- KOPF DATEN //-->
<html>
<head>
<title>Mein Gästebuch</title>
<style type="text/css">
body {background-color: #FFFFFF;}
.GBtable {border: 1px solid #000000;
border-collapse: collapse;
width: 400px;}
.GBhead {background-color: #0000FF;
color: #FFFFFF;
font-weight: bold;}
.GBinput {background-color: #00FFFF;
border: 1px solid #000000;}
.GBcontent {background-color: #FFFFFF;}
a.GBlink:link, a.GBlink:visited, a.GBlink:hover, a.GBlink:active { text-decoration: none;
color: #FFFFFF; }
</style>
</head>
<body>
<center>
<h1>Titel des Gästebuchs</h1>
<!-- EINGABE TEIL //-->
<form action="" method="POST">
<table class="GBtable">
<tr class="GBhead">
<td colspan="2">Hier ins Gästebuch eintragen</td>
</tr>
<tr>
<td>Dein Name</td>
<td><input class="GBinput" name="myGBname" size="30"></td>
</tr>
<tr>
<td>Deine Homepage</td>
<td><input class="GBinput" name="myGBhp" size="30" value="http://"></td>
</tr>
<tr>
<td>Deine Email</td>
<td><input class="GBinput" name="myGBmail" size="30"></td>
</tr>
<tr>
<td colspan="2" align="center">Deine Nachricht</td>
</tr>
<tr>
<td colspan="2" align="center"><textarea class="GBinput" cols="45" rows="10" name="myGBtext"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="submit" value="Eintragen"></td>
</tr>
</form>
</table>
<br><br>
<!-- EINTRÄGE ANZEIGEN -->
<?
//PHP-code um die Einträge anzuzeigen
//solange einträge vorhanden sind wird eine schleife durchlaufen
//von hinten nach vorne (also neueste zuerst)
$start = (count($eintraege)-1) - $ppp*($page-1);
$stop = (count($eintraege)-1) - $ppp*($page-1) - $ppp + 1;
if($start>(count($eintraege)-1)) $start = count($eintraege)-1;
if($stop<0) $stop = 0;
for($a = $start; $a >= $stop; $a--)
{
//Die einzelnen Teile des Eintrags teilen
$Eintrag = explode("|",$eintraege[$a]);
//Dann noch die Sonderstrings wie "<!umbruch!>" und "<!strich!>" wieder
//in die ursprünglichen zeichen ersetzen
$Eintrag[4] = str_replace("<!umbruch!>","\r\n",$Eintrag[4]);
$Eintrag[4] = str_replace("<!strich!>","|",$Eintrag[4]);
//und jetzt alles in tabellen ausgeben
?>
<table class="GBtable">
<tr class="GBhead">
<td>Von : <?=$Eintrag[0];?></td>
<td>am : <?=$Eintrag[3];?></td>
<td><a class="GBlink" href="mailto:<?=$Eintrag[2];?>">Email</a></td>
<td><a class="GBlink" href="<?=$Eintrag[1];?>" target="_blank">Homepage</td>
</tr>
<tr>
<td colspan="4"><?=nl2br($Eintrag[4]);?></td>
</tr>
</table>
<br>
<?
}
//$max gibt die Anzahl der Einträge an
$max = count($eintraege);
//$jetzt noch fix die daraus resultierenden Seiten berechnen
if($max == 0) $pages = 1; else $pages = intval(($max-1)/$ppp) + 1;
echo("<p align='center'>");
if($page>1)
{
echo("<a href='$PHP_SELF?page=1'>|< </a>");
echo("<a href='$PHP_SELF?page=".($page-1)."'>< </a>");
}
for($i = 1; $i<=$pages; $i++)
{
if($i == $page) echo($i." ");
else echo("<a href='$PHP_SELF?page=".$i."'>".$i." </a>");
}
if($page<$pages)
{
echo("<a href='$PHP_SELF?page=".($page+1)."'>> </a>");
echo("<a href='$PHP_SELF?page=".$pages."'>>|</a>");
}
echo("<br>Es sind<b> ".$max."</b> Einträge im Gästebuch");
echo("</p>");
?>
</center>
</body>
</html>Die "Navigation" sieht noch etwas plump aus, aber sollte funktionieren.
Wie Jan schon sagte: Wirklick saubere Arbeit. Was ein Forum so an einem Tag auf die Beine stellen kann wenn alle zusammenarbeiten ist echt beeindruckend.
Respekt!!!
Gruß Spawn
-
fast ;-)..aber das problem hatte ich auch bei erstem mal das das forum mir die hälfte des codes abgeschnitten hat...
-
Also ich muss sagen die Navigation sieht gar net plump aus. Paar Styles draufgelegt, und das passt.
Der "Fehler", der vorher drin war, bezog sich nur auf den Parameter $page, der bei NULL statt bei EINS begonnen hat. Das wurde dann bei den Ausgaben durch Addition von 1 ausgebügelt, sodass das keine Auswirkung auf die Funktionalität hatte. Aber so isses natürlich rund! ;)
greez 8)
JoSsiF
-
Wen's interessiert: Das Gästebuch in Betrieb:
http://www.mg80s.de/index.php?action=kontakt
Bis auf das Design habe ich alles so gelassen, nur noch die |<, < "Buttons" etwas verändert, so dass sie immer angezeigt werden und zB auf Seite 1 eben nur kein Link sind.
Zumal es jetzt auf meiner Seite ist, bin ich natürlich auch interessiert an Überprüfung auf Fehler und ein kleines Admin-Tool, dass Einträge löschen/bearbeiten kann.
Setze mich also demnächst noch mal ran.
Gruß Spawn
-
Ok, ich will jetzt auch mal meinen Senf dazugeben ;)
War ja ne ganz schöne Arbeit die ihr euch da gemacht habt, Respekt :)
Ich habe das ganze mal (stylisch) überarbeitet und ein bisschen umgestellt. So ist der "Eintragen" Teil jetzt unter der Übersicht der Einträge und ich habe noch ne "Überschrift" Funktion eingefügt.. Der CSS-Teil (Formatierung der Links) ist auch ein wenig abgeändert :
<?
//Der PHP-Teil. Ohne PHP (oder einer anderen Internettauglichen
//Programmiersprache (wie z.B. Perl)) wird man kein Gästebuch zum
//Laufen bekommen.
// $page initialisieren, falls nicht gesetzt
if (!$_REQUEST['page'])
{
$page = 1;
}
else
{
$page = $_REQUEST['page'];
}
//Script wird nur ausgeführt wenn der Benutzer auf "Eintragen" gedrückt hat
if($_POST['submit'])
{
//Alles in eine Variable hintereinander schreiben
$GBeintrag = $_POST['myGBueberschrift']."|";
$GBeintrag .= $_POST['myGBname']."|";
$GBeintrag .= $_POST['myGBhp']."|";
$GBeintrag .= $_POST['myGBmail']."|";
$GBeintrag .= date("d.m.y")."|"; //datum muss natürlich auch mit rein
//Falls jemand in der nachricht ein | verwendet hat sollten wir das
//ersetzen, da sonst beim auslesen fehler auftauchen
$_POST['myGBtext'] = str_replace("|","<!strich!>",$_POST['myGBtext']);
//Und dann noch die Zeilenumbrüche raus damit alles in einer Reihe steht
//ist kein muss, sieht aber besser aus
$_POST['myGBtext'] = str_replace("\r\n","<!umbruch!>",$_POST['myGBtext']);
$GBeintrag .= $_POST['myGBtext']."\r\n";
//Den eintrag in die Textdatei schreiben
$openfile = fopen("myGB.txt","a");
flock($openfile,2);
fwrite($openfile,$GBeintrag);
flock($openfile,3);
fclose($openfile);
}
//Hier das Gästebuch öffnen und alle Einträge einlesen
$eintraege = @file("myGB.txt");
//Die Variable $ppp steht für Posts-Per-Page und gibt an,
//wieviele Beiträge auf einer Seite angezeigt werden sollen
$ppp = 5;
?>
<!--
Hier der Allgemein bekannte HTML-Teil welcher
das Aussehen der Seite und damit das des GBs bestimmt
Hier kann man nach belieben alles anpassen bis auf
Bestehen bleiben sollten jedoch die integrierten
PHP-Anweisungen welche sich zwichschen <? //und ?> befinden.
Sebstverständlich können diese natürlich an eine andere Stelle
verfrachtet werden.
//-->
<!-- KOPF DATEN //-->
<html>
<head>
<title>Mein Gästebuch</title>
<style type="text/css">
body {background-color: #FFFFFF;}
.GBtable {border: 1px solid #000000;
border-collapse: collapse;
width: 400px;}
.GBhead {background-color: #0000FF;
color: #FFFFFF;
}
.GBinput {background-color: #00FFFF;
border: 1px solid #000000;}
.GBcontent {background-color: #FFFFFF;}
a.GBlink:link { text-deoration: none; color: #FFFFFF; }
a.GBlink:visited { text-deoration: none; color: #333333; }
a.GBlink:hover { text-decoration: underline; color: #999999; }
a.GBlink:active { text-decoration: overline; color: #FFFFFF; }
</style>
</head>
<body>
<center>
<h1><span style="font-family: verdana">Titel des Gästebuchs</span></h1>
<!-- EINTRÄGE ANZEIGEN -->
<?
//PHP-code um die Einträge anzuzeigen
//solange einträge vorhanden sind wird eine schleife durchlaufen
//von hinten nach vorne (also neueste zuerst)
$start = (count($eintraege)-1) - $ppp*($page-1);
$stop = (count($eintraege)-1) - $ppp*($page-1) - $ppp + 1;
if($start>(count($eintraege)-1)) $start = count($eintraege)-1;
if($stop<0) $stop = 0;
for($a = $start; $a >= $stop; $a--)
{
//Die einzelnen Teile des Eintrags teilen
$Eintrag = explode("|",$eintraege[$a]);
//Dann noch die Sonderstrings wie "<!umbruch!>" und "<!strich!>" wieder
//in die ursprünglichen zeichen ersetzen
$Eintrag[4] = str_replace("<!umbruch!>","\r\n",$Eintrag[4]);
$Eintrag[4] = str_replace("<!strich!>","|",$Eintrag[4]);
//und jetzt alles in tabellen ausgeben
?>
<span style="font-family: arial;"><table class="GBtable" style="width: 90%;">
<tr class="GBhead">
<td><small>- <span style="font-family: verdana;"><b><?=$Eintrag[0];?></span></b> - </small></br></td>
<td><small>- von : <span style="font-family: verdana;"><b><?=$Eintrag[1];?></b></span> - </small></td>
<td><small>- eingetragen am : <b><span style="font-family: verdana;"><?=$Eintrag[4];?></b></span> - </small></td>
<td><small>- <span style="font-family: verdana;"><a class="GBlink" href="mailto:<?=$Eintrag[2];?>"><i>E-Mail</i></a></span> - </small></td>
<td><small>- <span style="font-family: verdana;"><a class="GBlink" href="<?=$Eintrag[3];?>" target="_blank"><i>Homepage</i></a></span> - </small></td>
</tr>
<tr>
<td colspan="4"><?=nl2br($Eintrag[5]);?></td>
</tr>
</table>
<br>
<?
}
//$max gibt die Anzahl der Einträge an
$max = count($eintraege);
//$jetzt noch fix die daraus resultierenden Seiten berechnen
if($max == 0) $pages = 1; else $pages = intval(($max-1)/$ppp) + 1;
echo("<p align='center'>");
if($page>1)
{
echo("<a href='$PHP_SELF?page=1'>|< </a>");
echo("<a href='$PHP_SELF?page=".($page-1)."'>< </a>");
}
for($i = 1; $i<=$pages; $i++)
{
if($i == $page) echo($i." ");
else echo("<a href='$PHP_SELF?page=".$i."'>".$i." </a>");
}
if($page<$pages)
{
echo("<a href='$PHP_SELF?page=".($page+1)."'>> </a>");
echo("<a href='$PHP_SELF?page=".$pages."'>>|</a>");
}
echo("<br>Es sind<b> ".$max."</b> Einträge im Gästebuch");
echo("</p>");
?>
<!-- EINGABE TEIL //-->
<form action="" method="POST">
<span style="font-family: arial;"><table class="GBtable">
<tr class="GBhead">
<td colspan="2">Hier ins Gästebuch eintragen</td>
</tr>
<td>Überschrift</td>
<td><input class="GBinput" name="myGBueberschrift" size="30"></td>
</tr><tr>
<td>Dein Name</td>
<td><input class="GBinput" name="myGBname" size="30"></td>
</tr>
<tr>
<tr>
<td>Deine Homepage</td>
<td><input class="GBinput" name="myGBhp" size="30" value="http://"></td>
</tr>
<tr>
<td>Deine Email</td>
<td><input class="GBinput" name="myGBmail" size="30"></td>
</tr>
<tr>
<td colspan="2" align="center">Deine Nachricht</td>
</tr>
<tr>
<td colspan="2" align="center"><textarea class="GBinput" cols="45" rows="10" name="myGBtext"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="submit" value="Eintragen"></td>
</tr>
</form>
</table>
<br><br></span>
</center>
</body>
</html>
Das ganze kann man nochmal im "Original" (fast nicht abgeändert bis auf das oben erwähnte) anguggen :
http://bwddtclan.bw.funpic.de/Passwort/index.php?page=1
-
Hm naja, über den Sinn des Formulars unterhalb der Einträge lässt sich streiten.
Ich denke, wenn jetzt so 10-15 Einträge pro Seite angezeigt werden, dann wird der Besucher erstmal fleißig suchen, wo denn die Eingabemaske ist.
Aber das kann der Webmaster ja auch selber ohne großen Aufwand abändern - je nach Geschmack ;)
greez 8)
JoSsiF
-
Ich wollte jetzt gerade noch eine kleine Sache hinzufügen und zwar ein Kontaktformular.. Also kein "mailto:...." Link, sondern direkt ein Link auf so ein Formular (http://bwddtclan.bw.funpic.de/Passwort/kontakt.php) (z.B.), sodass man den Autor direkt anschreiben kann.. Allerdings wurde ich ein wenig verwirrt, als ich das versucht habe...
Zunächst einmal, ließe sich das ja theoretisch ganz einfach lösen, die Variable für die angegebene email Adresse lautet ja wohl $Eintrag[3]..
Ich weiß jetzt aber nicht so genau, wie man das jetzt einbauen soll.. Also ich habe da mal was probiert (PROBIERT, hab null Peil von PHP!)
Eintrag in index.php :
<td><small>- <span style="font-family: verdana;"><form action="kontakt.php" method="post"><a class="GBlink" href="kontakt.php"<i>E-Mail</i></a><input type="hidden" name="empfemail01" value="<?=$Eintrag[3];?>"></span></form> - </small></td>
Eintrag in kontakt.php
<input type="hidden" name="empfemail02" value="<?$daten .= "Name: ".$_REQUEST['empfemail01']."\r\n";?>"</td>
<?php
#Datei mail.php
$daten .= "Name: ".$_REQUEST['empfemail02']."\r\n";
$daten .= "Name: ".$_REQUEST['absender_name']."\r\n";
$daten .= "alter: ".$_REQUEST['absalter']."\r\n";
$daten .= "email: ".$_REQUEST['absmail']."\r\n";
$daten .= "Homepage: ".$_REQUEST['absender_hp']."\r\n";
$daten .= "Mitteilung: ".$_REQUEST['mitteilung']."\r\n";
mail(".$_REQUEST['empfemail02']."\r\n","Kontaktformular", $daten,"From: ".$_REQUEST['absmail']."\r\n" . "Reply-To: ".$_REQUEST['absmail']."\r\n" ."X-Mailer: PHP/" . phpversion());
echo '<meta http-equiv="refresh" content="0; URL=kontakt.php">';
?>
Ich nehme jetzt an, dass das falsch ist (ich nehms nicht nur an, ich weiß es).. Wie gesagt, habe keine Ahnung von PHP..
Könnt ihr vielleicht mal drüberguggen ? Wäre wirklich sehr nett
:)
-
Hi |
Also der erste Teil geht so nicht. Weil wenn du auf den Link klickst, wird ja das Formular nicht abgeschickt (es sei denn du löst das per JavaScript, was sich aber vermeiden lässt).
Hänge doch einfach die Mailadresse als Parameter an die URL an, und zwar so:
<a href="kontakt.php?empfemail02=<?="urlencode($Eintrag[3])?>">Link</a>
Die Mailadresse muss codiert werden, weil sie per GET (also in der URL) übertragen wird.
Den Wert des übergebenen Parameters dann wieder im Empgansscript mit urldecode() decodieren.
Der Rest sieht auf den ersten Blick funktionstüchtig aus, wobei ich's net probiert hab :)
greez 8)
JoSsiF
-
Ok also um mal ein ganz plumpes Problem aufzuarbeiten wie löse ich das Problem mit dem Zeilenumbruch! Sorry bei euren codes kann ich nix mehr erkennen und hab da auch nich die lust das nachzuvollziehen wie ihr des gelöst habt, abgesehen davon bin ich da zu blöd für dat ganze php zeugs!
Also wie krieg ich ganz einfach und simpel die zeilenumbrüche in den griff???
PS: find ich ja mal geil dass des so ne gigantische Foren diskussion ergab *loool*
Gruß Syrus
-
Ähm... jetzt muss ich aber nochmal dumm ranfragen: welches Problem mit den Zeilenumbrüchen? Funzt doch alles ;)
-
Bei euch ich hab den Thread hier eröffnet bin dann aber ausgestiegen weil mir das hier zu hoch ist!
Also in meiner schreib.php steht folgendes:
<?php
echo"<html><head><title>Start</title></head><body>";
echo"<form method='GET' action='eintragen.php'>";
echo"<p> </p>";
echo"<p> </p>";
echo"<p><font color='#FFFFFF' style='font-size: 16pt'>Name:</font></p>";
echo"<p><font color='#FFFFFF'>";
echo"<input type='input' name='namen' value=''></font></p>";
echo"<p><font color='#FFFFFF' style='font-size: 16pt'>email: </font></p>";
echo"<p><font color='#FFFFFF'>";
echo"<input type='input' name='mail' value=''>";
echo" </font></p>";
echo"<p align='left'>";
echo"<font color='#FFFFFF'><span style='font-size: 16pt'>Ihr Text:</span></font></p>";
echo"<p align='left'>";
echo"<textarea name='text' rows='12' cols='107'>";
echo"</textarea><br><br>";
echo"</p>";
echo"<tr><td> </td><td><input type='submit' value='Abschicken'></td></tr>";
echo"</body>";
echo"</html>";
?>
in der eintragen.php das:
<?
$auslesen=fopen("tabelle.txt","a");
fwrite($auslesen,$namen."\n");
fwrite($auslesen,$mail."\n");
fwrite($auslesen,$text."\n");
fclose($auslesen);
?>
Mal ne andere Frage (hat hier überhaupt nichts mit dem Thread zu tun) wie alt seid ihr bzw. was arbeitet ihr studiert ihr??? Interessiert mich nur so weil man halt schon merkt, dass man wirklich überhaupt nicht mitreden kann!!!
-
...und genau weil du diesen Thread eröffnet hast (und weil sich anderweitig Anfragen gehäuft haben), haben wir in einer lustigen Gemeinschaftsarbeit ein funktionierendes Gästebuch gebaut.
Kopiere dir doch einfach eines der letzten umfangreichen Quellcode-Listings, und du hast ein top funktionierendes Gästebuch, was du nur noch in Sachen Stylesheets anpassen musst.
greez + und eine geruhsame Nacht 8)
JoSsiF
-
Jo, ist doch ein super Script geworden. Sollte man überlegen, ob man das nicht (nur den Quelltext und bissel Kommentar) hier als PIN festmachen kann oder irgendwo in der Rubrik Webmaster mit aufnimmt. Wäre Schade, wenns immer weiter nach hinten rutscht um irgenwann rauszufliegen :o ;)
Mal gucken, wie sich die Webmaster hier dazu äußern :)
Mario 8)
-
Also mir gehts halt ums verstehen ich würde das halt gerne auch eventuell auf andere Scripte anwenden können! Klar könnte ich mir das Ding hier einfach schnell kopieren, aber ich will ja was lernen bzw. etwas nachvollziehen können!!! Es geht ja nur um den Zeilenumbruch!!!
Gruß Syrus
-
Das entstandene Gästebuch ist eigentlich relativ gut auskommentiert, aber vielleicht können wir auch da nochmal nachlegen. Das sollte dann schonmal ein guter Anfang zum Nachvollziehen und Lernen sein ;)
Wenn dir das mit dem Zeilenumbruch jetzt schlaflose Nächte bereitet, dann erkläre uns nochmal bitte genau, worum's geht. Vielleicht können wir dir die Lösung deines Problems anhand des neuen Skripts verständlich machen.
greez 8)
JoSsiF
-
Zeileumbrüche in php machste entweder mit "\n" und wenn das nicht funktioniert mit "\r\n"...ich will jetzt nix falsches sagen, aber soweit ich weiß hängt das damit zusammt was auf deinem server läuft (windows oder unix) nur welchers system jetzt welchen umbruch unterstützt und ob unix beide unterstützt kann ich jetzt nicht sagen.
-
Gut, dass du es sagst, Jan! Schau nochmal ins Skript rein, dort wo die Ersetzungen gemacht werden. Fällt dir was auf?
Wir sollten \r\n, \r und \n getrennt behandeln, damit das auch auf jeder Plattform funzt.
greez 8)
JoSsiF
-
Das dachte ich mir auch schon und außerdem bestätigt das schonmal das ich nix falsches gesagt hab ;-)
wir sollten sowieso mal aus dem code-chaos das richtig script raussuchen und irgendwo hinpacken wo es dann jeder finden kann der ein Gästebuch sucht. und btw sollte jeder der was dran gemacht hat sich inklusive der www.computerhilfen.de URL im script verewigen *g*
-
Mein Vorschlag dazu:
Als Basis für weitere Arbeiten nehmen wir das Listing aus Antwort #34 oder aus Antwort #38 (wobei #38 die Überarbeitung vom ollen Schwoebel is, wo das Formular unterhalb der Einträge generiert wird - würde gerne mal eure Meinungen dazu hören).
Daran müsste dann mindestens noch folgendes gemacht werden:
- das Absatzproblem muss noch sauber gelöst werden
- der Quellcode nochmal einer letzten Säuberung unterzogen werden
- den Quellcode vollständig auskommentieren
- alles, was mit Konfiguration zu tun hat, in einem eigenen Block (z.B. zu Beginn des Skripts) definieren
- Hinweise auf computerhilfen.de und die Bearbeiter reinhacken *g*
- die Admins davon überzeugen, dass das Skript irgendwo zentral als Muster abgelegt wird ;)
Bitte eure Ergänzungs- und/oder Änderungsvorschläge noch beisteuern.
greez 8)
JoSsiF
-
- der Quellcode nochmal einer letzten Säuberung unterzogen werden
genau. ich hab damals extra zur ausgabe der HTML-teile auf die ausgabe durch echo verzichtet um php von html zu trennen. totzdem hat sich unten wieder jede menge Echo-Krempel eingeschlischen.
ansonsten fällt mir jetzt kein weitere punkt ein, außer vielleicht das sich 1 (in worten : EINER) das script vornimmt und die entsprechenden änderungen macht, sonst haben wir nachher wieder 5 verschiedene ;-)
Zusatz: um deine Frage zu beantworten, nein, die eingabemaske unterhalb der einträge find ich nicht so gut.
-
OK folgendes:
Wenn also keiner etwas Grundlegendes dagegen hat, dann nehmen wir jetzt das Listing aus Antwort #34 als Basis. Ich würde mir das Script nochmal vornehmen und die besagten Arbeiten durchführen.
Damit jeder der Beteiligten dann nochmal drüberschauen kann, ist es vielleicht sinnvoll, den jeweiligen Zwischenstand per PM zu verschicken, damit hier der Thread nicht unnötig zugeballert wird.
@Jan: könntest du dir evtl. was einfallen lassen bzgl. Autorenhinweise etc.? Also mal was schreiben und mir zuschicken, dann knall ich das mit ins Script rein.
greez 8)
JoSsiF
-
Noch ne klitzekleine Frage :
Habe das mit dem Mailer jetzt hinbekommen, schaut dann so aus, der Code :
<td><small>- <span style="font-family: verdana;">
<a href="kontakt.php?empfemail02='<?=urlencode($Eintrag[3])?>'"><i>E-Mail</i></a>
</span> - </small></td>
Funzt auch soweit.. In der "kontakt.php" funktionert auhc alles... Nur komm ich jetzt nicht ganz weiter in "mail.php".. Anstatt der emailadresse soll ja jetzt die Variable einfügen :
<?php
#Datei mail.php
$daten .= "Empfänger: ".$_REQUEST['empfemail02']."\r\n";
$daten .= "Name: ".$_REQUEST['absender_name']."\r\n";
$daten .= "alter: ".$_REQUEST['absalter']."\r\n";
$daten .= "email: ".$_REQUEST['absmail']."\r\n";
$daten .= "Homepage: ".$_REQUEST['absender_hp']."\r\n";
$daten .= "Mitteilung: ".$_REQUEST['mitteilung']."\r\n";
mail(".$_REQUEST['empfemail02']", "Gästebucheintrag", $daten,
"From: ".$_REQUEST['absmail']."\r\n" . "Reply-To:
".$_REQUEST['absmail']."\r\n" ."X-Mailer: PHP/" . phpversion());
echo '<meta http-equiv="refresh" content="0; URL=kontakt.php">';
?>
Ich habe in Zeile 11 vorher nochmal ne andere "Version" gehabt und zwar :
mail($daten,".$_REQUEST['empfemail02']." . "From: " .$_REQUEST['absmail']."\r\n" .
"Reply-To: ".$_REQUEST['absmail']."\r\n" ."X-Mailer: PHP/" . phpversion());
Dabei habe ich alles ausprobiert, mit Punkt, ohne Punkt, nur Punkt vorne (also bei $_REQUEST['empfemail02'] ... Wie soll man das mit der Variable denn am Besten lösen ?
-
Hi |
In der Variable steht ein String drin. Deswegen musst du die Anführungszeichen weglassen (also in der mail()-Funktion). Und den Punkt auch ;)
greez 8)
JoSsiF
-
So, hier nochmal die vorläufige Endfassung des Gästebuchs:
<?
#######################################################################
## Dieses Gästebuch wurde in einer Geminschaftsarbeit mehrerer ##
## Mitglieder von computerhilfen.de entwickelt. Es soll all jenen, ##
## die sich immer wieder fragen: "Gästebuch? Wie geht das?" zeigen, ##
## wie man ein einfaches Gästebuch erstellt. ##
## Es ist auch nicht das ultimative Gästebuch, sondern nur ein Wink ##
## in die richtige Richtung. Im Detail waren daran beteiligt: ##
## ##
## Erster Entwurf und Grundfunktionen : Jan190480 ##
## Optimierung des Lese- und Schreibzugriffs : JoSsiF, Mario ##
## Verteilung der Einträge auf mehrere Sieten: Spawn ##
## Stylesheet-Implementierung : Der olle Schwoebel ##
## ##
## Viel Spaß mit dem Gästebuch. Fragen können gerne ##
## direkt an die einzelnen Mitlieder gerichtet werden ##
## oder im Forum gepostet werden. ##
## ##
## 2005 | computerhilfen.de ##
## ##
#######################################################################
## Der PHP-Teil. Ohne PHP (oder einer anderen serverseitigen ##
## Programmiersprache (wie z.B. Perl)) wird man kein Gästebuch zum ##
## Laufen bekommen. ##
### Konfiguration (auch wenn's hier noch nicht ganz so viel zu konfigurieren gibt *g*)
#########################
$ppp = 5; // Anzahl der Beiträge, die pro Seite ausgegeben werden sollen
$textfile = "myGB.txt"; // Name der Textdatei, in der die Einträge gespeichert werden
### Ende Konfiguration #################################
########################################################
/*
$page initialisieren (der Wert entspricht der aktuellen Seite der Gästebucheinträge)
Beim ersten Aufruf (keine Seite gewählt) wird diese auf 1 gesetzt
Die Variable wird immer aus dem superglobalen Array $_REQUEST[] herausgezogen,
um auch auf solchen Servern einen Wert zu erhalten, auf denen die PHP-Variable
'register_gobals' auf 'Off' gesetzt ist
*/
if (!$_REQUEST['page'])
{
$page = 1;
}
else
{
$page = $_REQUEST['page'];
}
// Script wird nur ausgeführt wenn der Benutzer auf "Eintragen" gedrückt hat
if ($_POST['submit'])
{
//Alles in eine Variable hintereinander schreiben
$GBeintrag = $_POST['myGBname']."|"; // der Name aus dem Formular
$GBeintrag .= $_POST['myGBhp']."|"; // die Website aus dem Formular
$GBeintrag .= $_POST['myGBmail']."|"; // die Mail-Adresse aus dem Formular
$GBeintrag .= date("d.m.y")."|"; // das Datum aus dem Formular, gleich formatiert
/*
Das Zeichen '|' wird als Trennzeichen in der Textdatei des Gästebuchs verwendet.
Falls jemand in der nachricht ein | verwendet hat, sollten wir das
ersetzen, da sonst beim auslesen Fehler auftauchen
*/
$_POST['myGBtext'] = str_replace("|", "<!strich!>", $_POST['myGBtext']);
// Zeilenumbrüche entfernen, da anhand dieser sonst die Trennung
// der Datensätze erfolgen würde
$_POST['myGBtext'] = str_replace("\r\n", "<!umbruch!>", $_POST['myGBtext']);
$_POST['myGBtext'] = str_replace("\r", "<!umbruch!>", $_POST['myGBtext']);
$_POST['myGBtext'] = str_replace("\n", "<!umbruch!>", $_POST['myGBtext']);
// Umbruch als Trennzeichen am Ende des Datensatzes hinzufügen
$GBeintrag .= $_POST['myGBtext']."\r\n";
/*
Den Eintrag in die Textdatei schreiben und dabei vor
gleichzeitigem Mehrfachzugriff schützen
*/
$openfile = fopen($textfile, "a");
flock($openfile, 2);
fwrite($openfile, $GBeintrag);
flock($openfile, 3);
fclose($openfile);
}
?>
<!--
Hier der Allgemein bekannte HTML-Teil welcher
das Aussehen der Seite und damit das des GBs bestimmt
Hier kann man nach belieben alles anpassen bis auf
Bestehen bleiben sollten jedoch die integrierten
PHP-Anweisungen welche sich zwischen <? //und ?> befinden.
Sebstverständlich können diese natürlich an eine andere Stelle
verfrachtet werden.
//-->
<!-- KOPF DATEN //-->
<html>
<head>
<title>Mein Gästebuch</title>
<style type="text/css">
body {background-color: #FFFFFF;}
.GBtable {border: 1px solid #000000;
border-collapse: collapse;
width: 400px;}
.GBhead {background-color: #0000FF;
color: #FFFFFF;
font-weight: bold;}
.GBinput {background-color: #00FFFF;
border: 1px solid #000000;}
.GBcontent {background-color: #FFFFFF;}
a.GBlink:link, a.GBlink:visited, a.GBlink:hover, a.GBlink:active {
text-decoration: none;
color: #FFFFFF;
}
</style>
</head>
<body>
<center>
<h1>Titel des Gästebuchs</h1>
<!-- EINGABE TEIL //-->
<form action="<?=$PHP_SELF?>" method="POST">
<table class="GBtable">
<tr class="GBhead">
<td colspan="2">Hier ins Gästebuch eintragen</td>
</tr>
<tr>
<td>Dein Name</td>
<td><input class="GBinput" name="myGBname" size="30"></td>
</tr>
<tr>
<td>Deine Homepage</td>
<td><input class="GBinput" name="myGBhp" size="30" value="http://"></td>
</tr>
<tr>
<td>Deine Email</td>
<td><input class="GBinput" name="myGBmail" size="30"></td>
</tr>
<tr>
<td colspan="2" align="center">Deine Nachricht</td>
</tr>
<tr>
<td colspan="2" align="center"><textarea class="GBinput" cols="45" rows="10"
name="myGBtext"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="submit" value="Eintragen">
</td>
</tr>
</form>
</table>
<br><br>
<!-- EINTRÄGE ANZEIGEN -->
<?
/*
Hier das Gästebuch öffnen und alle Einträge in ein Array einlesen;
Fehlermeldung bei noch nicht vorhandener Datei wird unterdrückt
und die Datei automatisch angelegt
*/
$eintraege = @file($textfile);
/*
Anzeigen der Einträge
Solange Einträge vorhanden sind, wird eine Schleife durchlaufen
von hinten nach vorne (also neueste zuerst)
Hier wird gleichzeitig die Logik für die dynamische Generierung
der Seitenlinks erzeugt
*/
$start = (count($eintraege) - 1) - $ppp * ($page - 1);
$stop = (count($eintraege) - 1) - $ppp * ($page - 1) - $ppp + 1;
if ($start > (count($eintraege) - 1))
{
$start = count($eintraege) - 1;
}
if ($stop < 0)
{
$stop = 0;
}
for ($a = $start; $a >= $stop; $a--)
{
// Die einzelnen Teile des Eintrags extrahieren
$Eintrag = explode("|", $eintraege[$a]);
/*
Dann noch die Sonderstrings wie "<!umbruch!>" und "<!strich!>" wieder
in die ursprünglichen zeichen ersetzen
*/
$Eintrag[4] = str_replace("<!umbruch!>", "\r\n", $Eintrag[4]);
$Eintrag[4] = str_replace("<!strich!>", "|", $Eintrag[4]);
//und jetzt alles in Tabellen ausgeben
?>
<table class="GBtable">
<tr class="GBhead">
<td>Von : <?=$Eintrag[0]?></td>
<td>am : <?=$Eintrag[3]?></td>
<td><a class="GBlink" href="mailto:<?=$Eintrag[2]?>">Email</a></td>
<td><a class="GBlink" href="<?=$Eintrag[1]?>" target="_blank">Homepage</td>
</tr>
<tr>
<td colspan="4"><?=nl2br($Eintrag[4])?></td>
</tr>
</table>
<br>
<?
}
// $max gibt die Anzahl der Einträge an
$max = count($eintraege);
// jetzt noch fix die daraus resultierenden Seiten berechnen
if ($max == 0)
{
$pages = 1;
}
else
{
$pages = intval(($max - 1) / $ppp) + 1;
}
?>
<p align='center'>
<?
if ($page > 1)
{
?>
<a href='<?=$PHP_SELF?>?page=1'>|< </a>
<a href='<?=$PHP_SELF?>?page=<?=($page - 1)?>'>< </a>
<?
}
for ($i = 1; $i <= $pages; $i++)
{
if ($i == $page)
{
?>
<?=$i?>
<?
}
else
{
?>
<a href='<?=$PHP_SELF?>?page=<?=$i?>'><?=$i?> </a>
<?
}
}
if($page < $pages)
{
?>
<a href='<?=$PHP_SELF?>?page=<?=($page + 1)?>'>> </a>
<a href='<?=$PHP_SELF?>?page=<?=$pages?>'>>|</a>
<?
}
?>
<br>Es sind <b><?=$max?></b> Einträge im Gästebuch</p>
</center>
</body>
</html>
greez 8)
JoSsiF
-
Hi ;)
Ich finde das Script ja wirklich klasse, sowas muss ja irgendwie honoriert werden.. Habe deswegen mal wieder zugeschlagen ( ;D) und mal eine Seite dazu erstellt (so ähnlich wie die Barkeeperinfoseite (http://bwddtclan.bw.funpic.de/computerhilfen_faq/Barkeeper_info.html))
Könnt euch das ganze ja mal anguggen (hoffe, dass ich die Scripts alle richtig übernommen habe ( ::)). Müsste man dann halt nur noch verlinken, wenn ihr/wir nico oder Maddin überzeugen können ;)
http://bwddtclan.bw.funpic.de/Passwort/gaestebuch.html
Achja, sollten Änderungen auftreten im Quelltext, dann lässt sich das ganze natürlich noch ändern, ist jetzt halt nur mal, dass der Quellcode schonmal drinnen ist..
-
Schöne Sache das! :D
Kleine Korrektur: die Datei muss nicht zwingend index.php heißen. Kannst die auch anders nennen, ohne irgendwas umschreiben zu müssen. Denn es wird immer auf das eigene Dokument verlinkt (Stichwort $PHP_SELF), und damit haste dieses Problem umgangen ;)
greez 8)
JoSsiF
-
Ja, wie gesagt, war jetzt mal schnell angefertigt "das" ;) Bin grade auch noch am optimieren und editieren...
Habe jetzt noch hinzugefügt, was man machen muss, wenn man die Dateinamen ändern will..
Also für das erste Script dann gar nichts (wie es auch dasteht) und für die Nachfolgenden Scripte dann eben ne "Anweisung" mit Zeilenangabe
-
Wow, da ist man mal einen Tag nicht da und siehe da: Ein FAQ-Beitrag wurde geboren. Ich kann dem eigentlich nicht viel hinzufügen.
Das einzige, was mir noch einfiel, wird wohl den Rahmen dann doch etwas sprengen: Es wäre doch ein nettes "Feature", wenn man sich das Design, Anordnung der Einträge etc selbst bauen könnte. So in der Art, wie ich dass auf meiner Seite dann gemacht habe, nur dass es hier eben per Hand geschehen ist.
Blöderweise kenne ich mich in Wahrheit mit PHP eigentlich gar nicht aus ( ;D ), ich kann programmieren, aber die volle Syntax (geschweige denn von gängigen Techniken) blieb mir noch verschlossen. Ich hörte da aber mal was von Templates, wobei sich (obwohl ich Euch das sicher nicht erklären muss) jemand eine Design-HTML-Datei bastelt, die Verweise auf Variablen aus einem seperatem Script beinhaltet.
Aber während ich das hier schrieb, fiel mir auf, dass der Aufwand wohl doch etwas unangemessen ist. Vielleicht belassen wir's beim jetzigen Stand.
PS: Wollen wir noch ein News-System basteln? Ich bräuchte noch eins für meine Seite ;D ;D
-
Ich habe mal noch n kleines Script gebastelt, dass einen bestimten Eintrag löscht. Das sollte natürlich in einem passwortgeschützten Verzeichniss liegen o.ä.
gbdel.php
<?php
$eintraege = @file("../content.gb");
$max = count($eintraege);
$openfile = fopen("../content.gb","w");
for( $a=0; $a<$max; $a++)
{
if($a != $id)
{
flock($openfile,2);
fwrite($openfile,$eintraege[$a]);
flock($openfile,3);
}
}
fclose($openfile);
?>
Und hier der Aufruf aus dem Überverzeichnis:
echo("<a href='./admin/gbdel.php?id=".$a."' target='_self'>X</a>");an geeigneter Stelle in der Schleife, die die Einträge anzeigt.
Gruß Spawn
PS: Sorry, dass ich hier ständig die echo()-Befehle wieder reinbringe, wie gesagt: PHP-Newbie ;D
-
PS: Sorry, dass ich hier ständig die echo()-Befehle wieder reinbringe, wie gesagt: PHP-Newbie ;D
hi..
hat ja keiner was gegen echo gesagt. ich hatte nur erwähnt das bei größeren HTML-ausgaben (wie das eben bei dem Gästebuch z.b. der fall war für die Eingabe-Maske schließ ich persönlich den PHP teil kurz und öffne ihn dann erst wieder wenn ich ihn brauche. das find ich persönlich übersichtlicher, aber jedem das seine.
-
So um nochmal auf mein Problem mit den Zeilenumbrüchen zurückzukommen (jaja ich weiß was ihr denkt: "der olli newbiw soll doch endlich den rand halten").
Also wie gesagt mit dem gigantischen Gästebuch da will ich mich erst heranwagen wenn ich php mal halbwegs durchschaut habe. Ich habe ja auch ein soweit intaktes Gästebuch. Nur wenn ich in dem Text einen Zeilenumbruch mache (sprich "ENTER") drücke, dann gibt es einen Fehler. In meinem Gästebuch wird dann eben für diesen Zeilenumbruch eine neue Spalte angefangen und alles geht drunter und drüber!
Hier nochmal die drei Scripte:
auslesen.php:
<?php
echo"<html><head><title>Start</title></head><body>";
echo"<table border=1 width='100%' height='30'>";
echo"<tr><th height='25' width='15%'>Name</th>";
echo"<th height='30' width='15%'>eMail</th><th height='30'>Text</th></tr>";
$handle = fopen("tabelle.txt","r");
while (!feof($handle)) {
$name = fgets($handle, 4096);
$email = fgets($handle, 4096);
$text = fgets($handle, 4096);
echo"<tr><td width='15%'>$name </td><td width='15%'>$email </td><td>$text</td></tr>";
}
fclose($handle);
echo"</table>";
echo"</body>";
echo"</html>";
?>
Das Formular:
<?php
echo"<html><head><title>Start</title></head><body>";
echo"<form method='GET' action='eintragen.php'>";
echo"<p> </p>";
echo"<p> </p>";
echo"<p><font color='#FFFFFF' style='font-size: 16pt'>Name:</font></p>";
echo"<p><font color='#FFFFFF'>";
echo"<input type='input' name='namen' value=''></font></p>";
echo"<p><font color='#FFFFFF' style='font-size: 16pt'>email: </font></p>";
echo"<p><font color='#FFFFFF'>";
echo"<input type='input' name='mail' value=''>";
echo" </font></p>";
echo"<p align='left'>";
echo"<font color='#FFFFFF'><span style='font-size: 16pt'>Ihr Text:</span></font></p>";
echo"<p align='left'>";
echo"<textarea name='text' rows='12' cols='107'>";
echo"</textarea><br><br>";
echo"</p>";
echo"<tr><td> </td><td><input type='submit' value='Abschicken'></td></tr>";
echo"</body>";
echo"</html>";
?>
eintragen.php:
<?
$auslesen=fopen("tabelle.txt","a");
fwrite($auslesen,$namen."\n");
fwrite($auslesen,$mail."\n");
fwrite($auslesen,$text."\n");
fclose($auslesen);
?>
Und sorry aber als ich den Thread eröffnet habe war das erst mal so für mein Verständnis geplant, dass sich da jetzt so was großes (und auch ziemlich geiles) daraus entwickelt hat finde ich zwar cool, nur kann ich da halt nicht mehr mitreden!
Gruß Syrus
-
Achso nochmal was unabhängig von meinem vorigen Post:
Ich würde schauen, dass zumindest ein Name und ein Text eingegeben werden müssen, dass ein neuer Post erstellt wird!!!
Gruß Syrus
PS: Sorry wegen Doppelpost
-
Das Problem ist, dass bei diesem "Prototypen" die Trennung der Kategorien per "\n" also Zeilenumbruch gemacht wird. Das heisst, wenn Du einen Umbruch im Text hast gibt's Probleme. Das kannst Du umgehen, indem Du, bevor Du den Text in die Datei speicherst alle Umbrüche in eine Zeichenfolge verwandelst, die den Umbruch repräsentiert (beispielsweise im "großen" GB durch "<!umbruch!>" realisert).
Der Befehl zum Ersetzen eines Strings mit einem anderen String lautet:
$neu = str_replace($einfuegen,$ersetzen,$alt);wobei $einfuegen für die einzufügende, $ersetzen für die zu ersetzende Zeichenfolge steht.
Nun musst Du natürlich, nachdem Du alles wieder ausgelesen hast, die entsprechenden Repräsentanten wieder durch den Umbruch ersetzen. Dazu analog wieder den str_replace-Befehl benutzen.
Gruß Spawn
PS: Nein, wir (zumindest ich) wollen nicht, dass Du die Klappe hälst. Im Eifer des Gefechts ist Dein Problem nur etwas verloren gegangen :D
-
Hi alle miteinannder, ich habe mich mal an eine kleinere Grafikversion des Gästebuchs gewaagt, schaut finde ich, schon relativ gut aus :
Das ganze kommt in den "<!-- EINTRÄGE ANZEIGEN --!>" Teil :
<span style="font-family: arial;">
<table class="GBtable" cellpadding="2" cellspacing="2" border="0"
style="text-align: left; height: 46px; width: 50%; background-color: rgb(0, 0, 153);">
<tbody>
<tr class="GBhead">
<td
style="vertical-align: top; width: 55%; background-color: rgb(0, 0, 153); font-family: comic sans ms; color: rgb(255, 204, 51);"><small><?=$Eintrag[5];?></small></td>
<td colspan="4"
style="vertical-align: top; background-color: rgb(0, 0, 153);">
<table cellpadding="2" cellspacing="2" border="0"
style="text-align: left; width: 100%; background-color: rgb(0, 0, 153);">
<tbody>
<tr>
<td style="vertical-align: top; width: 70%;"><br><br><br><br><br><small><span style="color: rgb(255, 204, 51); font-family: verdana;"><?=$Eintrag[4];?></span></small><br
style="color: rgb(255, 204, 51);">
<span style="color: rgb(255, 204, 51); font-weight: bold; font-family: verdana;"><?=$Eintrag[1];?></span><br
style="color: rgb(255, 204, 51);">
<br style="color: rgb(255, 204, 51);">
<small><span style="color: rgb(255, 204, 51);"><a class="GBlink" href="mailto:<?=$Eintrag[3]?>"><span style="font-family: arial;;"><?=$Eintrag[3]?></a></span></small><br
style="color: rgb(255, 204, 51);">
<small><span style="color: rgb(255, 204, 51);"><a class="GBlink" href="<?=$Eintrag[2];?>" target="_blank"><span style="font-family: arial;"><?=$Eintrag[2];?></a></span></small><br>
</td>
<td style="vertical-align: top;" rowspan="1" colspan="1"><span
style="font-family: arial;">
<div style="text-align: right;"><img src="briefmarke02.jpg"
title="" alt="" style="width: 100px; height: 115px;"><br>
</div>
</span></td>
</tr>
<tr>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
Für "briefmarke02.jpg" kann man jetzt eine beliebige Briefmarke einsetzen, ich habe einfach mal eine erstellt.. Das ganze kann man mal ausprobieren oder anguggen :
http://schwoebelbank02.sc.funpic.de/gbbook/
Das ganze sollte irgendwie wie ne Postkarte aussehen, mit nem Vorbild von "gbserver.de" :
http://gaestebuch.gbserver.de/schwoebel,1.html
Es gibt natürlich noch ein paar KLEINE Abänderung, wie die Hintergrundfarbe und ab und zu, wo der Firefox (http://www.computerhilfen.de/firefox-download.html) die Schriftart oder Farbe nicht richtig anzeigt hat, eine eindeutige Definition mit <span style="color: rgb(...);">, aber sonst ist es das Original bzw. mit dem oberen Code ;)
-
Schick schick. Wollte allerdings gerade mal was eintragen und da ist nix passiert, ausser dass meine Überschrift Deinem Eintrag angefügt wurde...?
Mir ist gerade noch eine Sache aufgefallen, die wohl alle GBs auf "unserer" Basis betreffen müsste: Wenn ich ein Gänsefüßchen (") eingebe, wird das als \" gespeichert und ausgegeben. Ich dachte erst, dass betrifft Sonderzeichen im Allgemeinen und habe mal mit ! § $ & etc getestet, hier tritt das Problem allerdings nicht auf.
Jemand eine Idee?
Gruß Spawn
-
mmhh...vielleicht sollten wir vorher (falls das nicht automatisch passiert) mit addslashes() die phpzeichen wie ' " \ und so schützen und bei der ausgabe mit stripslashes wieder entfernen...sollte jedenfalls funktionieren
-
Hi |
Stripslashes bei der Ausgabe sollte reichen, da die schützenden Slashes ja schon mit gespeichert werden.
Es war auch noch ein kleiner Bug drin im Skript: wenn noch keine Textdatei angelegt war (und damit die Variable $eintraege nicht initialisiert wurde), wurde $max auf 1 gesetzt und dummerweise "1 Einträge" angezeigt. Is gefixt ;)
So, was wäre dieser Thread ohne Unmengen an Quellcode, also:
<?
#######################################################################
## Dieses Gästebuch wurde in einer Geminschaftsarbeit mehrerer ##
## Mitglieder von computerhilfen.de entwickelt. Es soll all jenen, ##
## die sich immer wieder fragen: "Gästebuch? Wie geht das?" zeigen, ##
## wie man ein einfaches Gästebuch erstellt. ##
## Es ist auch nicht das ultimative Gästebuch, sondern nur ein Wink ##
## in die richtige Richtung. Im Detail waren daran beteiligt: ##
## ##
## Erster Entwurf und Grundfunktionen : Jan190480 ##
## Optimierung des Lese- und Schreibzugriffs : JoSsiF, Mario ##
## Verteilung der Einträge auf mehrere Sieten: Spawn ##
## Stylesheet-Implementierung : Der olle Schwoebel ##
## ##
## Viel Spaß mit dem Gästebuch. Fragen können gerne ##
## direkt an die einzelnen Mitlieder gerichtet werden ##
## oder im Forum gepostet werden. ##
## ##
## 2005 | computerhilfen.de ##
## ##
#######################################################################
## Der PHP-Teil. Ohne PHP (oder einer anderen serverseitigen ##
## Programmiersprache (wie z.B. Perl)) wird man kein Gästebuch zum ##
## Laufen bekommen. ##
### Konfiguration (auch wenn's hier noch nicht ganz so viel zu konfigurieren gibt *g*) #########################
$ppp = 5; // Anzahl der Beiträge, die pro Seite ausgegeben werden sollen
$textfile = "myGB.txt"; // Name der Textdatei, in der die Einträge gespeichert werden
### Ende Konfiguration #########################################################################################
/*
$page initialisieren (der Wert entspricht der aktuellen Seite der Gästebucheinträge)
Beim ersten Aufruf (keine Seite gewählt) wird diese auf 1 gesetzt
Die Variable wird immer aus dem superglobalen Array $_REQUEST[] herausgezogen,
um auch auf solchen Servern einen Wert zu erhalten, auf denen die PHP-Variable
'register_gobals' auf 'Off' gesetzt ist
*/
if (!$_REQUEST['page'])
{
$page = 1;
}
else
{
$page = $_REQUEST['page'];
}
// Script wird nur ausgeführt wenn der Benutzer auf "Eintragen" gedrückt hat
if ($_POST['submit'])
{
//Alles in eine Variable hintereinander schreiben
$GBeintrag = $_POST['myGBname']."|"; // der Name aus dem Formular
$GBeintrag .= $_POST['myGBhp']."|"; // die Website aus dem Formular
$GBeintrag .= $_POST['myGBmail']."|"; // die Mail-Adresse aus dem Formular
$GBeintrag .= date("d.m.y")."|"; // das Datum aus dem Formular, gleich formatiert
/*
Das Zeichen '|' wird als Trennzeichen in der Textdatei des Gästebuchs verwendet.
Falls jemand in der nachricht ein | verwendet hat, sollten wir das
ersetzen, da sonst beim auslesen Fehler auftauchen
*/
$_POST['myGBtext'] = str_replace("|", "<!strich!>", $_POST['myGBtext']);
// Zeilenumbrüche entfernen, da anhand dieser sonst die Trennung der Datensätze erfolen würde
$_POST['myGBtext'] = str_replace("\r\n", "<!umbruch!>", $_POST['myGBtext']);
$_POST['myGBtext'] = str_replace("\r", "<!umbruch!>", $_POST['myGBtext']);
$_POST['myGBtext'] = str_replace("\n", "<!umbruch!>", $_POST['myGBtext']);
// Anführungszeichen als Sonderzeichen behandeln
//$_POST['myGBtext'] = addslashes($_POST['myGBtext']);
// Umbruch als Trennzeichen am Ende des Datensatzes hinzufügen
$GBeintrag .= $_POST['myGBtext']."\r\n";
/*
Den Eintrag in die Textdatei schreiben und dabei vor
gleichzeitigem Mehrfachzugriff schützen
*/
$openfile = fopen($textfile, "a");
flock($openfile, 2);
fwrite($openfile, $GBeintrag);
flock($openfile, 3);
fclose($openfile);
}
?>
<!--
Hier der Allgemein bekannte HTML-Teil welcher
das Aussehen der Seite und damit das des GBs bestimmt
Hier kann man nach belieben alles anpassen bis auf
Bestehen bleiben sollten jedoch die integrierten
PHP-Anweisungen welche sich zwischen <? //und ?> befinden.
Sebstverständlich können diese natürlich an eine andere Stelle
verfrachtet werden.
//-->
<!-- KOPF DATEN //-->
<html>
<head>
<title>Mein Gästebuch</title>
<style type="text/css">
body {background-color: #FFFFFF;}
.GBtable {border: 1px solid #000000;
border-collapse: collapse;
width: 400px;}
.GBhead {background-color: #0000FF;
color: #FFFFFF;
font-weight: bold;}
.GBinput {background-color: #00FFFF;
border: 1px solid #000000;}
.GBcontent {background-color: #FFFFFF;}
a.GBlink:link, a.GBlink:visited, a.GBlink:hover, a.GBlink:active { text-decoration: none;
color: #FFFFFF; }
</style>
</head>
<body>
<center>
<h1>Titel des Gästebuchs</h1>
<!-- EINGABE TEIL //-->
<form action="<?=$PHP_SELF?>" method="POST">
<table class="GBtable">
<tr class="GBhead">
<td colspan="2">Hier ins Gästebuch eintragen</td>
</tr>
<tr>
<td>Dein Name</td>
<td><input class="GBinput" name="myGBname" size="30"></td>
</tr>
<tr>
<td>Deine Homepage</td>
<td><input class="GBinput" name="myGBhp" size="30" value="http://"></td>
</tr>
<tr>
<td>Deine Email</td>
<td><input class="GBinput" name="myGBmail" size="30"></td>
</tr>
<tr>
<td colspan="2" align="center">Deine Nachricht</td>
</tr>
<tr>
<td colspan="2" align="center"><textarea class="GBinput" cols="45" rows="10" name="myGBtext"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="submit" value="Eintragen"></td>
</tr>
</form>
</table>
<br><br>
<!-- EINTRÄGE ANZEIGEN -->
<?
/*
Hier das Gästebuch öffnen und alle Einträge in ein Array einlesen;
Fehlermeldung bei noch nicht vorhandener Datei wird unterdrückt
und die Datei automatisch angelegt
*/
$eintraege = @file($textfile);
/*
Anzeigen der Einträge
Solange Einträge vorhanden sind, wird eine Schleife durchlaufen
von hinten nach vorne (also neueste zuerst)
Hier wird gleichzeitig die Logik für die dynamische Generierung
der Seitenlinks erzeugt
*/
$start = (count($eintraege) - 1) - $ppp * ($page - 1);
$stop = (count($eintraege) - 1) - $ppp * ($page - 1) - $ppp + 1;
if ($start > (count($eintraege) - 1))
{
$start = count($eintraege) - 1;
}
if ($stop < 0)
{
$stop = 0;
}
// Textdatei überhaupt vorhanden?
if (!$eintraege)
{
$max = 0; // $max gibt die Anzahl der Einträge an
}
else
{
$max = count($eintraege);
for ($a = $start; $a >= $stop; $a--)
{
// Die einzelnen Teile des Eintrags extrahieren
$Eintrag = explode("|", $eintraege[$a]);
/*
Dann noch die Sonderstrings wie "<!umbruch!>" und "<!strich!>" wieder
in die ursprünglichen zeichen ersetzen
*/
$Eintrag[4] = str_replace("<!umbruch!>", "\r\n", $Eintrag[4]);
$Eintrag[4] = str_replace("<!strich!>", "|", $Eintrag[4]);
//und jetzt alles in Tabellen ausgeben
?>
<table class="GBtable">
<tr class="GBhead">
<td>Von : <?=$Eintrag[0]?></td>
<td>am : <?=$Eintrag[3]?></td>
<td><a class="GBlink" href="mailto:<?=$Eintrag[2]?>">Email</a></td>
<td><a class="GBlink" href="<?=$Eintrag[1]?>" target="_blank">Homepage</td>
</tr>
<tr>
<td colspan="4"><?=stripslashes(nl2br($Eintrag[4]))?></td>
</tr>
</table>
<br>
<?
}
}
// jetzt noch fix die daraus resultierenden Seiten berechnen
if ($max == 0)
{
$pages = 1;
}
else
{
$pages = intval(($max - 1) / $ppp) + 1;
}
?>
<p align='center'>
<?
if ($page > 1)
{
?>
<a href='<?=$PHP_SELF?>?page=1'>|< </a>
<a href='<?=$PHP_SELF?>?page=<?=($page - 1)?>'>< </a>
<?
}
for ($i = 1; $i <= $pages; $i++)
{
if ($i == $page)
{
?>
<?=$i?>
<?
}
else
{
?>
<a href='<?=$PHP_SELF?>?page=<?=$i?>'><?=$i?> </a>
<?
}
}
if($page < $pages)
{
?>
<a href='<?=$PHP_SELF?>?page=<?=($page + 1)?>'>> </a>
<a href='<?=$PHP_SELF?>?page=<?=$pages?>'>>|</a>
<?
}
?>
<br>Es sind <b><?=$max?></b> Einträge im Gästebuch</p>
</center>
</body>
</html>
greez 8)
JoSsiF
-
ich hab noch ne frage zu dem skript,
und zwar, wo kann man da jetzt die
Einträge löschen? ich seh keinen
link oder so was.....
-
die funktion ist noch nicht eingebaut...vorerst wirst du nicht drumherum kommen die einträge von hand zu fuß in der textdatei zu entfernen...
Ich denk aber das wir demnächst noch ne Adminfinktion einbauen...
-
wie kann ich einstellen,
dass der Scrollbalken
verschwindet, bei dem
man den Text eingibt?
(Auch wenn man ihn nicht
benutzen kann...)
-
wie kann ich einstellen,
dass die Tabelle, wo die
Einträge angezeigt werden,
schmaler ist?
MfG
-
such mal im script nach dem code-schnippsel
.GBtable {border: 1px solid #000000;
border-collapse: collapse;
width: 400px;}
bei "width" kannste dann die breite in pixel angeben
-
so jungs..einer geht noch :)...
Folgendes ist hinzugekommen.
1. Die Smileys von Schwoebel
2. BBCodes udn zwar
[ color=XXX]TEXT[ /color]
XXX ersetzbar durch "red","blue","yellow" und "green"
weiter farben dürften ja kein problem darstellen :-)
und [ url]link[ /url]
erklärt sich glaub ich von selbst. Die BBCodes natürlich wie immer OHNE leerzeichen angeben.
und hier noch den neue code des GB....
achja..bevor ichs vergesse...das ding hat jetzt 13kb.
so langsam sollte schluß sein für ein "OneFileGuestBook"...ich würd gerne weiter mit euch daran arbeiten, dann aber etwas besser organisiert und größer aufgezogen. Quasi "CompiHilfenBook Pro"...die Light-Version dürfte ja soweit fertig sein ;-)
Gruß Jan...
Edit: OK OK..das forum meckert gerade das mein post zu lang wäre..so lang find ich den code garnicht :-)..naja..dann einfach hier Downloaden (http://devel.crazycatsoft.de/gb/guestbook.zip)
Edit2: Nochmal ich :-) ...hab jetzt die codes für [ b][ /b], [ i][ /i] und [ u][ /u] hinzugefügt...
-
Wie wärs, wenn wir einfach mal festlegen, dass DIESES Gästebuch Version 1.0 darstellt ? Damit man besser den Überblick behalten kann über Veränderungen...
Und vielleicht noch nebenbei ne Art "Chronik" erzeugen (.txt-Datei reicht ja schon) mit den Veränderungen, die bei jeder "Version" hinzugekommen sind..
Ich habe mal den "Anfang" gemacht und ein bissn "Style" reingebracht". Außerdem habe ich nochn kleinen "Fehler" entdeckt und korrigiert :
td><small style="font-family: verdana;">- <a class="GBlink" href="<?=$Eintrag[1]?>" target="_blank">Homepage</small></a> - </td>
Das "</a>" hat dabei gefehlt. Obs funktioniert hat oder nicht ist dabei ja egal, sah halt nur nicht so schön aus..
http://mitglied.lycos.de/webspacera3/Version_1_00b.zip
(bitte nur Link kopieren und nicht direkt draufklicken)
Und noch ne Änderung : Für Leute, die lieber erst die Einträge lesen wollen und DANN eintragen, habe ich den Eingabeteil ganz unten hingepflanzt. Allerdings DIESMAL mit einem Link ganz oben über den Eintragen "Ins Gästebuch eintragen"
http://mitglied.lycos.de/webspacera3/Version_1_00c.zip
http://schwoebelbank02.sc.funpic.de/gbbook/guestbook.php
Hab das Gästebuch übrigens jetzt auch für meine HP im Einsatz (mit den alten Einträgen aus dem "alten" Gästebuch") : http://schwoebelbank02.sc.funpic.de/eigenes/guestbook.php
-
wie kann ich einstellen,
dass der Scrollbalken
verschwindet, bei dem
man den Text eingibt?
(Auch wenn man ihn nicht
benutzen kann...)
-
Danke, die Frage hast du weiter oben schonmal gestellt, aber ist schon richtig, hat ja keiner geantwortet ::) ;)
Aaaaaalso :
Du gehst zum <textarea....> Atribut und fügst irgendwo hinter folgendes ein :
style="scrolling=no"..
Also würde das dann in etwa so aussehen :
<textarea class="GBinput" cols="45" rows="10" name="myGBtext" style="scrolling=no"></textarea>
Aber ich frage mich im Moment, was das bringen soll, denn dann kann ja niemand mehr scrollen und wenn man mehr als diese 10 Zeilen schreibt hat man eventuell ein Problem
:o ;D
-
Danke,
hab mit Java was erstellt
zum Scrollen.....
-
kann hier eigentlich jeder mitarbeiten, das gästebuch zu verbessern?
hätte nämlich ein paar ideen...
erstens den code ein wenig aufräumen
eine exteren css datei erstellen, mit der man das gesamte layout steuern kann,
eine überprüfung des formulars, ob zumindest ein name eingegeben wurde
ein flood schutz... um den eintrag von 100 gleichen entrys zu unterdrücken...
hab auch schon ein paar ideen...
cheers dipo
-
Natürlich kann jeder mitarbeiten, ist ja nich schreibgeschützt oderso... Aber die Hinweise ganz oben denke ich sollten schon erhalten bleiben (nicht Original, aber zumindest erhalten)..
Gib halt einfach an, wo man den Code herbekommt (denke, das passt hier dann nicht mehr rein).. ;)
-
wenns dann soweit ist, werd ich den code mal posten
hab nur momentan ein wenig stress...
-
hi...
wie schwoebel schon sagt kann jeder dran ändern was er will. Ich persönlich hätte nur eine bitte und einen Hinweis (betrifft auch alle anderen die das lesen und daran weiter arbeiten wollen) : vergib doch bitte deiner fertigen version dann eine Versionsnummer (z.b. CHGB V 0.6) damit man immer nachvollziehen kann welches der letzte und somit aktuellste code ist. schwoebel hatte glaub ich auch mal die idee eine Versions-History. Das find ich auch interessant..vielleicht kannst du gerade damit anfangen ;-). des weiteren noch ein kleiner hinweis. Der Code des GB passt hier nichtmehr komplett in einen Post, was der grund ist warum wir ihn nur noch gezipt auf unseren servern liegen hatten und dann verlinkt. Das empfehle ich dir auch.
Gruß Jan
-
Ich hatte in meinem Download oben bereits eine "Chronik" enthalten, die man nur noch erweitern müsste. Desweiteren habe ich die grafisch noch ein wenig angepasst. Wenn niemand was dagegen hat, würde ich gerne die ausgelagerte CSS-Datei machen, ich werde dann die Version (ich glaub ich fang dann mit Version 1.01a an) hier hochladen...
-
Favicon würd ich lassen denn jeder der das GB einbaut wird schon sein eigenes Favicon haben...
-
hi...
bin mir nicht sicher ob das gehen würde (habs noch nie ausprobiert).
Aber wir tragen in dem script ja die daten erst ein nachdem Submit gedrückt wurde..die überprüfung lautet ja
if(isset($_REQUEST['submit']))
wenn man jetzt F5 drückt ist isset($_REQUEST['submit']) immer noch true
Jetzt kam mir der befehl unset unter die augen. Würde es gehen wenn man nach dem eintragen mit
unset($_REQUEST['submit'])
das ganze wieder auf false setzt und somit bei einem Reload mit F5 kein eintrag mehr gemacht würde ? ???
naja..irgendwer wird mir das bestimmt beantworten können oder Schwoebel probierts einfach aus (ich komm gerade nicht dazu)
Gruß Jan
-
Also ich weiß nicht, auf welche Version du dich jetzt beziehst, aber bei meiner aktuellsten (Version 1.1b) heißt es im Code :
// Script wird nur ausgeführt wenn der Benutzer auf "Eintragen" gedrückt hat
if ($_POST['submit'])
Meintest du, dass man das durch deinen Code ersetzt ? Und wo kommt dann der unset Befehl hin ?
-
Das dürfte nicht funktionieren, weil ja die Daten neu geschickt werden und submit damit wieder true ist.
Anders geht's aber: man leitet die Formulardaten nicht an's selbe Skript, sondern ein spezielles, verarbeitendes Skript, welches keine Ausgabe (wichtig!) macht.
Nach der Verarbeitung leitet man den User mit einer header-Anweisung zurück zum Gästebuch. Wenn der Nutzer nun F5 drückt, ohne etwas neues einzugeben, kommen die entsprechenden Fehlermeldungen, weil ja keine Daten übermittelt werden.
Bin mir nicht sicher, aber so in der Art dürfte das hier auch im Forum ablaufen (geben wir die Frage mal an die Admins weiter...).
greez 8)
JoSsiF
-
Meintest du, dass man das durch deinen Code ersetzt ? Und wo kommt dann der unset Befehl hin ?
hat sich erledigt...funzt eh nicht..JoSsiF hat recht...ich dachte unset würde das $REQUEST aus dem speicher hauen...war wohl nix ;) ...
-
Ok, ich habe das Problem jetzt "umgangen" indem ich den Eingabeteil ausgelagert habe in "eintrag.php". Damit sollte die Gefahr zwar nicht mehr direkt bestehen, aber ist halt die Frage, obs komfortabel ist :-\ ???
Zum Download (Version 1.1d) (http://www.derolleschwoebel.de/downloads/Version_1.1d.zip)
Anguggen (http://www.derolleschwoebel.de/downloads/guestbook.php)
-
Mir fällt gerade was auf, und zwar funzt das "Löschen" Script von Spawn zwar, allerdings wird immernur der erste Eintrag (der älteste) gelöscht und nicht der, den man ausgewählt hat.. Ist jetzt nicht schlimm, aber könnte vielleicht ein bisschen ärgerlich sein, wenn ein anderer Webmaster es ausprobiert bei SEINEM Gästebuch..
-
Mir fällt gerade was auf, und zwar funzt das "Löschen" Script von Spawn zwar, allerdings wird immernur der erste Eintrag (der älteste) gelöscht und nicht der, den man ausgewählt hat.. Ist jetzt nicht schlimm, aber könnte vielleicht ein bisschen ärgerlich sein, wenn ein anderer Webmaster es ausprobiert bei SEINEM Gästebuch..
Jo, kleiner Fehler nur.
Zeile 236 in guestbook.php muss das '.$a.' ersetzt werden duch <?=$a ?>, da sich die Ausgabe ja nicht im PHP-Code befindet, sondern im HTML-Code. ;)
Also der komplette Link:
<a class="GBlink" href="loeschen/loeschen.php?id=<?=$a ?>" target="_self">Eintrag löschen</a>
BTW: [keine Kritik!] Wer hat sich denn bei der Eingabe, bei den Smilies, die Größenangebe im CSS überlegt? Die Dinger sind doch alle gleich groß (bis auf den hier --> ??? ), kann man doch weglassen, dadurch wir der Code schlanker und übersichtlicher.
Und noch was: Im <img>-Tag der Smilies stehen die beiden Attribute title="" und alt="", vielleicht findet sich noch einer, der wenigstens das alt="" füllt (das title="" kann im Prinzip raus) aber alt="" sollte man lt. W3C schon füllen.
Jaja, ich würde es ja gerne selbst machen bzw. hätte es selbst gemacht, aber zu Hause hab ich z.Zt. keinen I-net Zugang und hier auf Arbeit bleibt nur Zeit zum kritisieren... ;D ;D :P :-*
Mario 8)
-
Ok, hab das .$a. ersetzt und die Größenangaben ersetzt :
Zum Download (Version 1.2a) (http://www.derolleschwoebel.de/downloads/Version_1.2a.zip)
-
so....hab das löschenscript jetzt in ein ACP verfrachtet mit login und so...dann kann man dort auch noch andere sachen "reinscripten" wie zum beispiel das kommentieren oder editieren von einträgen..hatt ich jetzt aber keine lust zu ;) ...
download : http://devel.crazycatsoft.de/files/CHGB_V1_2b.zip
gruß der rausgeschmissene...äääh...Jan
-
das passwortscript ist noch ein wenig unsicher... ok, ich weiß schon, php passwort scripts ohne datenbank sind generell unsicher... aber ich kann die AdminStartPage.php einfach so aufrufen...
-
ja..da hab ich en biss rumhantiert mit den sessions...ich übergeb bei jedem link die session_id mit so das jemand der cookies nicht akzeptiert trotzdem in den admin bereich kommt. normalerweise solltest du aber zumindest 1 mal über den loginbereich gekommen sein..egal..ich glaub ich hol das wieder raus so das es nur mit cookies läuft..alles andere kann sich dann mal bei gelegheit ein anderer angucken...was die sicherheit des passwortes betrifft...das ist ja in der config.inc.php als md5 gespeichert. Also selbst wenn jemand den deinen code der config auslesen kann weis er immer noch nicht was es für ein passwort ist (aber alles ist machbar ich weis, aber es geht hier ja rein um 0815 benutzer ;) )
da fällt mir gerade brühwarm ein das ich bei der abfrage zwar das passwort überprüfe aber den namen nicht :D ...tztztz..die hitze macht einem echt zu schaffen *schwitz* *brutzel* *kernschmelze*
-
bin gerade dabei was zu schreiben...
mal schaun, ob das funktioniert...
-
Hi Leute,
ich hab mir mal gedacht, mach ich mal wieder was sinnvolles (;D) und gugg mir nochmal die Source an. Jetzt hab ich ja mittlerweile große Kenntnisse über PHP erlangt (nicht zuletzt durch HomePH Design) und habe ein wenig gescriptet:
http://www.derolleschwoebel.de/downloads/ch_gb_v1.5.zip
Ich habe die Source jetzt aufgeräumt, das Gästebuch umfasst jetzt wieder eine Datei (trotzdem mit einer Reloadsperre, also kann man nicht einen Eintrag beliebig oft durch F5 eintragen).
Außerdem kann man nun zwischen mehreren Designs wählen, die man im Konfigurationsteil einstellen kann, oder das Design (in der Datei) selbst schreiben (mit Vorgaben bzw. Hilfen).
CHMOD-Rechte werden nun vom Gästebuch auch selbstständig gesetzt, außerdem hab ich jetzt eine Überprüfung drinnen, ob Eingaben bei Homepage und email gemacht wurden, wenn nicht, dann werden die Links ausgeblendet, das wirkt so professioneller ;)
Anzuguggen hier:
http://www.derolleschwoebel.de/downloads/guestbook.php
Achja, anstatt den Textlinks für HP und email hab ich zwei Grafiken verwendet, dadurch können die beiden anderen Zellen breiter werden und dadurch auch lange Namen (fast) immer in einer Zeile dargestellt werden.
Die Konfiguration ist jetzt ebenfalls einfacher.. :) Ich hab mir mal erlaubt, diese Version als 1.5 zu bezeichnen ;)
-
Viel lesenswertes haben wir entdeckt. Nett anzusehen, die webseite ...
Viele Grüße aus dem Teutoburger Wald
http://www.snukk.de
-
sag mal, wo ist eigentlich die aktuelle version vom guestebuch? wir koennten die dann hier mal richtig verlinken - deine links gehen nämlich alle nicht :)
Hi Leute,
ich hab mir mal gedacht, mach ich mal wieder was sinnvolles (;D) und gugg mir nochmal die Source an. Jetzt hab ich ja mittlerweile große Kenntnisse über PHP erlangt (nicht zuletzt durch HomePH Design) und habe ein wenig gescriptet:
http://www.derolleschwoebel.de/downloads/ch_gb_v1.5.zip
Ich habe die Source jetzt aufgeräumt, das Gästebuch umfasst jetzt wieder eine Datei (trotzdem mit einer Reloadsperre, also kann man nicht einen Eintrag beliebig oft durch F5 eintragen).
Außerdem kann man nun zwischen mehreren Designs wählen, die man im Konfigurationsteil einstellen kann, oder das Design (in der Datei) selbst schreiben (mit Vorgaben bzw. Hilfen).
CHMOD-Rechte werden nun vom Gästebuch auch selbstständig gesetzt, außerdem hab ich jetzt eine Überprüfung drinnen, ob Eingaben bei Homepage und email gemacht wurden, wenn nicht, dann werden die Links ausgeblendet, das wirkt so professioneller ;)
Anzuguggen hier:
http://www.derolleschwoebel.de/downloads/guestbook.php
Achja, anstatt den Textlinks für HP und email hab ich zwei Grafiken verwendet, dadurch können die beiden anderen Zellen breiter werden und dadurch auch lange Namen (fast) immer in einer Zeile dargestellt werden.
Die Konfiguration ist jetzt ebenfalls einfacher.. :) Ich hab mir mal erlaubt, diese Version als 1.5 zu bezeichnen ;)
-
achja, ich weiß nicht, ob das Problem schon gelöst wurde aber, ich würde es mit
explode() versuchen, Infos darüber findest du im PHP-Manual, meiner Meinung nach, die Effektivste möglichkeit ein GB zu Proggen, allein schon, weil das Design nicht direckt in der Txt Datei gespeicher wird.
Ansonsten halt MYSQL , aber das halt wieder ne Nummer komplizierter hab mich auch ca. 1 Jahr davor gedrückt :)