Funktion zur ID berechnung DB

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

  • Funktion zur ID berechnung DB

    Hallo ich möchte gern, daten in einer SQL-Datenban tabelle anlegen per PHP, die ID soll durch eine Fukntion automatisch berechnet werden.
    ich eine datei mit einem Formular und eine zur Auswertung!
    hier meine Funktion, es funktioniert aber nicht:

    PHP-Code:
    function berechneInvID(){
      
    $sql=mysql_query("Select count(*) FROM lieferant");
      
    $row=mysql_fetch_array($sql);
      
    $id=$row[0]+1;      //errechne naechsten PK
      
    $vorhanden=1;

      while (!
    $vorhanden==0)      //wiederhole so lange, bis neue ID gefunden, d.h. vorhanden=0
      
    {
     
    //Pruefe, ob schon Neueintrag eines anderen DS in Kopie vorliegt und damit PK vergeben ist
        
    $sql_kopie=mysql_query("Select * FROM liferant WHERE lieferant_id=$id");
        
    //wenn schon id vergeben in Kopie, dann ist vorhanden=1
        
    $vorhanden=mysql_num_rows($sql_kopie);   

        if (!
    $vorhanden==0) {
           
    $id++;     //wenn vorhanden, erhoehe die id

        
    }
      }

      return 
    $id;    //gib neuID zurueck 
    vielleicht kann mir jemand auf die sprünge helfen!
    Zuletzt geändert von TobiaZ; 09.01.2005, 21:16.

  • #2
    [ ] du kennst auto_increment?

    *verschieb*

    Kommentar


    • #3
      ja auto_incemrent kenne ich, soll bzw. darf aber nicht benutzt werden!

      Kommentar


      • #4
        Weil?

        Kommentar


        • #5
          die daten bank ist schon vorhanden und soll nicht geändert werden, daher diese funktion einbinden

          Kommentar


          • #6
            schwachsinn, wer diese db gebaut hat, und schwachsinn, wer die nicht ändern will, aber gut.

            wo genau ist dein Prob?

            Kommentar


            • #7
              ja schwachsin ist gut.

              Also ich hab diese funktion so gefunden, macht ja auch sinn soweit!
              aber wenn ich die aufrufen lasse, also formular ausfülle und sende, dann sagt er mir trozdem immer
              Fehler
              Duplicate entry '0' for key 1
              Abbruch!!

              und ich weiß nicht gneau wieso

              Kommentar


              • #8
                naja, wahrscheinlich, weil du nen eintrag mit ner id reinschreibst, die schon drin ist. deswegen auto_inc und du hast keine probleme. aber das wollt ihr ja nicht.

                dann fang mal an zu debuggen. wo sind deine testausgaben?

                Kommentar


                • #9
                  ich seh schon als anfänger, hat mans nicht grad einfach...mit munter drauf losprogrammieren ist da wohl nicht viel? was meinst du mit test ausgaben?

                  Kommentar


                  • #10
                    was meinst du mit test ausgaben?
                    testausgaben: nachschauen, welchen wert bestimmte variablen zu bestimmten zeiten haben und mit dem erwarteten werten vergleichen - dort, wo abweichungen auftreten, muß theoretisch ein fehler im code sein => echo

                    außerdem:
                    - error_reporting auf E_ALL setzen
                    - mysql_query immer in kombination mit mysql_error benutzen
                    Die Zeit hat ihre Kinder längst gefressen

                    Kommentar


                    • #11
                      test ausgaben
                      *lol* du hast es sogar schon geschafft die zwei bestandteile des wortes testausgaben zu erkennen. wo ist dann dein problem?

                      "drauflosprogremmieren" wenn Kunden im Spiel sind, halte ich für gefährlich...

                      Kommentar


                      • #12
                        Ich würde mir mit "SELECT max(id) FROM ... " die höchste ID von der DB nennen lassen und dann einfach um einen erhöhen.
                        Warum soll ich lange rumrätseln und suchen wenn die DB es doch weiß? *g*

                        Kommentar


                        • #13
                          Original geschrieben von DSB
                          Ich würde mir mit "SELECT max(id) FROM ... " die höchste ID von der DB nennen lassen und dann einfach um einen erhöhen.
                          dann aber bitte table locking nicht vergessen.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Original geschrieben von wahsaga
                            dann aber bitte table locking nicht vergessen.
                            Das war nicht die Problemstellung.
                            Die Frage war, wie man am besten an die nächste ID kommt und da ist meine Variante um einiges schneller, als die Schleife im ersten Posting.

                            Aber natürlich sollte man verhindern, dass eine ID doppelt belegt wird. Wie man das verhindert hängt im Einzelfall vom Scriptaufbau statt. Man muss nicht zwangsläufig ein "table lock" machen.

                            Kommentar


                            • #15
                              Original geschrieben von DSB
                              Aber natürlich sollte man verhindern, dass eine ID doppelt belegt wird.
                              Ich frage mich aber, warum der Threadersteller nicht Sachen wie
                              auto-increment nutzen kann. Das würde den ganzen Programmieraufwand
                              wesentlich verringern und die DB entlasten (weniger Abfragen).

                              @Sirius79: Gibt es dafür einen logischen Grund?

                              Kommentar

                              Lädt...
                              X