Meik: PHP - MySQL - Insert Befehl liefert immer 2 Einträge

hallo,

was mach ich denn falsch? immer hab ich zwei mal den identischen eintrag in der tabelle als ergebnis...!

<?php
$server = "db.trallala.de";
$user = "dbo12345";
$pass = "passwort";
$datenbank = "db12345";

$number=50;
$resolvname=1;

$conn = mysql_connect($server, $user, $pass);
mysql_select_db($datenbank, $conn);

if ($conn!=TRUE)
{
    echo "Verbindungsfehler: ".mysql_error()." !! Versuchen Sie es zu einem sp&auml;teren Zeitpunkt nochmals. Danke.";
}

$sql = "Insert into support (FRAGE, ANREDE, NAME, VORNAME, HAUSNR, STRASSE, LANDCODE, PLZ, ORT, LAND, EMAIL) values('$Frage','$Anrede1', '$Name1', '$Vorname1', '$Hausnummer1', '$Strasse1', '$Landcode1', '$PLZ1', '$Ort1', '$Land1', '$EMail1')";
$result = mysql_query($sql,$conn) or die(mysql_error($conn));

?>

Danke für eure Hilfe!

Gruss

Meik

  1. Hi,

    ich entdecke auf Anhieb nichts, könnte es sein, dass dein Skript zwei Mal aufgerufen wird (Reload, doppeltes Absenden o.ä.)?

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Abschicken tu ich es damit:

      <script language="JavaScript">
      <!--
      function senden ()
      {

      var Frage;
      var Frage = String(document.question.Frage.value);
      var Anrede;
      var Anrede = String(document.question.Anrede.value);
      var Name;
      var Name = String(document.question.Name.value);
      var Vorname;
      var Vorname = String(document.question.Vorname.value);
      var Strasse;
      var Strasse = String(document.question.Strasse.value);
      var Hausnummer;
      var Hausnummer = String(document.question.Hausnummer.value);
      var Landcode;
      var Landcode = String(document.question.Landcode.value);
      var PLZ;
      var PLZ = String(document.question.PLZ.value);
      var Ort;
      var Ort = String(document.question.Ort.value);
      var Land;
      var Land = String(document.question.Land.value);
      var EMail;
      var EMail = String(document.question.EMail.value);
      document.question.method="post";
      document.question.action ="./Fragen.php?Frage1="+Frage+"&Anrede1="+Anrede+"&Name1="+Name+"&Vorname1="+Vorname+"&Strasse1="+Strasse+"&Hausnummer1="+Hausnummer+"&Landcode1="+Landcode+"&PLZ1="+PLZ+"&Ort1="+Ort+"&Land1="+Land+"&EMail1="+EMail+"";
      document.question.submit();
      }

      //-->
      </script>

      Danke!

      1. Hi nochmal,

        document.question.method="post";
        document.question.action ="./Fragen.php?Frage1="+Frage+"&Anrede1="+Anrede+"&Name1="+Name+"&Vorname1="+Vorname+"&Strasse1="+Strasse+"&Hausnummer1="+Hausnummer+"&Landcode1="+Landcode+"&PLZ1="+PLZ+"&Ort1="+Ort+"&Land1="+Land+"&EMail1="+EMail+"";

        POST und dann URL-Parameter? Das passt nicht wirklich gut zusammen...
        Und ansonten: Wer ruft wann senden auf, nicht zufällig ein normaler Submit-Button? Wenn ja, verpasse dem onclick-Event ein return false, er könnte sonst geneigt sein anschließend nochmal abzuschicken.

        MfG
        Rouven

        --
        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
        1. document.question.method="post";
          document.question.action ="./Fragen.php?Frage1="+Frage+"&Anrede1="+Anrede+"&Name1="+Name+"&Vorname1="+Vorname+"&Strasse1="+Strasse+"&Hausnummer1="+Hausnummer+"&Landcode1="+Landcode+"&PLZ1="+PLZ+"&Ort1="+Ort+"&Land1="+Land+"&EMail1="+EMail+"";
          POST und dann URL-Parameter? Das passt nicht wirklich gut zusammen...
          Und ansonten: Wer ruft wann senden auf, nicht zufällig ein normaler Submit-Button? Wenn ja, verpasse dem onclick-Event ein return false, er könnte sonst geneigt sein anschließend nochmal abzuschicken.
          MfG
          Rouven

          Also ich hab jetzt des mit post weg und hab ein return false und trotzdem zwei einträge....

          *menno...

          1. Also ich hab jetzt des mit post weg und hab ein return false und trotzdem zwei einträge....

            ...Gib mehr Quellcode her - oder noch besser: Gib URL...

            MfG
            Rouven

            --
            -------------------
            ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
            1. also der button ruft auf:

              <input type="submit" value="Abschicken" name="B1" onclick="javascript:senden()"><input type="reset" value="Zurücksetzen" name="B2">

              dann kommt:

              <script language="JavaScript">
              <!--
              function senden ()
              {

              var Frage;
              var Frage = String(document.question.Frage.value);
              var Anrede;
              var Anrede = String(document.question.Anrede.value);
              var Name;
              var Name = String(document.question.Name.value);
              var Vorname;
              var Vorname = String(document.question.Vorname.value);
              var Strasse;
              var Strasse = String(document.question.Strasse.value);
              var Hausnummer;
              var Hausnummer = String(document.question.Hausnummer.value);
              var Landcode;
              var Landcode = String(document.question.Landcode.value);
              var PLZ;
              var PLZ = String(document.question.PLZ.value);
              var Ort;
              var Ort = String(document.question.Ort.value);
              var Land;
              var Land = String(document.question.Land.value);
              var EMail;
              var EMail = String(document.question.EMail.value);

              document.question.action ="./Fragen.php?Frage1="+Frage+"&Anrede1="+Anrede+"&Name1="+Name+"&Vorname1="+Vorname+"&Strasse1="+Strasse+"&Hausnummer1="+Hausnummer+"&Landcode1="+Landcode+"&PLZ1="+PLZ+"&Ort1="+Ort+"&Land1="+Land+"&EMail1="+EMail+"";
              document.question.submit();
              return false;
              }

              //-->
              </script>

              und dann fragen.php:

              <?php
              $server = "db.trallala.de";
              $user = "dbo12345";
              $pass = "Passwort";
              $datenbank = "db12345";

              $number=50;
              $resolvname=1;

              $conn = mysql_connect($server, $user, $pass);
              mysql_select_db($datenbank, $conn);

              if ($conn!=TRUE)
              {
                  echo "Verbindungsfehler: ".mysql_error()." !! Versuchen Sie es zu einem sp&auml;teren Zeitpunkt nochmals. Danke.";
              }

              $sql = "Insert into support (FRAGE, ANREDE, NAME, VORNAME, HAUSNR, STRASSE, LANDCODE, PLZ, ORT, LAND, EMAIL) values('$Frage','$Anrede1', '$Name1', '$Vorname1', '$Hausnummer1', '$Strasse1', '$Landcode1', '$PLZ1', '$Ort1', '$Land1', '$EMail1')";
              $result = mysql_query($sql,$conn) or die(mysql_error($conn));

              ?>

              <html>
              <head>
              <title>NEW</title>
              <script>
              function bekommen()
              {
              document.question.method = "get";
              document.question.action = "<? echo $PHP_SELF ?>";
              document.question.submit();
              }
              </script>
              </head>
              <body onLoad="window.resizeTo(350,300)" bgcolor="#FFFFBD">
              <form method="POST" action="" name="question" onSubmit="bekommen()">
              <font face="Verdana" size="2">Vielen Dank für Ihre Frage. Wir werden uns
              schnellst möglich bei Ihnen melden!</font></p>
              </p>
              </form>

              1. Hallo Meik,

                <input type="submit" value="Abschicken" name="B1" onclick="javascript:senden()"><input type="reset" value="Zurücksetzen" name="B2">

                Dein Eventhandler muss false zurück liefern, z.B. so:

                <input type="submit" value="Abschicken" name="B1" onclick="return(senden())">

                function senden ()
                {

                // Deine Funktion liefert also false zurück

                return false;
                }

                Zum Rest sag' ich hier ausnahmsweise lieber nichts.

                Freundliche Grüße

                Vinzenz

                1. Dein Eventhandler muss false zurück liefern, z.B. so:

                  <input type="submit" value="Abschicken" name="B1" onclick="return(senden())">

                  function senden ()
                  {
                         // Deine Funktion liefert also false zurück
                      return false;
                  }

                  Zum Rest sag' ich hier ausnahmsweise lieber nichts.

                  Freundliche Grüße

                  Vinzenz

                  Hallo,

                  danke Dir! Jetzt klappt es! Ich weiss, dass mein Programmierstil etwas stümperhaft ist, dafür ist aber alles irgendwie selbsterarbeitet. Solange es irgendwie klappt bin ich ganz zufrieden. Aber wenn Du willst kannst mir gerne mal ne mail schreiben wie das gemeint hast :-)

                  Gruss

                  Meik

                  1. Hello,

                    danke Dir! Jetzt klappt es! Ich weiss, dass mein Programmierstil etwas stümperhaft ist, dafür ist aber alles irgendwie selbsterarbeitet. Solange es irgendwie klappt bin ich ganz zufrieden. Aber wenn Du willst kannst mir gerne mal ne mail schreiben wie das gemeint hast :-)

                    Hauptsache, du machst jetzt nicht gleich einfach weiter mit der nächsten Großbaustelle, sondern Du hinterfragst erstmal die Informationen aus diesem Thread. Möglichst _alle_ :_)

                    Weißt Du denn nun wenigstens, warum die Eintragungen doppelt waren?

                    Die nächste Frage wäre, ob Du wirklich die Eintragungsfunktion bookmarkfähig haben willst?
                    Datenmanipulation sollte man nicht über die URi abwickeln, wenn man keinen besonderen Grund dafür hat.

                    Harzliche Grüße vom Berg
                    http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau

                  2. Hallo Meik,

                    danke Dir! Jetzt klappt es!

                    das ist schon mal ein Schritt.

                    Ich weiss, dass mein Programmierstil etwas stümperhaft ist, dafür ist aber alles irgendwie selbsterarbeitet. Solange es irgendwie klappt bin ich ganz zufrieden.

                    Vielen hier (auch mir) reicht dieser Anspruch nicht. Und das ist gut so. Du hast hier von Alexander und mir schon ein paar Hinweise bekommen. Diesen solltest Du nachgehen.

                    Zum Rest sag' ich hier ausnahmsweise lieber nichts.
                    Aber wenn Du willst kannst mir gerne mal ne mail schreiben wie das gemeint hast :-)

                    Nein, Beratung gibt es nur hier im Forum. Wie Chraecker Heller so schön formulierte:

                    "Uns gibt es nur mit Meinung und ungebetener Beratung."

                    Viele, die hier regelmäßig posten, möchten nicht nur, dass ein Hilfesuchender eine Lösung für sein aktuelles Problem erhält. Nein, sie möchten mehr: der Hilfesuchende soll lernen, was sein Problem ausgemacht hat, damit er bei einem vergleichbaren Fall es gleich richtig angeht.

                    Hier im SELFFORUM, dem Forum zu SELFHTML bist Du an der richtigen Stelle, um zu lernen, um dazu zu lernen. Wir helfen Dir gern dabei.

                    Ich fange mit Deinem HTML an:
                    Du verwendest für Deine Darstellung veraltete Tags wie <font>, Du verwendest das Attribut 'bgcolor'. Verwende doch dafür CSS.

                    Schreibe sauberes HTML, halte Dich dabei an einen Dokumententyp, den Du angibst und gegenüber dem Du Deine HTML-Dateien validieren kannst.

                    Javascript:
                    Warum nutzt Du Javascript, um Deine Formularfeldinhalte als Querystring an Deine Skript-URL anzuhängen? Wenn Du das Formular ganz normal mit dem Submit-Button versendest, dann werden diese Inhalte ordnungsgemäß übertragen. Ohne eine Zeile Javascript.
                    Warum willst Du das Fenster des Benutzers gleich beim Laden auf eine neue Größe bringen? Der Benutzer hat sein Browserfenster möglicherweise in genau der Größe geöffnet, die ihm am besten passt. Erfahrene Benutzer untersagen ihrem Browser natürlich solche Spielereien.

                    Nun zu Deinem PHP.
                    Du sagst: "Es funktioniert." Das sagt mir: register_globals steht auf on. Das ist heutzutage schon eher die Ausnahme, die Standardeinstellung ist register_globals = off. Ein PHP-Update oder ein Serverwechsel kann dazu führen, dass Deine Skripte nicht mehr laufen. Zudem kann man leicht ungewünschte Daten einschleusen. Diskussionen dazu gibt es hier im Archiv eine ganze Menge.

                    Wenn Du die Übertragungsmethode POST wählst, solltest Du über

                    $_POST['Frage']

                    auf den Inhalt des Formularelementes mit dem Namen "Frage" zugreifen. Auf andere Formularelemente analog.

                    Statt die Variable $PHP_SELF solltest Du heute $_SERVER['PHP_SELF'] verwenden. Zu mysql_real_escape_string() und der stripslashes()-Problematik zur Vermeidung von SQL-Injection, auf die Dich Alexander aufmerksam gemacht hat, habe ich Dich bereits hingewiesen.

                    So, das wäre mal einiges für den Anfang.

                    Freundliche Grüße

                    Vinzenz

        2. Hallo Rouven,

          document.question.method="post";
          document.question.action ="./Fragen.php?Frage1="+Frage+"&Anrede1="+Anrede+"&Name1="+Name+"&Vorname1="+Vorname+"&Strasse1="+Strasse+"&Hausnummer1="+Hausnummer+"&Landcode1="+Landcode+"&PLZ1="+PLZ+"&Ort1="+Ort+"&Land1="+Land+"&EMail1="+EMail+"";
          POST und dann URL-Parameter? Das passt nicht wirklich gut zusammen...

          meine Glaskugel tippt auf register_globals = on.

          Natürlich sollte es überflüssig sein, den Query-String so aufzublähen. Dazu wäre es sinnvoll, mysql_real_escape_string() auf Benutzereingaben anwenden, vorher in Abhängigkeit von der Konfiguration von magic quotes gpc stripslashes.

          Und ansonten: Wer ruft wann senden auf, nicht zufällig ein normaler Submit-Button? Wenn ja, verpasse dem onclick-Event ein return false, er könnte sonst geneigt sein anschließend nochmal abzuschicken.

          Hehe, das wird der Grund für die doppelten Einträge sein.

          Freundliche Grüße

          Vinzenz

          PS: Wir sollten in Sachen Feature-Artikel mal nachhaken.

          1. Hi Vinzenz,

            meine Glaskugel tippt auf register_globals = on.

            ich dachte da mehr an eine generelle Auffälligkeit: Bei Post erwarte ich normalerweise keine Anhängsel an der URL, aber das mag eine Geschmacksfrage sein...

            MfG
            Rouven

            --
            -------------------
            ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
  2. Hallo Freunde des gehobenen Forumsgenusses,

    $sql = "Insert into support (FRAGE, ANREDE, NAME, VORNAME, HAUSNR, STRASSE, LANDCODE, PLZ, ORT, LAND, EMAIL) values('$Frage','$Anrede1', '$Name1', '$Vorname1', '$Hausnummer1', '$Strasse1', '$Landcode1', '$PLZ1', '$Ort1', '$Land1', '$EMail1')";

    Dieses Script kann man ganz wunderbar für SQL-Injection missbrauchen (man kann mit einem einzigen Aufruf einen ganzen Haufen völlig beliebiger Daten eintragen).

    Gruß
    Alexander Brock