Philipp: MySQL/Formular: Daten werden auch nach Aktuali. geschrieben

Hallo,
 ich bin immer noch bei meinem alten Problem. Ich habe ein Formular (2x Edit), mit dessen Hilfe der Benutzer Daten in meine MySQL-Datenbank schreiben kann. Dies soll eigentlich dann passieren, wenn er auf den "OK"-Button geklickt hat (submit). Aber leider passiert das gleiche auch bei einer (browserseitigen) Aktualisierung der Seite. Was kann ich dagegen tun? Ich hab schon auf http://ffm.junetz.de/members/reeg/DSP/ geguckt, aber da werden die Daten an ein anderes PHP geschickt. Hier der Code:

include("config.php");

$db_connect = mysql_pconnect($db_host, $db_user, $db_password) or die ("Fehler: Verbindung fehlgeschlagen.");
 mysql_select_db($db_name, $db_connect) or die("Fehler: Ausgewählte Datenbank ist nicht vorhanden.");
<?php
 echo "<form action="$PHP_SELF" method="post">";
 echo " <input name="user" size="60" maxlength="60"><br>";
 echo " <input name="comment" size="60" maxlength="60"><br>";
 echo " <input type="submit" value="OK">";
 echo " <input type="reset" value="Abbrechen">";
 echo "</form>";

mysql_query("CREATE table $db_table(ID INT NOT Null AUTO_INCREMENT Primary Key, user VARCHAR(20) NOT Null, comment VARCHAR(100) NOT Null)");
 mysql_query("INSERT into $db_table(user, comment) VALUES('$user', '$comment')") or die ("Fehler beim Eintragen.");

mysql_close($db_connect);

?>

  1. Hi,

    du musst einfach nach dem eintragen auf eine neue seite gehen, mit header()
    .
    .
    mysql_close($db_connect);
    header( Location: "http://www.server.de/erfolgreicheingetragen.html");

    Vor header darf keine ausgabe an den Browser sein.

    mfg
    Alex

    1. mysql_close($db_connect);
      header( Location: "http://www.server.de/erfolgreicheingetragen.html");

      Da kriege ich ein Parse error: parse error, unexpected ':' in /home/www/htdocs/poly-pixel.de/mysql/write.php on line 22

      1. Hallo Phillip,

        Da kriege ich ein Parse error: parse error, unexpected ':' in /home/www/htdocs/poly-pixel.de/mysql/write.php on line 22

        In der Tat, richtig. Wie du sicherlich auch selbst durch Nachschlaen im
        Manual entdeckt hättest, wäre header("Location: http://www.server.tld/");
        richtig.

        Grüße
          David

        --
        >>Nobody will ever need more than 640k RAM!<<
        1981 Bill Gates
  2. Hallo Phillip,

    Schau dir mal dieses Kapitel aus de FAQ an, das sollte was für dich sein:

    29.17. Wie kann ich Reloads durch den User erkennen und verhindern?
    http://www.dclp-faq.de/q/q-phplib-reloads.html

    Achja, der include()- und mysql_select_db()-Aufruf sollte sicherlich innerhalb
    des PHP-Codes geschehen, oder? ;)

    Grüße
      David

    --
    >>Nobody will ever need more than 640k RAM!<<
    1981 Bill Gates
  3. Ich hab jetzt einfach eine Abfrage, die reagiert, wenn nichts im Formular drin steht. Nunja, dass geht so lange gut, bis man schon einmal was eingetragen hat. Das ergebnis nach ein paar mal Aktualisieren ist folgendes:
    0
    Test
    Test
    18
    Test2
    Test2
    19
    Test2
    Test2
    23
    asdf
    asdfasdfa
    22
    Test2
    Test2
    21
    Test2
    Test2
    20
    sdf
    sdf
    24
    asdf
    sfd
    25
    Test2
    Test2
    26
    asdf
    sfd
    27
    asdf
    sfd

    Ich sollte erwähnen, dass ich nur Test2 eingeben habe. Wo jetzt die ganzen sfd und asdf herkommen weiß ich nicht.

    1. Hallo Philipp (entschuldige bitte, dass ich bisher konseqent deinen Namen
                     mit falsche Dopplungen schrieb)

      Ich hab jetzt einfach eine Abfrage

      Die hast du, ja. Wir kennen sie nicht.

      Wo jetzt die ganzen sfd und asdf herkommen weiß ich nicht.

      Das mag von mir stammen. Ich habe einmal das Formular ausprobiert und 'asdf'
      sind die Buchstaben unter der linken Hand bei mir, die ich zum Testen drücke.
      Mag sich da noch ein Problem verstecken? ;)

      Grüße
        David

      --
      >>Nobody will ever need more than 640k RAM!<<
      1981 Bill Gates
      1. Die hast du, ja. Wir kennen sie nicht.

        Stimmt...;-) Nichts großes:
         if($user != "" && $comment != "")
          {
           mysql_query("CREATE table $db_table(ID INT NOT Null AUTO_INCREMENT Primary Key, user VARCHAR(20) NOT Null, comment VARCHAR(100) NOT Null)");
           mysql_query("INSERT into $db_table(user, comment) VALUES('$user', '$comment')") or die ("Fehler beim Eintragen.");
          }
        Naja, vor dem eintragen geht es, nach dem ersten Eintrag funzt es nicht mehr.

        Das mag von mir stammen. Ich habe einmal das Formular ausprobiert und 'asdf'
        sind die Buchstaben unter der linken Hand bei mir, die ich zum Testen drücke.

        Hab ich kurz nach meine Post auch schon bemerkt - kommt davon, wenn man komplette Fehlermeldungen postet. Wenigstens kennst du jetzt meine Adresse...;-)
        Nunja, das mit dem header geht jedenfalls auch net *heul*

        1. Hallo Philipp,

          if($user != "" && $comment != "")

          Ein Whitespace und das ganze ist ausgehebelt. Du kennst isset() bzw. empty()?

          Naja, vor dem eintragen geht es, nach dem ersten Eintrag funzt es nicht mehr.

          Weil danach die Variabeln gesetzt sind. Auch bei einem Reload bleiben sie es.
          Lese den Beitrag aus den FAQ, dort ist das, was du suchst, beschrieben.
          Und wenn du gerade da bist, dort ist auch ein Text darüber, warum du niemals
          Variabeln ungeprüft in deinem Script verarbeiten solltest ;)

          Wenigstens kennst du jetzt meine Adresse...;-)

          In der Tat, Herr Engel, ich schau mal auf ne Tasse Tee vorbei ;)

          Etwas irritierend fand ich das 15% unter dem Bildchen. Für einen Moment dachte
          ich, du hast einen "tollen" Preloader. Und vielleicht wäre ein kurzer
          Info-Text ("im Umbau" oder so) auch ganz angebracht.

          Grüße
            David

          --
          >>Nobody will ever need more than 640k RAM!<<
          1981 Bill Gates
          1. Ich glaube, ich hab gefunden, was ich gesucht habe:
            http://www.dclp-faq.de/q/q-formular-mehrfach.html
            Ja, das Design steht ja schon alles, aber leider haperts noch am PHP/MySQL-Code.

            Btw: Ich freu mich über den Besuch...^^