Forumzeitsperre

  • Themenstarter Themenstarter lacie
  • Beginndatum Beginndatum
L

lacie

Hallo zusammen,
ich hab eine Zeitsperre für mein Forum gebastelt.
Der code sieht so aus:

PHP:
$now = time();
$d = "SELECT * FROM ".$GLOBALS['td_sperre']." WHERE nick='".$_SESSION['nick']."' AND typ ='forum'";
	$ee = mysql_query($d);
	$rr = mysql_fetch_assoc($ee);
	$postdate = strtotime($rr['erstellt']);
$ungueltig = $now - $postdate;

if ($ungueltig < $GLOBALS['forumsperre']) { 
    ait("alert","Du hast vor weniger als 10 Minuten schon gepostet, bitte warten"); 
} elseif($ungueltig >= $GLOBALS['forumsperre']){
## ZEIGE FORUM
}

Funktioniert auch wunderbar, bis zu einem Punkt:
Wenn der User die erste Sperre geschafft hat (bedeutet: gepostet hat und 5 Minuten gewartet hat, so das er wieder posten kann )
kann er unendlich viel posten ohne Sperre.

Weil: Der alte Eintrag immernoch in der Datenbank steht, und der neue ignoriert(gibt beim ersten gefunden Datum schon true zurück) wird.

Wie schaff ich es jetzt das der Eintrag wenn die Sperre vorbei ist gelöscht wird?!

Hab schon mehreres versucht, aber es klappt nie..

Zu den Datenbankfeldern:

td_sperre
- nick (Usernick aus Session)
- typ (hier forum)
- erstellt (datetime)

Ich hoffe ihr könnt mir helfen.. diese ganze time & date macht mich ganz wirr..

lacie
 
Versuch's mal mit diesem Query:

SQL:
SELECT `nick`, `typ`, MAX(`datetime`) AS `datetime`
FROM {$GLOBALS['td_sperre']}
WHERE `nick` = '{$_SESSION['nick']}' AND typ ='forum'
GROUP BY `nick`;
 
Zuletzt bearbeitet:
Ich probiers, könntest du mir aber noch kurz erläutern, was diese MAX und GROUP BY tut?

danke
 
MAX holt den maximalen Wert in der Spalte raus. Das Group by ist eigentlich, wenn ich es mir jetzt nochmal angucke, unnötig durch die Where Bedingung. Ansonsten gruppiert das GROUP BY, wie es schon selbst sagt, nach dem angegebenen Ausdruck (in dem Fall eine Spaltenbezeichnung). Das ist dann sinnvoll, wenn man zwar eine "Vereinheitlichungsfunktion" in einem speziellen Kontex verwenden möchte aber dennoch nur immer ein treffendes Ergebnis einer Gruppe erhalten möchte.
Ein dummes Beispiel, was das aber eventuell erklärt, wäre das Cachen der letzten Aktivität eines Benutzers, ohne dass ein Benutzer festgelegt wird, weil die letzte Aktivität für jeden User ausgegeben werden soll und nicht nur die, eines Nutzers:
SQL:
SELECT `nick`, `typ`, MAX(`datetime`) AS `datetime`
FROM {$GLOBALS['td_sperre']}
WHERE typ ='forum'
GROUP BY `nick`;

Würde dann nicht zB
Code:
user1 - abc - 12345
user1 - ead - 12345
user1 - foo - 12345
user2 - asd - 2341
user2 - pdf - 2341
ergeben sondern einfach
Code:
user1 - abc - 12345
user2 - asd - 2341
 
Wow, das hätte ich mir mal früher anschauen sollen.. ^^

Danke dir ;)
- Problem gelöst -
 
Zurück