Datei zum Erstellen von Einträgen
Enrico
- php
Hallo,
Ich habe nun endlich die PHP-Datei zum Erstellen von Einträgen in unser Gästebuch fertig.
Da ich den Code - als PHP-Neuling - aus mehreren Anleitung und Anregungen zusammengesetzt habe, könnte es durchaus noch den einen oder anderen Fehler bzw. die eine oder andere Verbesserungsmöglichkeit geben.
Unsicher bin ich mir auf jeden Fall bei folgenden Punkten:
-Methode des HTML-Formulars
-Die Vermeidung von Spamming
Deswegen wäre es nett von Euch, wenn Ihr den Code mal durchschauen und mir eventuelle Fehler oder Verbesserungsmöglichkeiten mitteilen könntet.
Entschuldigt bitte vielmals die Länge des geposteten Codes, aber ich wollte Euch Einsicht in den kompletten PHP-Code geben, da nur so mögliche Fehler oder Verbesserungsmöglichkeiten ersichtlich werden (dürften).
Ich habe den Code um umfangreiche Überprüfungen über Javascript und HTML-Anweisungen zur optischen Gestaltung weggelasen.
Hier nun der Code:
<html>
<head>
[...]
</head>
<body>
<form method="post">
[...]
<input type="text" name="txt_name" size="20">
<input type="text" name="txt_email" size="20">
<input type="text" name="txt_homepage" size="20">
<textarea rows="5" name="txt_kommentar" cols="20"></textarea>
[...]
</form>
<?php
if ($txt_name && $txt_kommentar)
{
//
// Session starten; ID und Zeitstempel übergeben
//
@session_start();
echo '<input type="hidden" name="id" value="<?=session_id()?>">';
echo '<input type="hidden" name="zeitstempel" value="<?=time()?>">';
//
// IP und Host ermitteln
//
if ($_SERVER)
{
if ($_SERVER[HTTP_X_FORWARDED_FOR])
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
elseif ($_SERVER["HTTP_CLIENT_IP"])
$ip = $_SERVER["HTTP_CLIENT_IP"];
else
$ip = $_SERVER["REMOTE_ADDR"];
}
else
{
if (getenv('HTTP_X_FORWARDED_FOR'))
$ip = getenv('HTTP_X_FORWARDED_FOR');
elseif (getenv('HTTP_CLIENT_IP'))
$ip = getenv('HTTP_CLIENT_IP');
else
$ip = getenv('REMOTE_ADDR');
}
$host = gethostbyaddr($ip);
//
// Spamming verhindern
//
$datei = "CSV_gaestebuch_eintraege.csv";
$lines = file($datei);
foreach ($lines as $line)
{
if (strpos($line, $ip !== false && strpos($line, $host !== false) // IP und Host bereits eingetragen
{
$zeile = explode('|', trim($line));
if ($stempel + 43200 < time())
{
//
// Erneuter Eintrag innerhalb Sperrzeit
//
$spam = 1;
break;
}
else
{
//
// Erneuter Eintrag ausserhalb Sperrzeit
//
$spam = 0;
break;
}
}
}
if ($spam = 0) // Kein Spamming
{
//
// Eingaben formatieren und entschärfen
//
$name = strip_tags($name);
$name = stripslashes ($kommentar);
$name = trim ($kommentar);
$kommentar = strip_tags($kommentar);
$kommentar = stripslashes($kommentar);
$kommentar = trim($kommentar);
$kommentar = ereg_replace("\r\n", "\n<br>", $kommentar);
$kommentar = ereg_replace("\r\n\r\n", "\n<p>", $kommentar);
//
// Datum und Uhrzeit der Eingabe formatieren
//
$tag[0] = "Sonntag";
$tag[1] = "Montag";
$tag[2] = "Dienstag";
$tag[3] = "Mittwoch";
$tag[4] = "Donnerstag";
$tag[5] = "Freitag";
$tag[6] = "Samstag";
$wochentag = $tag[date( "w")];
$jahreszahl = date( "Y");
$tageszahl = date( "d");
$monatszahl = date( "m");
$datum = $wochentag.", ".$tageszahl.".".$monatszahl.".".$jahreszahl;
$uhrzeit = (date("H:i.s")." Uhr");
$stempel = time();
//
// Eintrag zusammensetzen
//
$eintrag = base64_encode($name."|".$datum."|".$uhrzeit."|".$email."|".$kommentar."|".$ip."|".$host."|".$stempel);
// Entschlüsselgung über "base64_decode()"
//
// Neuen Eintrag an Dateianfang schreiben
//
$datei = "CSV_gaestebuch_eintraege.csv";
$fp = fopen($datei,"r+");
$sicherung = fread($fp,filesize($datei));
rewind($fp);
fputs($fp,$eintrag\n$sicherung);
fclose($fp);
//
// Sessions löschen
//
session_unset();
$_SESSION=array();
}
else // Spamming
{
// Hinweis auf verfrühten Eintrag
}
}
?>
</body>
</html>
Vielen Dank für Eure Bemühungen.
Gruss, Enrico