kostenloser Webspace werbefrei: lima-city


Formular beim Aktualisieren nicht mehr absenden

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Hi an alle
    ich habe ein formular, mit einem Textfeld und einem Absendebutton. Wenn man den klickt, wird der Text aus dem Textfeld an die Gleiche Seite gesendet, welche den Text in einer Textdatei speichert. wenn man die Seite jetzt aktualisiert wird der Text angezeigt, gleichzeitig aber auch das Formular erneut gesendet. wie kann ich soeine art "Doppelpost Sperre" einrichten??

    Ich dachte das würde über die ipadresse gehen (ip speichern und dann prüfen ob schon vorhanden) allerdings könnte man dann nicht 2 unterschiedliche Texte nacheinander senden und ich hätte eine Weitere datei um die ich mich kümmern muss.

    Ich hoffe ihr könnt mir helfen!!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. je nachdem wofür du das brauchst, z.B.: Forum
    kannst du einfach überprüfen ob der letzte Eintrag des Users = aktueller post des Users -> wenn ja dann doppelpost
    bzw. halt mit der Ip-Adresse und dessen letzter Eintrag.

    ist mit Datenbanken eigl. relativ leicht zu lösen.

    Beitrag zuletzt geändert: 22.11.2009 20:44:34 von myhead
  4. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    mmm arbeite aber momentan noch mit txt-dateien.

    Mein Problem ist ja so: Formular und php-script sind auf einer Seite. Das heist wenn man aktualisiert wird das php script genauso ausgeführt wie wenn man auf Senden klickt (weil <form activate="">). Das man nicht automatisch einen Beitrag sendet nur weil man aktualisiert kann man ja umgehen in dem man prüft ob ein Text enthalten ist.(if ($text != "" ) {.....}).
    Allerdings speichert er aus irgendeinem Grund den gesendeten Text.

    Beispiel:

    Ich schreibe "hallo" und drücke auf "senden".
    Da der Text <> "" ist, erscheint der Text und das inputfeld ist wieder leer.

    Wenn ich jetzt aber aktualisiere (F5), dann wird der vorherige Text erneut gepostet.

    Leider hab ich keine Ahnung worann das liegt.
  5. w********t

    bei der Übergabe die IP-Adresse mit speichern
    und be jedesmal prüfen, ob die IP (in den letzen x Stunden) schon gesendet hat
    wenn schon da, dann = doppel Post (F5)
  6. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Na gut aber wie??
    So einfach ist das nähmlich auch wieder nicht!
  7. w********t

    doch, ganz einfach ... :)

    mit MySQL: http://www.php-resource.de/tutorial,6,IP-Sperre.htm

    ohne MySQL: http://www.php4-forum.de/beispiele/ip_sperre.htm

    es gibt noch viele andere solcher Beispiele / Tutorials / ...
    vom Prinzip fast alle gleich aufgebaut
    1. ermitteln aktuelle IP und Liste der gespeicherten IPs
    2. Vergleich ob aktuelle IP eine der gespeicherten ist
    3. wenn ja dan sperre, wen nein dan frei
    4. nach Ablauf einer Zeit gespeicherte IP wieder aus Liste löschen

    ... gefunden bei http://www.google.de/search?hl=de&q=php+ipsperre


    ... edit:
    sowas sollte auch hier mal in die Lima-City Tutorials rein, wird sicher oft gefragt
    ...

    Beitrag zuletzt geändert: 23.11.2009 16:30:38 von werbesmart
  8. Dabei wird die IP gesperrt. allerdings gibt es eine ganz einfache möglichkeit.
    Du überprüfst mit einer If-Schleife ob der Text, welcher gesendet wurde bereits in der Datei steht und nur wenn das nicht zutrifft wird er in der gespeichert.
    geht so:

    Erst speicherst du den Inhalt der Datei in einer Variable (hier $datei).
    Dann speicherst du den Text, der über das Formular gesendet wurde in $text.
    Dann folgt dieser Code:
    $g = explode($text, $datei);
    $a = count($g);
    if ($a > 1) { $action = false; }
    else { $action = true; }

    und die abspeicherung des textes darf jetzt nur erfolgen, wenn $action true ist:
    if ($action == true) {
    ...
    }
  9. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Danke. Ich habs jetzt so gemacht:

    Beim Click auf Senden wird folgendes gemacht/geprüft:

    1.Es wird geprüft ob der Inhalt != "" ist
    2.aus der Datei check.txt wird der gesamte Inhalt ausgelesen und in $textvergleich gespeichert
    3. der eingegebene Text ($text) wird mit $textgespeichert verglichen.
    -> wenn ungleich
    3.1. $text wird ans Ende der Datei einträge.txt geschrieben
    3.2 Die Datei ceck.txt wird mit dem Inhalt von $text überschrieben
    3.3 Die Seite wird aktualisiert
    -> wenn gleich
    3.1 Keine Reaktion
    3.2 check.txt wird nicht überschrieben

    So klappts.
    Allerdings hab ichs ohne IP gemacht, weil man dann nicht 2 mal nacheinander posten kann. so kann man 2 mal nacheinander oder auch 20 mal nacheinander aber eben nicht den gleichen Text!

    Danke an alle die mir geholfen haben!!!
  10. Wäre es net fast einfacher das Ganze in einer Session zu speichern? Villeicht mit einem Hiddenfeld.

    Man erstellt ein Formular mit eine Hidden

    <input type="hidden"name="postCheck" value="GenerierterZufallscode"/>


    Dann speicherst du in die Session

    $_SESSION["CODE"] == $_POST["postCheck"];


    Den Code speichert man dann zusätzlich zum Eintrag. Das wäre meiner Meinung nach besser, wenn man mit einem Systemerschaffenen Code arbeitet als mit einer IP.

    Grüße
    Color

  11. Oder du machst nach dem Absenden und Bearbeiten der Daten einen header() und leitest wieder auf die selbe Seite weiter. Wenn du dann F5 zum Neuladen drückst, sendet er (logischerweise) das Formular nicht mehr ab.
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!