Kommentarfunktion tut nicht ganz richtig

  • Ich zeug euch erstmal das script:

    Immer wenn ich senden drücke dann schickt er trotzdem ein eintrag raus, soll er natürlich nicht. und wenn ihr sonstige verbesserungen entdeckt lasst es mich wissen^^

    schönen feiertag abend noch, ich mag diese ruhigen tage irgendwie nicht so..

  • Diesen Fehler kann man leicht finden mit


    Richtig debuggen

    Man bemerkt, dass ein Skript nicht das tut, was es soll.
    Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL);
    Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysql_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

  • Dein Problem liegt darin, dass du immer $name und $kommentar erstellst und dann abfragst, ob es existiert - tut es natürlich immer.

    Diese Zeile ist der Übeltäter:

    PHP
    if(isset($name) && isset($kommentar))

    Mach lieber das hier:

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Dodo, die Zeile

    PHP
    if(isset($_POST['senden'], $_POST['name'], $_POST['kommentar']))


    wird die Sache nicht besser machen, denn $_POST['name'] und $_POST['kommentar'] sind auch gesetzt, wenn sie leer sind. ;)

  • HEy danke so schnelle hilfe. spitzzzzzze!

    So funktionierts dann jetzt auch, vielen Dank

  • Dodo, die Zeile

    PHP
    if(isset($_POST['senden'], $_POST['name'], $_POST['kommentar']))


    wird die Sache nicht besser machen, denn $_POST['name'] und $_POST['kommentar'] sind auch gesetzt, wenn sie leer sind. ;)

    Lieber Gast, bitte bemerke, dass es noch mehr Änderungen gab.
    Ich habe das alte isset zu einem empty gemacht.

    Böse Zungen würden ja jetzt sagen "Wer lesen kann, ist klar im Vorteil"

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Und das kann man mit einer Zeile erschlagen:

    PHP
    if(!empty ($_POST['name']) && !empty($_POST['kommentar']))


    Böse Zungen würden ja jetzt sagen "Erst denken, dann schreiben"

  • Ich bin der unregistrierte der diesen Beitrag erstellt hat, soviel mal dazu.

    Hey Leude könnt ihr mir zeigen wie man die einträge automatisiert, sagen wir mal alle 3sec automatisch?

  • Dein Problem liegt darin, dass du immer $name und $kommentar erstellst und dann abfragst, ob es existiert - tut es natürlich immer.

    Diese Zeile ist der Übeltäter:

    PHP
    if(isset($name) && isset($kommentar))

    Mach lieber das hier:

    Ich hab das Ganze jetzt nur mal so überflogen, aber macht diese Zeile hier Sinn?

    PHP
    if(empty($name) && empty($kommentar))

    Weil diese Abfrage würde nur eine Eintragung zulassen, wenn beide Variablen leer sind.

    Sollte es nicht eher heißen:

    PHP
    if(!empty($name) && !empty($kommentar))

    (Das ist mir jetzt nur so ins Auge gestochen ;) )

    PHP
    if(isset($this) || !isset($this)){ // that's the question...
  • so sieht mein script nun aus

    Ich möchte nun das wenn beitrag gesendet dann hängt das irgendwo im zwischenspeicher noch, und drückt man f5 dann kommt selbe nachricht nochmal, wie macht man das das nicht mehr kommt neue nachricht also selbe nachricht

  • Du machst die Datei 2x mit fopen auf, aber nur einmal zu. Baue mal nach dem fwrite ein fclose ein.

  • Wenn das erste fopen im if block ist funktioniert es leider nicht mehr:

    Zitat

    Warning: fopen(kommentare.txt) [function.fopen]: failed to open stream: No such file or directory in D:\xampp\htdocs\kommentare\index.php on line 102

    Zitat

    Warning: fpassthru() expects parameter 1 to be resource, boolean given in D:\xampp\htdocs\kommentare\index.php on line 104

    Zitat

    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\xampp\htdocs\kommentare\index.php on line 106

  • 1. Mit dem if-Block meinte ich if(!empty($name) && !empty($kommentar)) es macht ja nur Sinn die Datei zu öffnen, wenn man wirklich schreiben will
    2. Die Fehlermeldung besagt, dass die Datei nicht existiert. Prüfe vorher mit file_exists

  • Habe file_exists() nun rein und die fopen anweisung beim if empty. Meine frage war aber wieso nach f5 der kommentar nochmal geschrieben wird. Wie kann ich machen das wenn f5 und schon geschrieben wurde, das nicht nochmal geschrieben wird? Ansatz??

    Das kann doc nicht so schwer sein, ich versuche ganzen vormittag bei php.net und google lösungen zu finden aber weiter als bisher komme ich nicht. Na immerhin funktioniert es mit kommentare schreiben

  • Der aktueller script:
    das fopen muss am anfang stehen nicht in der if(!empty...), denn dann wenn noch keine datei ist erstellt er sie nicht!!!

    Aber das eigentliche problem mit f5 ist immer noch nicht behoben, ich will kein code. ich möchte wissen wie es geht das wenn ein beitrag geschrieben wurde und man dann f5 drückt das es dann nicht nochmal einträgt

  • ich habe nun versucht es mit einer session zu lösen, ich kenne mich nicht so ganz gut aus. Wenn das formular aufgerufen wird kommt jetzt gleich Bereits kommenatr abgegeben:

    das orginal ist genauso geschrieben wie das auf mein rechner, bitte werft noch mal erin blicjk drauf

  • Hey ich habe nun versucht das mit der session zu lösen, aber es tut nicht ganz normal. er gibt immer doppelte einträge aus bei f5 und das soller nicht, er sagt zwar kommentar beireits abgegeben aber postet trotzdem noch einen. gibts irgendwas wo man sagt fopen= no oder so


    [/code]

  • Danke euch allen, habs geschaft. merke etwas eigeninititative und schwupps hat man es ... :) dank dir ban... auch in dem anderem thread wo du echt viel geholfen hast, habe jetzt beide kombiniert, funktioniert reibungslos. DIe komplette quellcode lösung will ich hier nur nicht posten. ist einfach zu genial und simpel programmiert. Und ich brauch weder captcha noch sonst einen spamschutz, es kann trotzdem nicht für spam missbraucht werden. THANKS BANDITI, du bist der geilste :) wenn auch streng!!!!! ABer gut für mich, loool ich hab php begriffen