Blümchen: Warum werden Doppelte Einträge gemacht?

Hallo euch allen,

hab da mal eine Frage und hoffe dass Ihr mir da weiter helfen könnt. Ich habe vor unter meine Bilder den User Kommentare schreiben zu lassen. Die DB und alles habe ich schon angelegt und auch das Script ist fertig.

Es werden auch die ganzen Daten eingetragen nur wenn ich auf Absenden klicke, dann wird der Eintrag zwei mal in die DB gemacht und zwar einmal mit dem Kommentar und User usw. und das zweite mal ist dann ein Eintrag drin ohne Kommentar.

*grml* könnt Ihr mir sagen, was ich da falsch mache?

Hier mal der PHP Code, der das alles verarbeitet:

<?php
$sql = "INSERT INTO kommentare_zu_den_bildern
(
idx_bild,
ip,
user,
kommentar,
datum
)
VALUES
(
'$idx_bild',
'" . $_SERVER['REMOTE_ADDR']. "',
'" . $_SESSION['benutzername'] . "',
'" . addslashes($_POST['kommentar']) . "',
NOW()
)
";
mysql_query($sql) OR die(mysql_error());
?>

Hier nun das Textfeld für die Komments:

<form action="photos_det.php?idx_bild=<?php echo $idx_bild; ?>" method="post" name="form1">
<table width="100%" height="10" border="0" cellpadding="4" cellspacing="2">
<tbody>
<tr>
<td width="58%"><p>
<input name="kommentar" id="kommentar2" size="40" class="chatfields" type="text">
</p></td>
<td width="42%"><input name="go" type="submit" class="chatfields" id="go" value="Abschicken"></td>

Hoffe mal, dass Ihr mir da weiter helfen könnt.

MFG,
Blümchen

  1. Moin,

    *grml* könnt Ihr mir sagen, was ich da falsch mache?

    Der hier gezeigte Codeschnipsel sieht gut aus.
    was gibt dir ein:
     echo $sql;
    aus?

    Evtl. liegt es nicht am eintragen sondern am auslesen der DB.

    SteBu

    1. Hallo,

      was gibt dir ein:
      echo $sql;
      aus?

      Hmm wenn ich das in den code einfüge und dann die Seite aufrufe also im Web, dann kommt folgendes:

      INSERT INTO kommentare_zu_den_bildern ( idx_bild, ip, user, kommentar, datum ) VALUES ( '23', '80.187.76.245', 'bluemchen', '', NOW() )

      Wenn ich dann in dem Feld wo ich den Kommentar was eintrag und dann abschicke dann kommt folgendes oben:

      INSERT INTO kommentare_zu_den_bildern ( idx_bild, ip, user, kommentar, datum ) VALUES ( '23', '80.187.76.245', 'bluemchen', 'kkkkkk', NOW()

      Gruß Blümchen

      PS: Eine Ausgabe habe ich ja noch nicht es geht nur mal darum, dass ich was in die Db eintragen lasse!

      1. Moin,

        Hmm wenn ich das in den code einfüge und dann die Seite aufrufe also im Web, dann kommt folgendes:

        Jetzt verstehe ich dein Problem.

        Du prüfst beim Aufruf der Seite nicht ab, ob das Formular gesendet wurde.
        Also wird beim 1. Aufruf der Query ausgeführt(nat. ohne Kommentar) und beim absenden der Form wird das gemacht was du willst.
        Du musst durch eine Abfrage herausfinden ob die Seite an sich aufgerufen wurde oder ob das Formular gesendet wurd.

        SteBu

        1. Hallo,

          Jetzt verstehe ich dein Problem.

          das finde ich sehr gut :-)

          Du prüfst beim Aufruf der Seite nicht ab, ob das Formular gesendet wurde.

          Hmm das stimmt!

          Also wird beim 1. Aufruf der Query ausgeführt(nat. ohne Kommentar) und beim absenden der Form wird das gemacht was du willst.

          hmm das klingt logisch1

          Du musst durch eine Abfrage herausfinden ob die Seite an sich aufgerufen wurde oder ob das Formular gesendet wurd.

          Hmm sorry für die Frage aber wie muss ich das machen dass ich das überprüfen kann?

          Gruß Blümchen

          1. Hmm sorry für die Frage aber wie muss ich das machen dass ich das überprüfen kann?

            Du könntest schauen ob der Submit-Button gedrückt wurde:

            if (isset($_REQUEST['go']))
            {
             mysql_query($sql);
            }

            SteBu

            1. Hallo,

              hmm danke für den Code, aber an welche Stelle muss der denn hin? Ich habe das nun so gemacht:

              <?php  
              $sql = "INSERT INTO kommentare_zu_den_bildern  
              (  
              idx_bild,  
              ip,  
              user,  
              kommentar,  
              datum  
              )  
              VALUES  
              (  
              '$idx_bild',  
              '" . $_SERVER['REMOTE_ADDR']. "',  
              '" . $_SESSION['benutzername'] . "',  
              '" . addslashes($_POST['kommentar']) . "',  
              NOW()  
              )  
              ";  
              mysql_query($sql) OR die(mysql_error());  
              echo $sql;  
              if (isset($_REQUEST['go']))  
              {  
               mysql_query($sql);  
              }  
              ?>  
              
              

              aber so bringt es nichts, denn ich habe dann immer noch das gleiche wie ich in dem letzten Posting schon geschrieben habe.

              Gruß Blümchen

              1. aber so bringt es nichts, denn ich habe dann immer noch das gleiche wie ich in dem letzten Posting schon geschrieben habe.

                Hm, naja wenn du auf Nummer sicher gehen willst, baust Du in dein Formular ein
                <input type="hidden" name="gesendet" value="ok" />
                rein.

                Und fragst dann im PHP-Teil ab.

                <?php
                if('ok' == $_POST['gesendet'])
                {
                //Und hier den kram für die Datenbank.
                $sql = "INSERT INTO kommentare_zu_den_bildern
                (
                idx_bild,
                ip,
                user,
                kommentar,
                datum
                )
                VALUES
                (
                '$idx_bild',
                '" . $_SERVER['REMOTE_ADDR']. "',
                '" . $_SESSION['benutzername'] . "',
                '" . addslashes($_POST['kommentar']) . "',
                NOW()
                )
                ";
                mysql_query($sql) OR die(mysql_error());
                }

                Was Du gemacht hast konnte auch nicht sauber gehen, weil:

                mysql_query($sql) OR die(mysql_error());<-  hier wird schon wieder eingetragen ohne das das Form gesendet wurde.

                echo $sql;
                if (isset($_REQUEST['go']))
                {
                 mysql_query($sql); <- und hier nach dem absenden.
                }

                1. Hallo,

                  Cool danke es ging.

                  DANKE DANKE!

                  Gruß Blümchen