Ergebnis 1 bis 14 von 14

Thema: Duplicate entry '2' for key 1

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    [Erledigt]Duplicate entry '2' for key 1

    Also im Titel stehts ja also wenn ich mir nen Script bastel zum regestrrieren (nicht phpBB :wink: ) kommt folgende Fehlermeldung, beim 2. oder 3. versuch:

    Code:
    Duplicate entry '2' for key 1
    sehr vielsagend find ich nicht :roll:

    Ich weiss nur das er die ID in der DB nicht 1 höher setzt und gar keine dann abspeichert :roll:

    hier der Code Schnipsel:

    PHP-Code:
    <?php
    include("config.php");
     
    if (
    $_POST['comment'] == "") {
      echo 
    "error";
      }
      else
      {
      
    $result "SELECT ID FROM user";
     
    $result mysql_query ($result);
    $commentid mysql_fetch_array($result);
     
    $commentid $commentid[0];
     
    $commentid++;
      
    $idsql "UPDATE user SET ID='".$commentid."' where comment='".$comment."'";
      
    $comments_comment "INSERT INTO user (comment, username, wohnort, icq, ava, msn, webseite) VALUES ('$comment', '$username', '$wohnort', '$icq', '$ava', '$msn', '$webseite')";
      
    $comments_comment_q mysql_query($comments_comment);
       
    mysql_query($idsql);
      if (
    mysql_error()) {
       echo 
    mysql_error();
       exit;
      }

      
    ?>
      <form method="post">
      <center>
      Nickname:
        <input type="text" size="17" name="username" maxlength="10">*<br>
      Passwort:
      <input type="text" size="17" name="comment" maxlength="100">*<br>
        Wohnort:<input type="text" size="17" name="wohnort" maxlength="100"><br>
        ICQ-Nummer:<input type="text" size="17" name="icq" maxlength="100"><br>
        MSN:<input type="text" size="17" name="msn" maxlength="100"><br>
        Webseite:<input type="text" size="17" name="webseite" maxlength="100"><br>
        Avatar(muss URL sein und extern sein):<input type="text" size="17" name="icq" maxlength="100">
      <br><br>

      <input type="submit" value="Abschicken">
    </center>
      </form>
      *Pflichtfelder
      <?  } ?>
    und der Syntax der Tabelle
    Code:
    CREATE TABLE `user` (
      `ID` varchar(255) NOT NULL default '',
      `username` varchar(25) NOT NULL default '',
      `comment` text NOT NULL,
      `wohnort` varchar(255) NOT NULL default '',
      `icq` varchar(25) NOT NULL default '',
      `ava` varchar(255) NOT NULL default '',
      `msn` varchar(255) NOT NULL default '',
      `webseite` varchar(255) NOT NULL default '',
      UNIQUE KEY `ID` (`ID`)
    ) TYPE=MyISAM;
    nur irgendwo ist der fehler nur ich find den nicht :cry:

    Hoffe einer kann helfen

    Geändert von fanrpg (03.07.2005 um 17:53 Uhr) Grund: Weils gelöst ist

  2. #2
    Hast du evtl. vergessen, beim ID-Feld in der Datenbank auto_increment einzustellen?

    [edit] *Strukturbemerk* Jo, hast du :-)

  3. #3
    Wenn ich einfach AUTO_INCREMENT hinzufügen will kommt diese Fehlermeldung:

    Code:
    #1063 - Incorrect column specifier for column 'ID'
    und jetzt?

  4. #4
    Zitat Zitat von fanrpg
    Wenn ich einfach AUTO_INCREMENT hinzufügen will kommt diese Fehlermeldung:

    Code:
    #1063 - Incorrect column specifier for column 'ID'
    und jetzt?
    Ich glaub ID darf nicht den Typus VARCHAR haben. Versuchs mal mit INT. Es dürfen ja nur Integer in dem Feld gespeichert sein damit es inkrementiert werden kann.

  5. #5
    Hmm ... versuch's mal mit PRIMARY KEY statt UNIQUE KEY bei ID ... das funktioniert zumindest bei mir immer.

    [edit] Hm, stimmt, das auch.

  6. #6
    Langsam bin ich ver2feilt

    Wenn ich die Seite aufrufe unter Mozilla speichert der ohne das ich was eingegeben hab schon was in der DB und zwar das selbe was ich vorher eingeben hab, warum löscht der das nicht? (nach den Aktulalisieren) und wenn ich dann mit nem anderem Browser draufgehe kommt nur "error" (meine selbst definierte Fehlermeldung ) und wenn ich dann

    PHP-Code:
    if ($_POST['comment'] == "") {
      echo 
    "error";
      }
      else
      {
    ... 
    in
    PHP-Code:
    if ($_POST['comment'] != "") {
      echo 
    "error";
      }
      else
      {
    ... 
    ändere kommt der Fehler
    Zitat Zitat von Mein Sche*** Script in Verbindung mit MySQL über XAMPP
    Duplicate entry '2' for key 1
    Ich habe jetzt ID in Promary Kex umgewandelt und VARCHAR in INT und auto_increment hinzugefügt und wenn ich mit Mozilla draufgehen speichert der die IDs wie er will z.B 1,2,3 und dann macht der weiter mit 15,16,17... und zum Teil kommt dann auch
    wieder dieser Fehler
    Zitat Zitat
    Duplicate entry '2' for key 1
    Langsam gebs ich auf

  7. #7
    Zitat Zitat von fanrpg
    ...Ich habe jetzt ID in Promary Kex umgewandelt und VARCHAR in INT und auto_increment hinzugefügt und wenn ich mit Mozilla draufgehen speichert der die IDs wie er will z.B 1,2,3 und dann macht der weiter mit 15,16,17... und zum Teil kommt dann auch
    wieder dieser Fehler


    Langsam gebs ich auf
    Du darfst die Werte für ID jetzt nicht mehr per Script setzen. Das macht nun MySQL und erhöht die Werte von ID selbst.

  8. #8
    Mach ID als Int weil es doch nur Zahlen abspeichert, dann machste auto_increment rein... solte klappen!

  9. #9
    Jetzt ist nur noch das Problem wenn ich was abgeschickt habe und dann auf aktualisieren drücke dann trägt der das selber nochmal ein (aber jetzt unter ner anderen ID)

    immo sieht das Script so aus:
    PHP-Code:
    if ($_POST['username'] == ""
    {
     
      
    $comments_comment "INSERT INTO user (comment, username, wohnort, icq, ava, msn, webseite) VALUES ('$comment', '$username', '$wohnort', '$icq', '$ava', '$msn', '$webseite')";
      
    $comments_comment_q mysql_query($comments_comment);
    }
    ?>
     <form method="post">
      <center>
      Nickname:
        <input type="text" size="17" name="username" maxlength="10">*<br>
      Passwort:
      <input type="text" size="17" name="comment" maxlength="100">*<br>
        Wohnort:<input type="text" size="17" name="wohnort" maxlength="100"><br>
        ICQ-Nummer:<input type="text" size="17" name="icq" maxlength="100"><br>
        MSN:<input type="text" size="17" name="msn" maxlength="100"><br>
        Webseite:<input type="text" size="17" name="webseite" maxlength="100"><br>
        Avatar(muss URL sein und extern sein):<input type="text" size="17" name="icq" maxlength="100">
      <br><br>

      <input type="submit" value="Abschicken">
    </center>
      </form>
      *Pflichtfelder 

  10. #10
    Zitat Zitat von fanrpg
    Jetzt ist nur noch das Problem wenn ich was abgeschickt habe und dann auf aktualisieren drücke dann trägt der das selber nochmal ein (aber jetzt unter ner anderen ID)

    immo sieht das Script so aus:
    ...
    Ya. Willkommen in der Welt der Redirects.
    Das ist ganz normal das es neu eingetragen wird wenn man reloadet.
    Um das zu umgehen, solltest du mit einem Redirect arbeiten.
    Ganz oben in der Seite, über allen HTML-Outputs, baust du eine if-Kontrolle ein die prüft ob das Formular abgeschickt wurde.
    Wurde es abgeschickt, werden die Daten in die DB eingetragen UND direkt nach dem Eintragen auf eine gewünschte Seite per header("Location:...") weitergeleitet.
    Schau dir dazu diese Seite an:
    http://de3.php.net/header
    eine Solche Redirect-Methode setzen wir auch für die Newskommentare und Umfrageabstimmungen auf Squarenet ein, oder auch hier im Forum beim Abschicken oder Ändern eines Beitrags.
    Der Vorteil von der Headerweiterleitung gegenüber der Meta-Weiterleitung ist, das der User gar nicht merkt das er quasi auf einer Zwischenseite war. Die JavaScript-Weiterleitung ist eh Müll, weil sie nur funktioniert wenn der User JavaScript akiviert hat.

  11. #11
    Hmm.. wenn ich das aber so mache:

    PHP-Code:
    if ($_POST['username'] == ""
    {
      
    $comments_comment "INSERT INTO user (comment, username, wohnort, icq, ava, msn, webseite) VALUES ('$comment', '$username', '$wohnort', '$icq', '$ava', '$msn', '$webseite')";
      
    $comments_comment_q mysql_query($comments_comment);
      }
          if(
    $_POST['username'] != "")
          {
          
    header("location: index.php");
          } 
    dann schreibt der ausser der ID nichts in die DB

    Oder ist die if-Abfrage falsch?

  12. #12
    Zitat Zitat von fanrpg
    Hmm.. wenn ich das aber so mache:

    PHP-Code:
    if ($_POST['username'] == ""
    {
      
    $comments_comment "INSERT INTO user (comment, username, wohnort, icq, ava, msn, webseite) VALUES ('$comment', '$username', '$wohnort', '$icq', '$ava', '$msn', '$webseite')";
      
    $comments_comment_q mysql_query($comments_comment);
      }
          if(
    $_POST['username'] != "")
          {
          
    header("location: index.php");
          } 
    dann schreibt der ausser der ID nichts in die DB

    Oder ist die if-Abfrage falsch?
    Ja, würd ich sagen.

    Versuch das:
    PHP-Code:
    <?php 
    if (!empty($_POST['username'])) 
    {
      
    $comments_comment "INSERT INTO user (comment, username, wohnort, icq, ava, msn, webseite) VALUES ('$comment', '$username', '$wohnort', '$icq', '$ava', '$msn', '$webseite')";
      
    $comments_comment_q mysql_query($comments_comment);
      
    header("location: index.php");
    ?>
    HIER DEN FORMULARKRAM REIN
    Das Script prüft nun ob $_POST['username'] einen Wert enthält. Da es nur einen Wert enthält wenn das Formular ausgefüllt und abgeschickt wurde, wird nur in die DB eingetragen, wenn das Formular abgeschickt wurde.
    Nach dem Eintragen in die DB wird dann sofort auf index.php weitergeleitet wodurch verhindert wird das der Besucher reloaden kann und so aus Versehen zweimal einen Eintrag hinterlässt.

    Beachte das deine Version nicht HTTP/1.1 kompatibel ist. Willst du maximale Kompatibilität musst du bei der Weiterleitung eine absulute Adresse angeben. Schau dazu nochmal ins PHP-Manual. Dort steht wie du dir eine absulute Adresse von PHP zusammensetzen lassen kannst.

  13. #13
    Hmm..ich rate dir ich würde nicht nur abfrgane ob der Nutzername eingegeben wurde...sonst kannste einfach nur den nutzernmen angeben und das wars! Dann trägt er nämlich nur das ein usw...^^

    Und... hmm...deine abfrage müsste rcihtig sein...willst du daten aktualiesieren? Dann probiers mit UPDATE anstatt INSERT aber wenn net..keinen Peil was falsch ist^^

  14. #14
    THX @ all

    Ihr bekommt alle nen Eintrag später auf der HP

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •