2 Stimmen

PHP verhindert Kommentare, die sich selbst über $_POST posten, beizubehalten.

Also, ich arbeite an einem Kommentarskript. Es funktioniert gut, wenn Sie einen Kommentar posten, aber ich habe festgestellt, dass beim Aktualisieren der Seite, obwohl das Textfeld leer ist, trotzdem der gleiche Kommentar gepostet wird. Ich verstehe, dass dies daran liegt, dass ich die Variable bereits an $_POST gesendet habe und sie einfach diesen Wert in die Datenbank einfügt, aber wie kann ich dieses Problem vermeiden? Vielen Dank im Voraus, und hier ist mein Code: (Bitte nehmen Sie an, dass $username und $image bereits gesetzt sind)

if (isset($_POST['text']) && !empty($_POST['text']))
        {
            $text = $_POST['text'];
            $timeStamp = time();

            mysql_query("INSERT INTO comments VALUES ('$image','$username','$text','$timeStamp')");
        }

Und das HTML:

2voto

jeroen Punkte 89799

Der einfachste Weg, um das zu vermeiden, besteht darin, nach einer erfolgreichen Datenbankoperation umzuleiten:

...
mysql_query("INSERT INTO comments VALUES ('$image','$username','$text','$timeStamp')");
// Fehlerbehandlung
header('Location: /some/where');

Abgesehen davon sollten Sie wirklich auf PDO / vorbereitete Anweisungen umsteigen, um SQL-Injektionsprobleme zu vermeiden.

1voto

flowfree Punkte 15998

Der einfache Weg:

Nach dem Speichern in die Datenbank, laden Sie Ihre Seite neu:

header('Location: comment-form.php');

Dadurch wird der Browser das Absenden des Formulars "vergessen".

Der richtige Weg:

Generieren Sie einen Nonce und fügen Sie ihn als verstecktes Eingabefeld in Ihr Formular ein. Wenn das Formular abgesendet wird, stellen Sie sicher, dass $_POST['nonce'] mit $nonce in Ihrem Skript übereinstimmt.

Wie man Nonces erstellt und verwendet

1voto

dowilcox Punkte 23

Postest du auf derselben Seite, auf der du die Kommentare anschaust? Wenn ja, könntest du wahrscheinlich auf /a_page_where_i_submit_things.php posten und dann zur Seite mit den Kommentaren zurückleiten. Ich glaube, das sollte funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X