[HILFE] Gästebuch

Fabi_the_real

Mitglied
Hallo!

Hab schon wieder mal ein Problem. Nämlich hab ich aus einem Tutorial ein Gästebuch nach programmiert, bei dem, wenn man sich einträgt, und wieder auf Aktualisieren klickt, der Eintrag erneut eingetragen wird. Ihr könnt euch das ja mal anschauen:

http://www.fabi-the-real.de/gaestebuch/gb.php

Hier mal der Quelltext:

PHP:
<?php 
$id = "username"; 
$pw = "password"; 
$host ="localhost"; 
$database = "name der datenbank"; 
$table = "gbook"; 
$conn_id = mysql_connect($host,$id,$pw); 
mysql_select_db($database,$conn_id); 
$action = $HTTP_GET_VARS["action"]; 
if($action=="save") 
{ 
$content = "Der Besucher".$name." hat gerade einen Eintrag in Ihr Gästebuch vorgenommen!"; 
$an = "e@mail.de"; 
$betreff = "gaestebucheintrag"; 
@mail($an,$betreff,$content,"From: ".$email); 
$datum = time(); 
$inhalt = $inhalt; 
$name = ($name) ? $name : "unbekannt"; 
mysql_query("INSERT INTO $table (name,email,hp,inhalt,datum) VALUES ('$name','$email','$hp','$inhalt','$datum')"); 
} 
echo "<td width=75% height=100% align=center valign=top>"; 
if($action=="neu") 
{ 
echo "<a href='index.php?page=Guestbook'>Gästebuch<p></a>"; 
} 
else 
{ 
echo "<p><a href='".$HTTP_SERVER_VARS[PHP_SELF]."?action=neu&page=Guestbook'>Eintragen<p></a>"; 
} 
if($action=="neu") 
{ 
 
?> 
<style type="text/css"> 
<!-- 
.Stil3 {font-family: Arial, Helvetica, sans-serif; color: #000000; } 
--> 
</style> 
<table> 
<form action="<?php echo '".$HTTP_SERVER_VARS[PHP_SELF]."?action=save&page=Guestbook'; ?>" method=get> 
<tr> 
<input type="hidden" name="action" value="save"> 
<td><span class="Stil3">Name:</span></td> 
<td><input name=name type=text></td> 
</tr> 
<tr> 
<td><span class="Stil3">Email:</span></td> 
<td><input name=email type=TEXT></td> 
</tr> 
<tr> 
<td><span class="Stil3">Homepage: http://</span></td> 
<td><input name=hp type=text></td> 
</tr> 
<tr> 
<td><span class="Stil3">Eintrag:</span></td> 
<td><span class="Stil3"> 
	 <textarea name="inhalt" rows="6" cols="25"></textarea> 
</span></td> 
</tr> 
<tr> 
<td> </td> 
<td><input type=submit value="eintragen"></td> 
</form> 
</tr> 
</table> 
<?php 
} 
else 
{ 
$query = "SELECT * FROM $table ORDER BY datum DESC LIMIT 0,50"; 
$result = mysql_query($query); 
if(mysql_num_rows($result)) 
{ 
while($row=mysql_fetch_array($result))	 
{ 
$name = $row['name']; 
$email = $row['email']; 
$hp = $row['hp']; 
$inhalt = $row['inhalt']; 
$datum = date("d.m.Y/H:i:s",$row['datum']); 
echo "<table width='90%' valign='top' align='center'><tr><td width='75%' align='left'><b><a href=mailto:".$email.">".$name."</a></b></td><td align='right'>".$datum."</td></tr></table>"; //die ausgabe der daten 
$inhalt = nl2br($inhalt); 
echo "<table width='90%' align='center'><tr><td colspan='2'>".$inhalt; 
echo "</td></tr></table>"; 
if($hp=="") 
{ 
	echo "<tr><td></td></tr></table><p>"; 
} 
else 
{ 
	echo "<table width='90%' align='center'><tr><td width='95%'><a href='http://".$hp."' target='new'>".$hp."</a></td><td align=center><a href='#top'>top</a></td></tr></table><p>"; 
} 
flush(); 
} 
} 
else 
{ 
echo "<b>Es sind noch keine Eiträge vorhanden!</b>"; 
} 
} 
if($action==neu) 
{ 
echo "<a href='".$HTTP_SERVER_VARS[PHP_SELF]."?page=Guestbook'><p>Gästebuch</a>"; 
} 
else 
{ 
echo "<p><a href='".$HTTP_SERVER_VARS[PHP_SELF]."?action=neu&page=Guestbook'>Eintragen</a>"; 
} 
?>

Ich hab mir überlegt, dass man das vielleicht mit einer Zeitsperre, oder halt ip-Sperre regeln kann. Nur weiß ich nicht wie das geht, da ich ein absoluter neuling im Gebiet PHP bin.

Vielen Dank im Vorraus für eure Hilfe!

greetz,

Fabi
 
Also du willst verhindern, dass man 2mal hintereinander den gleichen Eintrag macht?
könnte man da nicht einfach hingehen und
unset($_POST)
nach dem Eintragen schreiben?

Zu der Zeitsperre:
Mach doch einfach eine neue Tabelle. In der trägst du dann die IP und den aktuellen Unix-Timestamp ein. Bevor dann ein Eintrag gemacht wird, überprüfst du, ob die IP in der DB ist. Wenn ja, überprüfst du, ob der Zeitpunkt sagen wir mal 1nen tag zurückliegt. Wenn auch das zutrifft, wird eingetragen. Wenn nicht, erhält er eine Meldung.
 
Das unset nach dem Eintragen in die DB das andere danach. Also:
PHP:
<?
$action = $HTTP_GET_VARS["action"];
if($action=="save")
{

#Entweder hier die Überprüfung
$sql = mysql_query("Select * From tabelle Where IP='".$_SERVER['REMOTE_ADDR']." AND LAST_POST>'".time()-84600."'");
$result = mysql_num_rows($sql);
if($result = 1)
{
	HIER EINE FEHLERMELDUNG
	exit;
}
else
{

    $content = "Der Besucher".$name." hat gerade einen Eintrag in Ihr Gästebuch vorgenommen!";
    $an = "e@mail.de";
    $betreff = "gaestebucheintrag";
    @mail($an,$betreff,$content,"From: ".$email);
	$datum = time();
	$inhalt = $inhalt;
	$name = ($name) ? $name : "unbekannt";
	mysql_query("INSERT INTO $table (name,email,hp,inhalt,datum) VALUES ('$name','$email','$hp','$inhalt','$datum')");
#Oder hier das löschen mit unset
#unset($_GET);
}

}

Ist ungetestet
 
das mit dem unset ist das wonach ich gesucht hab. Bloß funktioniert es nicht so ganz. Fällt dir nochwas ein?

thx for your help

fabi
 
Was geht da nicht? Hast du das unset auch auskommentiert, wenn du meinen Code genommen hast?
Ansonsten würde mir nur einfallen, das du $_GET['action'] auf null setzt.
 
was meinst du mit get[action] auf 0? Und was meinst du mit auskommentiert? Wenn du mit auskommentiert meinst, in einen Befehl umwandeln, dann ja.

mfg

fabi
 
Mit auf null setzten mein ich, das du nach dem eintragen
$_GET['action'] = "";
schreibst, anstelle von unset($_GET)

Mit auskommentieren wollte ich wissen, ob du das # vor unset entfernt hast.
 
also auskommentiert hab ich. Das mit
PHP:
$_GET['action'] = "";

hab ich auch probiert, und es auch nicht.
Sry, wenn ich weiter nerv, aber ich würd mich freuen, wenns endlich klappt.

mfg

fabian
 
Zurück