Reloadsperre Gästebuch

Alaniak

Erfahrenes Mitglied
Hallo zusammen,

ich habe das Tutorial über die Reloadsperre für einen Counter leicht abgewandelt für ein Gästebuch, aber so ganz will das nicht funktionieren:

PHP:
$sql = mysql_query("select * from ip where ip='$ipadress'");
if(mysql_num_rows($sql) < 1) {
   $zeit = time();
   $delzeit = $zeit + 300;
   mysql_query("insert into ip (zeit, delzeit, ip) values ('$zeit', '$delzeit', '$ipadress')");
} else {
									  	
   if (time() >= $delzeit)
   {
	mysql_query("delete from ip where ip='$ipadress'");
   } else {
      $ok = false;
      $errMessage = "Kein Eintrag erlaubt";
    }
									 	 
}

Also wenn kein Eintrag in der Tabelle "ip" vorhanden ist wird er in die Tabelle eingetragen und zwar die Eintragungszeit, die Zeit bis zum nächst möglichen Eintrag (5 min.) und die IP-Adresse.
Ist jedoch die IP schon eingetragen wird überprüft, ob die Zeit zum nächst möglichen Eintrag schon abgelaufen ist (IP wird gelöscht) oder nicht.

Jedenfalls läuft da irgendwas bei der Zeit Abfrage schief, weil die IP nicht für 5 Minuten gesperrt wird.
Kann mir da vielleicht jemand helfen?
 
Du definierst $delzeit in der If Bedingung, das heißt die Variable ist im Else Teil völlig unbekannt und die Bedingung wird immer fehl schlagen.
 
Hallo,

dei Problem liegt - wie du ja schon richtig vermutet hast - bei der Zeitabfrage. Du fragst ab, ob die derzeitige Zeit größer ist als die Zeit, zur der die IP gespeichert wurde. Ergibt natürlich keinen Sinn, weil das bereits nach 1 sekunde der Fall ist ;)

Also:
PHP:
if (time() >= ($zeit+300))
{ ...

$zeit liest du aus der DB aus, also die Zeit, wo die IP eingetragen wurde.

Und noch was: Speicher in der DB einfach nur die Zeit, wenn die IP das erste mal auf dem Gästebuch ist und natürlich die IP dazu.
$delzeit kannst du eigentlich vergessen.
 
Hallo,

dei Problem liegt - wie du ja schon richtig vermutet hast - bei der Zeitabfrage. Du fragst ab, ob die derzeitige Zeit größer ist als die Zeit, zur der die IP gespeichert wurde. Ergibt natürlich keinen Sinn, weil das bereits nach 1 sekunde der Fall ist ;)

Also:
PHP:
if (time() >= ($zeit+300))
{ ...

$zeit liest du aus der DB aus, also die Zeit, wo die IP eingetragen wurde.

Und noch was: Speicher in der DB einfach nur die Zeit, wenn die IP das erste mal auf dem Gästebuch ist und natürlich die IP dazu.
$delzeit kannst du eigentlich vergessen.

klappt leider auch nicht. Allerdings weiß ich jetzt genauer wo der Fehler liegt. Nur wie ich ihn los krieg weiß ich noch nich ;-)

Und zwar ist der Parameter $zeit immer die aktuelle Zeit, d.h. ich muss für die Abfrage der Zeit,den Wert des Feldes Zeit aus der Datenbanktabelle auslesen.
Wie mach ich das? Mit mysql_result() komm ich nicht zu Rande.
 
Zuletzt bearbeitet:
Also wenn ich richtig verstanden habe, weißt du nicht, wie du zu $zeit kommst, oder?
Da hat es wohl ein Missverständnis meinerseits gegeben, ich hab nicht gesehen, dass du die Variable $zeit schon verwendet hast...

Vielleicht gehts so:
PHP:
$sql = mysql_query("select * from ip where ip='$ipadress'");
if(mysql_num_rows($sql) < 1) {
   $t = time();
   mysql_query("insert into ip (zeit, ip) values ('$t', '$ipadress')");
} else {        
   $zeit = mysql_result($sql,0,"zeit");                
   if (time() >= ($zeit+300))
   {
    mysql_query("delete from ip where ip='$ipadress'");
   } else {
      $ok = false;
      $errMessage = "Kein Eintrag erlaubt";
    }
                                          
}
 
Warum so kompliziert?

PHP:
mysql_query("DELETE FROM `ip` WHERE `zeit` < '".time()."'") or die(mysql_error());
$sql = "SELECT `ip` FROM `ip` 
      WHERE `ip` = '".$my_ip."' AND `zeit` > '".time()."'";
$query = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($query) > 0)
{
  # IP ist noch gesperrt
}
else
{
  # Insert in die Tabelle
}
 
Aber wird der Eintrag nicht schon theoretisch nach 1 sek gelöscht? Weil mit
PHP:
DELETE FROM `ip` WHERE `zeit` < '".time()."'"

Werden ja alle Einträge gelöscht, die älter als der jetzige Zeitpunkt sind oder?
PHP:
DELETE FROM `ip` WHERE `zeit` < '".(time()-300)."'"
Wäre nicht das richtig?

Mfg
 
Ja, hast natürlich recht...

Ich ging davon aus, dass er nicht time() speichert, sondern eben time()+300.

Asche auf mein Haupt ;)
 
Zurück