Kein Gästebuchspam?

raven16

Lieutenant
Registriert
Nov. 2008
Beiträge
580
Hi,

Hab mir so nen Formular fürn GB geschrieben und das eintragen funktionierte soweit... nur grad hab ich gesehen das ich auf einmal über 150 leere einträge in der Datenbank hab -.-
kann ich das irgendwie verhindern ,indem man das nur losschicken kann, wenn mind. 2 felder des gbs ausgefüllt sind?

Hier der Quelltext
PHP:
<div class="boxtitle">Gästebuch</div> 
<div class="boxinhalt">
	
	<table class="gaestebuchtable">
	<tr>
	<td>
		<form method="post"><br>
		<input type="text" name="name">
			<br><font class="small">Dein Name*</font><br><br>
		<input type="email" name="email">
			<br><font class="small">Deine Email</font><br><br>
		<textarea name="eintrag" class="gaestebuch"></textarea>
			<br><font class="small">Deine Grüße*</font><br><br>
		<input type="submit" name="valider" value="Eintragen"><br><br>
		</form>
		<?php
			$sql="INSERT INTO gaestebuch (Name, Email, Text)
				VALUES('".mysql_real_escape_string($_POST[name])."',
						'".mysql_real_escape_string($_POST[email])."',
						'".mysql_real_escape_string($_POST[eintrag])."')";  
					$result = mysql_query($sql);
					if (!$result) 
					{
						die('SQL Befehl konnte nicht ausgeführt werden. ' . mysql_error());
					}
				
			
			
		?>
	</td>	
	<td>
		<?php
			
		?>
	</td>
	</table>
</div>
 
Es handelt sich hier nicht um SPAM, sondern um ein komplett falsch geschriebenes Skript! Du machst immer ein INSERT, auch wenn sich jemand nur das Formular anschaut.



Du musst entweder abfragen, ob es sich um ein POST Request handelt, oder eine eigene PHP Datei angeben, die nur die POST Daten verarbeitet und nicht gleichzeitig das Formular erzeugt.
 
Genau. Einfach
if($_POST['valider']&&strlen($_POST['eintrag'])>4){
//sql-Anweisungen ausführen
}
 
Heißt das soviel wie:

Wenn der Button und der Eintrag zusammenhängen und die Textarea mehr als 4 Zeichen hat, dann führe die sql-Anweisungen aus?

Also könnte ich wenn das so wäre mehrere anweisungen ausführen :
PHP:
<?php
     if ($_POST[Valider]&&strlen($_POST[name])&&strlen[eintrag])>4)
     {
          //sql-anweisungen
     }


?>

Das müsste dann ja bedeuten, dass der name und der eintrag im zusammenhang mit dem submitbutton jeweils mehr als 4 zeichen haben müssen oder?
 
Zuletzt bearbeitet:
Er prüft, ob die Variable valider per POST übergeben wurde und (&&) ob die Länge (strlen) von eintrag größer als 4 Zeichen ist.

Ist also ein relativ primitiver Spamschutz, der nur die Zeichenlänge überprüft. Wenn ich also tr§4w eintippe, meckert das Script auch nicht.

Beim Namen könnte man bspw. prüfen, ob nur Buchstaben und keine Zahlen+Sonderzeichen eingegeben wurden. Bei der E-Mailadresse könnte man auf das @-Zeichen prüfen u.ä.
 
if($_POST['valider'])
{} //also erst machen wenn button gedrueckt wird

if(!empty($_POST['eintrag']))
{} //erst machen wenn $_POST['eintrag'] nicht leer oder 0 oder NULL ist.

oder halt die isset() die allerdings gesetzt ist. fuer uns also uninteressant

@raven16 : das wird nichts, wenn schon dann denn schon so:
if ($_POST[Valider]&&strlen($_POST[name])>4&&strlen[eintrag])>4)
{
//sql-anweisungen
}
(wobei glaube nich mal das geht weil es eig $_POST['name'] sein muss)

nen guter spamschutz wäre nen capcha und ne black- und whitelist ;)
 
Zuletzt bearbeitet:
Danke für die Erklärungen^^
Versuch das noch nen bissl zu verstehen xD

Und datum und uhrzeit kommt noch... will ers mal ein und ausgabe fertigbekommen
 
Zurück
Oben