Datensätze werden doppelt angelegt

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

  • Datensätze werden doppelt angelegt

    Hallo,

    ich habe folgende Funktion geschrieben und obwohl diese die Datensätze nur einmal eintragen soll, werden sie ständig zwei mal in die Datenbank eingetragen.

    Ich kann einfach keinen Fehler finden, der den Doppeleintrag verursacht. Vielleicht könnt ihr ja mal drüberschauen. Eventuell fällt euch was auf.

    Vielen Dank für eue Hilfe!

    PHP-Code:
    <?php
    // sessionid
    session_start();
    $_SESSION['PHPSESSID'] = session_id();

    function 
    sis($kundennumm$belegverbi
    {
        
    #$kundennumm = "14344";
        #$belegverbi = "14344264024815";
        
        // ini-file auslesen
        
    $ini_array parse_ini_file("../config.ini"TRUE);

        
    // datenbankverbindung
        
    include("../db_connect.inc.php");    
        
        
    $db2 mysql_connect("www.example.de""test""test");
        
    mysql_select_db("example_de"$db2);    
        
        
    // Example
        
    $query_b "
            SELECT *
            FROM _sbb_kunde
            WHERE Kundennumm = '
    $kundennumm'
        "
    ;
        
        
    $result_b mysql_query($query_b$db2);
        
        
    $row_b mysql_fetch_assoc($result_b);

        
    // SIS
        
    $query "
            SELECT *, (SELECT t2.lieferant FROM belegpo t2
    WHERE t2.lieferant = 'Example GmbH'
            AND t2.belegverbi = '
    $belegverbi') as lieferant
            FROM beleg
            WHERE belegverbi = '
    $belegverbi'
        "
    ;
        
        
    $result mysql_query($query$db);
        
        
    $row mysql_fetch_assoc($result);

        if(
    $row['lieferant'] != "") {

            if(
    $row['lstrasse'] == "" AND $row['lplz'] == "") {
                
    $row['lvorname'] = $row['vorname'];
                
    $row['lnachname'] = $row['nachname'];
                
    $row['lname2'] = $row['name2'];
                
    $row['lstrasse'] = $row['strasse'];
                
    $row['lplz'] = $row['plz'];
                
    $row['lort'] = $row['ort'];
                
    $row['lland'] = $row['land'];
            }

            
    // Example
          
    $query_a "
            INSERT
            INTO _sbb_ibeleg
            (Belegart,Belegverbi,Kundennumm,Name,Name2,Strasse,Land,Plz,Ort,
    Zahlungszi,Versandart,Lname,Lstrasse,Lplz,Lort,Lland,Inetbeleg,
    xbestell_datum,xsis,xstatus,Lname2)
            VALUES('Auftrag','
    $row[belegverbi]','$row_b[Kundennumm]','$row_b
    [Vorname] 
    $row_b[Name]',
    '
    $row_b[Name2]','$row_b[Strasse]','$row_b[Land]','$row_b[Plz]','$row_b
    [Ort]','
    $row_b[Zahlungszi]','$row_b[Versandart]',
    '
    $row[lvorname] $row[lnachname]','$row[lstrasse]','$row[lplz]','$row
    [lort]','
    $row[lland]','1','$row[datum]',
            'ShopInShop','Halten','
    $row[lname2]')
          "
    ;
          
          print 
    $query_a "<br><br>";
          
    mysql_query($query_a$db2);  

              
    // Style oder Artikel
              
    if($row_b['kopplung'] == "") {
                
    $query_f "
                    SELECT *
                    FROM staffel
                    WHERE preisstaffel = '
    $row_b[preisstaffel]'
                "
    ;
                
                
    $result_f mysql_query($query_f$db2);
                
                
    $row_f mysql_fetch_assoc($result_f);
                
                
    $row_b['kopplung'] = $row_f['kopplung'];  
              }

              if(
    $row_b['kopplung'] == "STYLE") {

                
    $query_g "
                    SELECT *, (SELECT sum(t2.anzahl) FROM belegpo t2 WHERE
    t2.oberartikelnum = t1.oberartikelnum 
                    AND t2.lieferant = 'Example GmbH') as anzahl2 
                    FROM belegpo t1 
                    WHERE t1.belegverbi = '
    $belegverbi'
                    AND t1.oberartikelnum != ''
                    AND t1.lieferant = 'Example GmbH'
                    GROUP BY t1.oberartikelnum
                "
    ;
                
                
    $result_g mysql_query($query_g$db);

                while(
    $row_g mysql_fetch_assoc($result_g)) {
                    
    $style[$row_g['oberartikelnum']] = $row_g['anzahl2'];   
                }
              }
          
          
    $query_c "
            SELECT *
            FROM belegpo
            WHERE belegverbi = '
    $row[belegverbi]'
            AND porto = '0'
            AND lieferant = 'Example GmbH'
            ORDER BY id ASC
          "
    ;
          
          
    $result_c mysql_query($query_c$db);
          
          
    $postennumm 1;
          
    $gewicht 0;
          
    $gesamtsumme 0;
          
          while(
    $row_c mysql_fetch_assoc($result_c)) {

            
    $query_e "
                SELECT *
                FROM _sbb_preislis
                WHERE Artikelnum = '
    $row_c[artikelnum]'
            "
    ;
            
            if(
    $row_b['kopplung'] == "ARTIKEL" OR $row_c['oberartikelnum']
     == 
    "") {
                
    $query_e.= "AND Anzahl <= '$row_c[Anzahl]' ";
            }
            else if(
    $row_b['kopplung'] == "STYLE") {
                
    $query_e.= "AND Anzahl <= " $style[$row_c['oberartikelnum']];
            }
            
            
    $query_e.= "
                AND Preisstaff = '
    $row_b[preisstaffel]'
                ORDER BY Anzahl DESC
                LIMIT 1
            "
    ;
            
            
    $result_e mysql_query($query_e$db2);  

            
    $row_e mysql_fetch_assoc($result_e);

            
    // Gewicht
            
    $query_h "
              SELECT Gewicht
              FROM _sbb_lager
              WHERE Artikelnum = '
    $row_c[artikelnum]'
            "
    ;
            
            
    $result_h mysql_query($query_h$db2);
            
            
    $row_h mysql_fetch_assoc($result_h);
            
            
    $gewicht += $row_c['anzahl'] * $row_h['Gewicht'];
            
    $gesamtsumme += $row_c['Preis1'];

                 
            
    $query_d "
              INSERT
              INTO _sbb_ibelegpo
              (Belegart,Belegverbi,Postennumm,Artikelnum,Anzahl,Einzelprei,zusatztext)
              VALUES('Auftrag','
    $row[belegverbi]','$postennumm','$row_c
    [artikelnum]','
    $row_c[anzahl]','$row_e[Preis1]','')
            "
    ;  

            print 
    $query_d "<br>";    
            
    mysql_query($query_d$db2);    
            
            
    $postennumm++;
          }

          
    // Versandkosten
            
    if($ini_array['versand']['neutral'] == 1) {
                if(
    $row['lland'] == "D" || $row['lland'] == "DE") {
                    
    $zone 1;
                }
                else if(
    $row['lland'] == "A" || $row['lland'] == "AT" || $row['lland']
     == 
    "LU" || $row['lland'] == "NL") {
                    
    $zone 2;
                }
                else {
                    
    $zzgl_versand 1;
                }        
            }
            else {
                if(
    $row_b['Land'] == "D" || $row_b['Land'] == "DE") {
                    
    $zone 1;
                }
                else if(
    $row_b['Land'] == "A" || $row_b['Land'] == "AT" || $row_b
    ['Land'] == "LU" || $row_b['Land'] == "NL") {
                    
    $zone 2;
                }
                else {
                    
    $zzgl_versand 1;
                }                
            }
         
            
    $query_i "
                SELECT gewicht_bis, preis
                FROM frachtkosten
                WHERE zone = '
    $zone'
                ORDER BY gewicht_bis DESC
                LIMIT 1
            "
    ;

            
    $result_i mysql_query($query_i$db2);

            
    $row_i mysql_fetch_assoc($result_i);

            
    $max_gewicht_je_paket $row_i[gewicht_bis];

            if(
    $gewicht $max_gewicht_je_paket) {
                
    $preis_max_gewicht $row_i[preis];
                
    $multiplikator_max_gewicht $gewicht $max_gewicht_je_paket;
                
    $teile split("\."$multiplikator_max_gewicht);
                
    $multiplikator_max_gewicht $teile[0];

                
    $preis_max_gewicht $preis_max_gewicht 
    $multiplikator_max_gewicht;
                
    $rest_gewicht $multiplikator_max_gewicht 
    $max_gewicht_je_paket;

                
    $gewicht $gewicht $rest_gewicht;
            }
            
            
    $query_i "
                SELECT preis
                FROM frachtkosten
                WHERE zone = '
    $zone'
                AND gewicht_bis >= '
    $gewicht'
                ORDER BY gewicht_bis ASC
                LIMIT 1
            "
    ;

            
    $result_i mysql_query($query_i$db2);

            
    $row_i mysql_fetch_assoc($result_i);

            if(
    $preis_max_gewicht 0) {
                
    $row_i[preis] = $row_i[preis] + $preis_max_gewicht;
            }  

            
    $row_e['Preis1'] = $row_i['preis'];
            
            if(
    $row_b['kopplung'] == "") {
                
    $query_i "
                  SELECT *
                  FROM staffel
                  WHERE preisstaffel = '
    $row_b[preisstaffel]'
                "
    ;   
                
                
    $result_i mysql_query($query_i$db2);
                
                
    $row_i mysql_fetch_assoc($result_i);
                
                if(
    $row_i['frachtfrei_ab'] <= $gesamtsumme) {
                    
    $row_e['Preis1'] = 0.000;   
                }

                if(
    $row_i['mindermenge_bis'] >= $gesamtsumme) {
                    
    $mindermenge_zuschlag $row_i['mindermenge_zuschlag'];   
                }
            }
            else {
                if(
    $row_b['frachtfrei_ab'] <= $gesamtsumme) {
                    
    $row_e['Preis1'] = 0.000;   
                }

                if(
    $row_b['mindermenge_bis'] >= $gesamtsumme) {
                    
    $mindermenge_zuschlag $row_b['mindermenge_zuschlag'];   
                }
            }
          
            if(
    $zzgl_versand != 1) {
                
    $query_d "
                  INSERT
                  INTO _sbb_ibelegpo
                  (Belegart,Belegverbi,Postennumm,Artikelnum,Anzahl,Einzelprei,zusatztext)
                  VALUES('Auftrag','
    $row[belegverbi]','$postennumm','VERSAND','1',
    '
    $row_e[Preis1]','$gewicht')

                "
    ;  

                print 
    $query_d "<br>";    
                
    mysql_query($query_d$db2); 
            }

            if(
    $mindermenge_zuschlag 0) {   
                
    $postennumm++;
             
                
    $query_d "
                  INSERT
                  INTO _sbb_ibelegpo
                  (Belegart,Belegverbi,Postennumm,Artikelnum,Anzahl,Einzelprei,zusatztext)
                  VALUES('Auftrag',
    '
    $row[belegverbi]','$postennumm','100024','1',
    '
    $mindermenge_zuschlag','')
                "
    ;  

                print 
    $query_d "<br>";    
                
    mysql_query($query_d$db2); 
            }
        }

        
    mysql_close($db);
        
    mysql_close($db2);


    sis('14344','14344264024815');
    ?>
    Zuletzt geändert von bweichel; 22.05.2006, 17:40.
    » http://www.htaccess-generator.com

  • #2
    Re: Datensätze werden doppelt angelegt

    Code umbrechen bitte - du bist lange genug hier, dass man dir das doch wohl nicht immer wieder sagen muss, oder?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      sorry, bei mir hat`s gepaßt...
      » http://www.htaccess-generator.com

      Kommentar


      • #4
        Testausgaben gemacht? Welches if wird wahr, was enthält $query_* ...?

        Reduziere deinen Code doch bitte aufs Nötige!

        Kommentar


        • #5
          Ja ich habe bereits Testausgaben gemacht. Hier ein Ausgabe auf dem Script, nach dem es einmal wie oben über den Browser aufgerufen wurde.

          INSERT INTO _sbb_ibeleg (Belegart,Belegverbi,Kundennumm,Name,Name2,Strasse,Land,Plz,Ort,Zahlungszi,Versandart,Lname,Lstrasse ,Lplz,Lort,Lland,Inetbeleg,xbestell_datum,xsis,xstatus,Lname2) VALUES('Auftrag','14344264024815','14344',' xxx xxx','xxx','xxx','D','6xxxx','xxx','36','13-1','xxx xxx','xxx','6xxxx','xxx','Frankreich','1','2006-05-19 16:22:59','ShopInShop','Halten','xxx')

          INSERT INTO _sbb_ibelegpo (Belegart,Belegverbi,Postennumm,Artikelnum,Anzahl,Einzelprei,zusatztext) VALUES('Auftrag','14344264024815','1','PB5030L','10','6.850','')
          INSERT INTO _sbb_ibelegpo (Belegart,Belegverbi,Postennumm,Artikelnum,Anzahl,Einzelprei,zusatztext) VALUES('Auftrag','14344264024815','2','VERSAND','1','4.250','1.5')
          Hello World
          » http://www.htaccess-generator.com

          Kommentar


          • #6
            Gut - dann kontrolliere, ob das Script evtl. mehrmals aufgerufen wird - indem du z.b. einen Zähler in der Session bei jedem Aufruf erhöhst, und dessen Stand in einem unabhängigen Script kontrollierst.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Nein, es wird nur einmal aufgerufen. Habe es gerade mit einer SESSION-Variable und einem weiteren Script versucht. Der Zähler schreibt 1 und wenn ich es noch einmal aufrufe 2 usw. Die Einträge sind jedoch weiterhin doppelt. Es ist zum "aus der Haut fahren"...
              » http://www.htaccess-generator.com

              Kommentar


              • #8
                Also wenn ich mir den Code angucke ist das doch so gewollt?

                Du macht einmal nen Insert für PB5030L und einmal für den Versand.

                Wo issen jetzt dein Problem?

                Kommentar


                • #9
                  welche insert-queries sind doppelt?

                  Kommentar


                  • #10
                    vielleicht möchtest Du alles, was mit $belegverbi zu tun hat, in den tabellen _sbb_ibeleg und _sbb_ibelegpo löschen, um alte, hängengebliebene Verarbeitungen (Tests?) zu korrigieren Die Belegauslösung könnte wirklich mehrfach sein, zB für Kopien von irgendwoher. Die Vergabe von $belegverbi kann falsch sein. Es ist auch möglich, dass die Artikel zweimal in der belegpo DB sind, abar dann sollte zumindest die Portto und Mindermengen Zeilen nur 1x kommen.

                    So wie ich das "doppelt" verstehe, kommen alle Einträge doppelt, auch die Porto und gegebenenfalls Mindermengenzeilen. Das macht dein Skript nicht.

                    PS ich verstehe die subqueries nicht ganz dh, sind die wirklich nötig?

                    Kommentar


                    • #11
                      Hi,

                      läuft das script lokal - also offline bei dir aum Rechner?
                      ich hatte das Problem auch mit einem meiner Skripte und als ichs dann hochgeladen hatte, funktionierte alles wies sein sollte.

                      gruss CrazyPip

                      Kommentar


                      • #12
                        Also es sind alle query`s doppelt und in der belegpo und beleg ist nur ein eintrag vorhanden. Das habe ich alles bereits kontrolliert. Ich weiß wirklich nicht woher der zweite Eintrag kommt. Das Script läuft nicht lokal.

                        Es ist so als ob ich das Script ein zweites mal ausführe. Das macht das ganze ja so kurios.
                        » http://www.htaccess-generator.com

                        Kommentar


                        • #13
                          Original geschrieben von bweichel
                          Also es sind alle query`s doppelt und in der belegpo und beleg ist nur ein eintrag vorhanden. Das habe ich alles bereits kontrolliert. Ich weiß wirklich nicht woher der zweite Eintrag kommt. Das Script läuft nicht lokal.

                          Es ist so als ob ich das Script ein zweites mal ausführe. Das macht das ganze ja so kurios.
                          Wie wird denn die Funktion sis aufgerufen, sis('14344','14344264024815'); kann's ja nicht sein. Einmal sis() aufgerufen gibt mit Sicherheit 1x die INSERTS, also wird die Funktion 2x aufgerufen.

                          Um es zu verdeutlichen: wenn Du das skript (ohne den Testaufruf sis('14344','14344264024815'); ) 'laufen' lässt, gibt es gar keine Datenbankeinträge. Wenn Du dieses skript includest, gibt es auch keine Datenbankeinträge. Solche gibt es nur wenn sis() gerufen wird.
                          Zuletzt geändert von muh (newbie); 22.05.2006, 21:47.

                          Kommentar


                          • #14
                            PHP-Code:
                            function sis($kundennumm$belegverbi
                            {
                             echo 
                            "sis gerufen kundennumm=$kundennumm belegverbi=$belegverbi<br />";
                             
                            debug_print_backtrace ()

                              
                            usw
                            Ich habe debug_print_backtrace zwar noch nie verwendet, aber es scheint mir hier sinnvoll.

                            Kommentar


                            • #15
                              also ich kann es zwar noch immer nicht ganz glauben, aber das problem mit den doppelten einträgen scheint am neuen ie 7 zu liegen. wenn ich das formular mit firefox aufrufe wird immer nur ein eintrag gemacht, so wie es auch sein sollte. rufe ich das formular mit dem ie 7 auf, bekomme ich zwei einträge. ich kann machen was ich will. habe die variablen nach dem ersten absenden gelöscht, aber es kommt trotzdem immer zwei einträge. die einträge kommen zeitversetzt. ca. 10 sekunden unterschied. ist da jemanden was bekannt?
                              » http://www.htaccess-generator.com

                              Kommentar

                              Lädt...
                              X