Gästebuchscript tipps für veränderung???
Morpheus
- meinung
Hi alle zusammen,
ich wäre euch dankbar für tipps oder Änderungen an diesem
Script. Kritik oder sonstiges ist alles gestattet.
Ist mein erstes Script.
Danke im vorraus.
Ciao Morph
<HTML>
<HEAD>
<TITLE>Guestbook</TITLE>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="styles/style.css">
</HEAD>
<BODY>
<div align="center">
<form action="" method="post">
Name:<br>
<input type="text" name="nameFORM"><br>
eMail:<br>
<input type="text" name="emailFORM"><br>
Titel:<br>
<input type="text" name="titelFORM"><br><br>
<textarea rows="10" cols="70" name="kommentarFORM"></textarea><br>
<input type="hidden" name="action" value="submitEintrag"><br>
<input type="submit" name="Eintragsenden" value="Eintragen"><br>
</form>
<?php
if ($action == "submitEintrag")
{
$nameFORM = trim ($nameFORM);
$emailFORM = trim ($emailFORM);
$titelFORM = trim ($titelFORM);
$kommentarFORM = trim ($kommentarFORM);
if ($nameFORM == "" or $kommentarFORM == "")
{
$fehler = "<br>Du hast nicht alle Felder ausgefüllt!";
echo $fehler;
}
else
{
$formular = "ok";
}
}
if ($formular == "ok")
{
$zensiert = $kommentarFORM;
$zensiert = str_replace("Schimpfwort","*****",$zensiert);
$zensiert = str_replace("Schimpfwort","*****",$zensiert);
$zensiert = str_replace("Schimpfwort","****",$zensiert);
$zensiert = str_replace("Schimpfwort","***",$zensiert);
$zensiert = str_replace("Schimpfwort","*****",$zensiert);
//usw.
$z = 0;
$dir="data";
$handle=opendir ($dir);
while ($file = readdir ($handle))
{
if ($file != "." && $file != "..")
{
$z++;
if ($z == 1)
{
$filenames = array($file);
}
else
{
array_push($filenames,$file);
}
}
}
closedir ($handle);
$anzahl = count ($filenames);
$dateiname = substr ($filenames[$anzahl-1], 0, 3);
$dateiname++;
$dateiname = str_pad ($dateiname, 3, "0", STR_PAD_LEFT);
$pfad = "data/".trim ($dateiname).".dat";
$daten = fopen ($pfad, 'w');
fputs ($daten, $nameFORM."\n");
fputs ($daten, $emailFORM."\n");
fputs ($daten, $titelFORM."\n");
fputs ($daten, $zensiert);
fclose ($daten);
}
unset ($filenames);
$z = 0;
$dir = "data";
$handle = opendir ($dir);
while ($file = readdir ($handle)) {
if ($file != "." && $file != "..") {
$z++;
if ($z == 1) { $filenames = array($file);
}else
{
array_push($filenames,$file);
}
}
}
closedir($handle);
rsort($filenames, SORT_NUMERIC);
for($z = 0; $z < count($filenames); $z++)
{
$data = file($dir."/".$filenames[$z]);
?>
//////////////////////////////Hier kommt die Ausgabe der einträge //////////////////////////////7
<?
echo "<TD width=370>";
$zeilen = count($data);
echo "</TD></TR>";
}
?>
</div>
</BODY>
</HTML>
Hallo,
besser fände ich es, wenn ich das Script in Aktion sehen könnte. In Script-lesen bin ich nicht so gut, in Script ausprobieren und dumme Kommentare abgeben aber besser ;-)
Chräcker
Hallo Du Einer,
wenn Chräcker den visuellen Teil übernimmt, mach ich mich mal partiell an die Script-Bemeckerung ;-)
Doctype fehlt
<HTML>
<HEAD>
<TITLE>Guestbook</TITLE>
Warum nicht auf Deutsch?
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="styles/style.css">
</HEAD>
<BODY>
<div align="center">
<form action="" method="post">
<form action = "<php echo $_SERVER["PHP_SELF"]; ?>"
method = "POST"
enctype = "multipart/formdata"> <!-- sonst kann man keine Files uploaden -->
Name:<br>
<input type="text" name="nameFORM"><br>
Naja... Namen könnte man dann besser als
<input type="text" name="FORM[name]"><br>
<input type="text" name="FORM[email]"><br>
vergeben. Dann stehen nämlich später alle FORM-Parameter im Übergabeparamter $_POST["FORM"][....]
das ... symbolisiert dann die "Untervariable", also das Displacement im FORM-Array
if ($Eintragsenden == "submitEintrag")
{
$nameFORM = trim ($nameFORM);
$emailFORM = trim ($emailFORM);
$titelFORM = trim ($titelFORM);
$kommentarFORM = trim ($kommentarFORM);
ok, wenn man linksseitige Leerzeichen beseitigen will...
if ($nameFORM == "" or $kommentarFORM == "")
da kann man jetzt dank der FORM[name] Konvention fragen:
if (in_array("",$_POST["FORM"],true))
{
$fehler = "<br>Du hast nicht alle Felder ausgefüllt!";
echo $fehler;
}
else
{
$formular = "ok";
}
}if ($formular == "ok")
{
$zensiert = $kommentarFORM;$zensiert = str_replace("Schimpfwort","*****",$zensiert);
$zensiert = str_replace("Schimpfwort","*****",$zensiert);
$zensiert = str_replace("Schimpfwort","****",$zensiert);
$zensiert = str_replace("Schimpfwort","***",$zensiert);
$zensiert = str_replace("Schimpfwort","*****",$zensiert);
das Wörterbuch würde ich in einer CSV-Datei abspeichern
Den rest überschlagen wir erstmal...
LG
Tom
Nochmal Hallo,
enctype = "multipart/formdata"> <!-- sonst kann man keine
Files uploaden -->
muss natürlich heißen: enctype = "multipart/form-data"
Tom
Hallo,
Hab das Script nur schnell ueberflogen.
Ein paar Bemerkungen:
<div align="center">
Aber, aber! Das ist doch depracated!
Wenn schon direkt im TAG, dann so:
<div style="text-align:center">
Viel besser waeren allerdings IDs oder Klassen.
<form action="" method="post">
Gib im ACTION-Attribut die URL an. Tip:
$_SERVER['PHP_SELF']
Da es sich offenbar um ein sich selbst aufrufendes
Skript handelt, solltest Du mal den Artikel zum
"Affenformular" lesen und umsetzen:
http://www.dclp-faq.de/q/q-stil-normalform.html
Deine Art der Reaktion bei fehlenden Eintraegen
ist nicht das Optimum an Kundenfreundlichkeit.
if ($action == "submitEintrag")
{$nameFORM = trim ($nameFORM);
$emailFORM = trim ($emailFORM);
$titelFORM = trim ($titelFORM);
$kommentarFORM = trim ($kommentarFORM);
u.s.w.
Du verwendest immer noch die Eingaben aus dem Formular als globale Variablen.
Das ist unsicher und veraltet.
Statt Besser
$action $_POST['action'] oder $_REQUEST['action']
$nameFORM $_POST['action'] oder $_REQUEST['nameFORM']
u.s.w.
Das Skript wird auf neuen PHP-Installationen,
wo register_globals auf OFF ist, nicht funktionieren, siehe
http://www.dclp-faq.de/q/q-formular-register-globals.html
Und lies unbedingt:
dclp-FAQ: Wie unterscheide ich böse Variablen von guten?
http://www.dclp-faq.de/q/q-security-variablen.html
Statt nur mit trim() solltest Du die uebergebenen Variablen
richtig kontrollieren und "harmlos" machen.
Ich wuerde zudem andere Namen verwenden, damit im spaeteren
Skript klar ist, dass es sich um die kontrollierten
Variablen handelt.
$nameintern=""; // Um auch bei register_globals ON sicher zu sein...
$nameintern=htmlspecialchars(strip_tags(trim($_REQUEST['nameFORM'])));
u.s.w.
Lies im PHP-Manual den Abschnitt "Predefined Variables":
(englisch, die deutsche Uebersetzung ist unvollstaendig/veraltet)
http://www.php.net/manual/en/language.variables.predefined.php und
http://www.php.net/manual/en/reserved.variables.php
$zensiert = str_replace("Schimpfwort","*****",$zensiert);
$zensiert = str_replace("Schimpfwort","*****",$zensiert);
$zensiert = str_replace("Schimpfwort","****",$zensiert);
$zensiert = str_replace("Schimpfwort","***",$zensiert);
$zensiert = str_replace("Schimpfwort","*****",$zensiert);
Tip: str_replace() kann auch mit Arrays umgehen.
http://www.php.net/manual/de/function.str-replace.php
Das macht alles viel einfacher, und man muss die
Funktion nur ein einziges Mal aufrufen:
$schimpfwoerter=array("schimpfwort1", "schimpfwort2", ... );
$ersatz="***";
$zensiert=str_replace($schimpfwoerter,$ersatz,$kommentar);
Gruesse,
Thomas
P.S.
Danke im vorraus.
Schreibt man immer noch mit einem "r".
Auch wenn Google ca. 47'000 "vorraus" findet:
http://www.google.com/search?q=vorraus
Nach neuer Rechtschreibung uebrigens "im Voraus":
http://www.duden.de/neue_rechtschreibung/beispiele/i.html