Zeitsperre bei GB mit Cookies

unlord

Erfahrenes Mitglied
mahlzeit...
hab mal wieder ein nettes Problem für euch, auf dessen Lösung ich einfach nicht komme...
bin jetzt schon zig-mal über den code gegangen aber ich find den Fehler einfach nicht... also es geht um ein Gästebuch, bei dem ein User nur alle 5 Minuten posten darf... um das zu verwirklichen hab ich es mal mit cookies versucht und da man die cookie-funktionen ja nicht irgendwo in den code reinschreiben kann, steht das hier am anfang der index.php, in die alle seiten eingebunden werden:

PHP:
if(isset($_GET["page"]) AND ($_GET["page"] == "gaestebuch")) {
		if(isset($_POST["gbname"])) {
			if(trim($_POST["gbname"] != "") AND (trim($_POST["gbcontent"] != ""))) {
				$contentPieces = explode(" ", $_POST["gbcontent"]);
				$numbOfElements = count($contentPieces);
				$i = 0;
				$lenError = 0;
				while($i < $numbOfElements) {
					$strLength = strlen($contentPieces["$i"]);
					if($strLength > 30) {
						$lenError++;
					}
					$i++;
				}
				if($lenError != 0) {
					$postStatus = "lenError";
				} else {
					if(isset($_COOKIE["Gaestebuch"]) AND ($_COOKIE["Gaestebuch"] == 1)) {
						$postStatus = "timeError";
					} else {
						setcookie("Gaestebuch", "1", time() + 300);
						$postStatus = "success";
					}
				}
			} else {
				$postStatus = "emptyError";
			}
		}
	}

...dieses Script überprüft
1. ob die benötigten felder ausgefüllt sind
2. ob jemand spamen will und wörter, die länger als 30 zeichen sind, benutzt
3. ob derjenige schon vor mehr als 5 mins gepostet hat

die Anweisung um Cookies zu setzen kann ich ja nur im Header geben, da es sonst zu der bekannten Fehlermeldung (header already set...) kommt... nun werden je nach wert der $postStatus-Variable in dem GB-File Anweisungen ausgeführt:

PHP:
if(isset($postStatus)) {
		if($postStatus == "lenError") {
			echo '<font color="red">Bitte benutzen Sie keine Wörter, die länger als 30 Zeichen sind.</font><br><br>';
		} elseif($postStatus == "timeError") {
			echo '<font color="red">bSie dürfen nur alle 5 Minuten einen Eintrag hinzufügen.</font><br><br>';
		} elseif($postStatus == "success") {
			$query = "INSERT INTO gaestebuch (Name, Mail, Content, Datum, Zeit, Homepage) VALUES (".$_POST["gbname"].", ".$_POST["gbmail"].", ".$_POST["gbcontent"].", $currentDate, $currentTime, ".$_POST["gbhomepage"].")";
			mysql_query($query);
			echo "Der Gästebuch-Eintrag wurde erfolgreich hinzugefügt.<br><br>";
		} elseif($postStatus == "emptyError") {
			echo '<font color="red">Die Felder "Name" und "Eintrag" müssen ausgefüllt werden.</font><br><br>';
		}
	}

wenn ich mich nun im debugging versuche und über die letzte { echo $postStatus; setze, wird (fals ich nich gerade schonmal gepostet habe) "success" ausgegeben... trotzdem wird kein eintrag in die MySQL-Tabelle gemacht... nur der Cookie wird gesetzt und der Satz wird ausgegeben... warum

zweites Problem...
obwohl der Cookie gesetzt wird und unten folgendes steht:

PHP:
<?php
        if(isset($_COOKIE["Gaestebuch"]) AND ($_COOKIE["Gaestebuch"] == 1)) {
		echo 'Sie dürfen nur alle 5 Minuten einen Eintrag hinzufügen.</font><br><br>';
	} else {
?>
Code:
neuen Gästebucheintrag erstellen<br><br><br>
<form name="gaestebuch" action="index.php?page=gaestebuch" method="POST">
Name*<br><input type="text" name="gbname" size="25" class=inputs><br>
E-Mail<br><input type="text" name="gbmail" size="25" class=inputs><br>
Homepage<br><input type="text" name="gbhomepage" size="25" class=inputs><br>
Eintrag*<br><textarea class=inputs name="gbcontent" cols="55" rows="9"></textarea><br><br>
<a href="pages/addSmilies.php?formName=gaestebuch" target="Smilies" OnClick="window.open('','Smilies','top=50,screenX=50,left=100,screenY=100,height=260,width=250')">Smilie-Liste</a><br>
(Felder mit * müssen ausgefüllt werden)<br><br>
<input type="submit" value="Eintragen" class=inputs>&nbsp;&nbsp;<input type="reset" value="Angaben löschen" class=inputs></form>

kommt direkt nach dem eintragen nicht die Meldung "Sie dürfen nur alle 5...", sondern erst nach dem aktualisieren der site

naja wenn ihr es bis hierhin geschafft habt hoffe ich ihr könnt mir helfen ^^

mfg
unlord
 
Hi,
mach mal um zu testen, was er ausgibt:
PHP:
if(isset($postStatus)) { 
		switch($postStatus)
		{
			 case "lenError": 
					echo '<font color="red">Bitte benutzen Sie keine Wörter, die länger als 30 Zeichen sind.</font><br><br>'; 
					break;
 
			 case "timeError":
					echo '<font color="red">bSie dürfen nur alle 5 Minuten einen Eintrag hinzufügen.</font><br><br>'; 
			 case "success":
					$query = "INSERT INTO gaestebuch (Name, Mail, Content, Datum, Zeit, Homepage) VALUES (".$_POST["gbname"].", ".$_POST["gbmail"].", ".$_POST["gbcontent"].", $currentDate, $currentTime, ".$_POST["gbhomepage"].")"; 
					$qry = mysql_query($query); 
					if($qry)
						 echo mysql_error($qry);
 
					echo "Der Gästebuch-Eintrag wurde erfolgreich hinzugefügt.<br><br>";
					break;
 
			 case "emptyError":
					echo '<font color="red">Die Felder "Name" und "Eintrag" müssen ausgefüllt werden.</font><br><br>'; 
					 break;
 
			 default:
					echo $postStatus;
					break;
		} 
	}

Debuggst du wirklich PHP Dateien? Wenn ja, mit welchem Programm?

So Long
aKraus
 
also wenn ich den code zu eintrage wie du in da stehen hast ist wieder genau das gleiche wie davor... steht zwar die meldung für success da aber es wird kein eintrag gemacht... aber ich glaube du meintest eigentlich if(!$qry)... wenn ich das einsetze kommt diese fehlermeldung:

Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in c:\programme\wamp\homepages\pages\gaestebuch\index.php on line 16

die kommt doch normalerweise wenn man z.b. eine falsche tabelle für den INSERT INTO befehl angegeben hat oder?

mfg
unlord

EDIT: ok hab den fehler gefunden >_<
 
Zuletzt bearbeitet:
Zurück