Kommentarspam (mit Minutensperre) vermeiden

  • Hi,

    ich möchte, dass die eingeloggten Benutzer auf meiner Seite nur alle 3 Minuten einen Kommentar verfassen können. Allerdings habe ich trotz Google es nie so hinbekommen, wie es sein sollte.

    Code
    1. if( !empty( $_POST['comment'] )) {
    2. if( !$userdata )
    3. $out->setContext( "error", "Logge dich bitte erst ein, um etwas zu kommentieren!" );
    4. else
    5. $db->insert( $prefix."news_comment", array( "news" => $news['id'], "link" => $_SERVER['HTTP_REFERER'], "content" => $_POST['comment'], "farbe" => $_POST['farbe'], "reaction" => $_POST['reaction'], "ip" => $_SERVER['REMOTE_ADDR'], "autor" => mysql_real_escape_string( $userdata['name'] )));
    6. }

    So sieht der Part des Formulares aus (das Formular befindet sich extern). Nun soll dort eine 3 minütige Sperre eingerichtet werden, die es vermeidet mittels F5 oder Refresh zu spammen.
    Wie bekomme ich das hin?

  • Hey,


    du nutzt wie ich sehe noch die function mysql_real_escape_string() . Diese ist schon lang deprecated (veraltet). Siehe auch http://php.net/manual/de/intro.mysql.php.


    Ich würde die Spalte createdAt, welche die Terminzeit (datetime) beinhaltet, aus der DB auslesen. Dann ne weitere DateTime erstellen welche die aktuelle Zeit besitzt. Nun beide subtrahieren un überprüfen ob die Minute größer als 3 ist. Wenn ja wird das Insert-Statement ausgeführt, wenn nein Ausgabe der Fehlermeldung.

  • Beispiel: