Problem mit mysql_insert_id() und Update

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit mysql_insert_id() und Update

    Hi,

    ich habe ein etwas kompliziertes Problem.

    Ich habe eine kleine Benutzerverwaltung. Diese läuft über eine DB. Ich kann neue Benutzer eintragen und bereits vorhandene ändern.

    Die DB besteht aus 3 Tabellen:

    ---------------------
    Benutzer

    BenutzerID
    Name
    Vorname
    AnschriftenID
    KommentarID
    ----------------------



    ----------------------
    Anschriften

    AnschriftenID
    Strasse
    PLZ
    ----------------------



    ----------------------
    Kommentar

    KommentarID
    Kommentar
    ----------------------


    Das Eintragen neuer Benutzer erfolgt über ein Formular. Dafür wird erst die Anschrift eingetragen und per mysql_insert_id() die AnschriftID zurückgegeben. Wurde ein Kommentar eingefügt, dann wird dieses wie bei der Anschrift zuerst in die Tabelle Kommentar eingefügt und die KommentarID mit mysql_insert_id() zurückgegeben. Ein Kommentar ist aber kein Pflichtfeld, das heisst, wird kein Kommentar eingegeben, dann steht in der Tabelle Benutzer einfach nur der Wert 0 in der Spalte KommentarID.
    Das klappt auch alles wunderbar, doch nun zum Problem.

    Es besteht ja auch die Möglichkeit, Benutzerdaten zu ändern. Dafür erscheint dann wieder das Formular, mit den ausgelesenen Werten. Ändere ich nun einen Wert, dann benutze ich natürlich den update Befehl.
    Das Problem besteht nun mit dem Kommentarfeld.

    Ich habe das so gelöst:
    Wenn es bisher keinen Kommentareintrag gab, ich nun aber das Feld ausgefüllt habe, erfolgt ein INSERT in ....
    Nun brauche ich natürlich die KommentarID als Rückgabewert, um diese nun in die Tabelle Benutzer einzufügen. (Vorher stand da ja 0 drinn)

    Es passiert aber folgendes. Das Formular mit den Werten erscheint. Kommentarfeld ist leer. Nun fülle ich das aus und schicke das Formular ab. In der Datenbank erfolgt der Eintrag des Kommentars in die Tabelle Kommentar, aber die zurückgegebene KommentarID wird nicht in die Tabelle Benutzer eingetragen. Dies geschieht erst, wenn ich das Formular ein zweites Mal abschicke.

    Nach dem "Insert in Kommentar..." und dem $KommentarID=mysql_insert_id()
    habe ich einen:

    PHP-Code:
    Update Benutzer SET KommentarID='$KommentarID' WHERE BenutzerID='$BenutzerID' 
    Warum wird dies erst ausgeführt, wenn ich das Formular ein zweites Mal abschicke. Was mache ich falsch und wie wäre es richtig?? Bin echt am Verzweifeln und suche nun schon seit Stunden nach einer Lösung. Ich hoffe jemand hat eine Idee.

  • #2
    poste mal etwas mehr code
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Hi mrhappiness,

      hier der Code:

      PHP-Code:
      if ($KommentarID=="0" AND $Kommentar != ""  )

        {
                     
        
      $sql="    INSERT INTO tblKommentar Kommentar VALUES '$Kommentar' ";
                       
         
      mysql_query($sql,$db)or die(mysql_error().$errordatabase);

         
      $KommentarID=mysql_insert_id();
        
        }
          
         
      $sql2=" UPDATE Benutzer 
          SET 
          Name='
      $Name',KommentarID='$KommentarID'
          WHERE BenutzerID='
      $BenutzerID'";

           
      mysql_query($sql2,$db)or die(mysql_error().$errordatabase); 

      Kommentar


      • #4
        warum beendest du den IF-anweisungsblock denn schon nach dem INSERT - das UPDATE macht doch auch nur dann sinn, wenn vorher das INSERT auch stattgefunden hat?

        also solltest du auch beides von der bedingung abhängig machen, und nicht nur die hälfte.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Nich unbedingt, es kann ja auch sein, das z.B der Name geändert wurde. Ich die Update-Funktion ja etwas verkürzt, steht eigentlich noch mehr drinn.

          PHP-Code:
          if ($KommentarID=="0" AND $Kommentar != ""  
          das tritt ja nur in Kraft, wenn noch kein Kommentar verfasst wurde, also die KommentarID in der Tabelle Benutzer 0 ist und nun das Kommentarfeld ausgefüllt wurde.

          Sollte bereits vorher, beim Anlegen eines Benutzers, das Kommentarfeld ausgefüllt worden sein existiert ja eine KommentarID. Dann wird halt nur ein update für die Tabelle Kommentar durchgeführt.

          Kommentar


          • #6
            mal ganz rein konzeptionell:

            du hast eine tabelle benutzer mit einer spalte komentar_id, in der immer genau einwert steht, entweder 0 oder eine kommentar-id ?

            du hast eine tabelle kommenta mit dem primärschlüssel kommentar_id?

            in dieser tabelle befindet sich noch eine weitere spalte namens kommentar und sonst nichts?

            warum packst du die spalte kommentar dann nicht in die tabelle benutzer?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Es gibt ehrlich gesagt 3 Spalten in der Tabelle Kommentar. KommentarID Kommentar_deutsch und Kommentar_englisch. Natürlich hast Du Recht, ich hätte das ja auch in die Tabelle Benutzer packen können, aber wegen der Übersichtlichkeit ist alles auf einzelne Tabellen aufgeteilt.

              Gibt es einen Kommentar zu einem Benutzer, dann steht in der Benutzertabelle die KommentarID ansonsten ist der default Wert halt 0.

              Kommentar

              Lädt...
              X