Ankündigung

Einklappen
Keine Ankündigung bisher.

While schleife Erweitern MySQL

Einklappen

Neue Werbung 2019

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

  • While schleife Erweitern MySQL

    Hallo,

    ich habe eine Whileschleife der bis zu einem Wert wiederholungen macht. Diesen Wert zieht er sich aus meiner DB aus der Tabelle Temp_Cart.
    Neben dem Wert ist auch die dazugehörige Spalte Deno_ID. Nun möchte ich das er für jeden Datensatz in der Tabelle diese Wiederholungen macht. Denn er macht es immoment nur mit einem Datensatz.
    PHP-Code:

            $sel_cart
    =sprintf("select * from Temp_Cart WHERE sessionid='%s'",$_SESSION['sid']);
            
    $rs_cart=mysql_query($sel_cart,$conn);
            
    $rowdeno mysql_fetch_array($rs_cart);
    $checkdeno=$rowdeno['deno_id'];

            

            if(
    mysql_num_rows($rs_cart) == 0)
            {
                
    LogMessage("No value found in Temp_Cart for ".$_SESSION['sid'],'Information',$logFilePath,$trueVal,$trueVal);

            }

            
    $sql_batch=sprintf("Select * from Pins where ST=0 and denoid= %d Limit 0,1",$checkdeno);
                
    $rs_batch=mysql_query($sql_batch);
    //            $row2 = mysql_fetch_array($rs_batch);
                
    $rsBat2=mysql_num_rows($rs_batch);
            
        
    if (
    $rsBat2==0) {                        
                    include(
    "services/ahh.php");
                    } 

    ahh.php
    PHP-Code:
    $qtyorg=$rowdeno['quantity'];
    $a 0;
    while(
    $a $qtyorg)
       {
       
    $a++;
                
    $sel_query sprintf("SELECT c.card_id,c.card_name,d.denomination_rate, c.denoremote, p.denoid,p.sellingrate, p.purchaserate FROM Cards c, CardDenomination d, PriceSetting p WHERE c.card_id=d.card_id and d.deno_id=p.denoid and customerid= %d and p.denoid=%d;",$_SESSION['dCustID'],$checkdeno);        //            echo $sel_query."<br>";//            exit();
                
    $rs=mysql_query($sel_query);
                    
    $row mysql_fetch_array($rs);

                            
            
    $sel_cart="select * from remote WHERE deno_id='".$checkdeno."'";
            
    $rs_cart=mysql_query($sel_cart,$conn);
                    
    $rows mysql_fetch_array($rs_cart);

            
       
    $remote=$rows['remote'];
       
    $denoforyou=$checkdeno


  • #2
    Bevor du daran gehst das ganze zu erweitern, solltest du erst einmal dein vorhandenes Skript umschreiben.
    1. mysql_ ist veraltet, nutze entweder mysqli_ oder PDO, da du sonst mit der nächsten PHP-Version einmal alles neu machen darfst.
    2. sprintf ist nicht zum MySQL-Queries zusammenbauen da, dafür gibt es prepared statements
    3. Innerhalb einer Schleife sollten keine Datenbankabfragen stehen, das erzeugt unnötig viel Serverlast, stattdessen eine große Abfrage ausführen.
    mysql ist veraltet Mails senden: Ohne Probleme und ohne mail()
    PHP-Code:
    echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>'

    Kommentar


    • #3
      Die älteste der drei mysql-Erweiterungen ist veraltet (mysql_*-Funktionen, nicht die MySQL-Datenbank) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
      Choosing an API
      Warum man mysql* generell nicht (mehr) nutzen sollte.
      Wie man von mysql* auf PDO umsteigt
      Wissenswertes zum Thema SQL-Injection
      Standards - Best Practices - AwesomePHP - Guideline für WebApps

      Kommentar


      • #4
        Hey danke jungs das nehme ich mir zum Herzen und guck es Mir bald an.

        Dennoch brauch ich einen Lösungsansatz für mein Problem

        Kommentar


        • #5
          Deine Codeformatierung macht das Lesen echt schwert. Arbeite da mal dran. So liesst du mehrere Datensaetze:

          PHP-Code:
          <?php
          $pdo 
          = new PDO('mysql:host=localhost;port=3306;charset=utf8;dbname=mydb');
          $pdo->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

          $stmt $pdo->prepare('SELECT field1, field2, field3 FROM table WHERE field4 = :value');
          $stmt->execute(array('value' => 1234));
          $rows $stmt->fetchAll(PDO::FETCH_ASSOC);

          foreach(
          $rows as $row) {
              
          print_r($row);
          }
          Standards - Best Practices - AwesomePHP - Guideline für WebApps

          Kommentar


          • #6
            Funktioniert leider immernoch nicht



            Hab das nun so gemacht aber leider ohne erfolg immer wird der erste eintrag gemacht und es gibt keine wiederholung für den 2.

            PHP-Code:
            include('simple_html_dom.php'); 



                    
            $sel_cart=sprintf("select * from Temp_Cart WHERE sessionid='%s'",$_SESSION['sid']);
                    
            $rs_cart=mysql_query($sel_cart,$conn);
                    while(
            $rowdeno mysql_fetch_array($rs_cart)) {
            $checkdeno=$rowdeno['deno_id'];

            $qtyorg=$rowdeno['quantity'];
            $a 0;    
            while(
            $a $qtyorg)
               {
               
            $a++;
                        

            $sel_query sprintf("SELECT c.card_id,c.card_name,d.denomination_rate, p.denoid,p.sellingrate, p.purchaserate FROM Cards c, CardDenomination d, PriceSetting p WHERE c.card_id=d.card_id and d.deno_id=p.denoid and customerid= %d and p.denoid=%d;",$_SESSION['dCustID'],$checkdeno);        //            echo $sel_query."<br>";//            exit();
                        
            $rs=mysql_query($sel_query);
                            
            $row mysql_fetch_array($rs) or die(mysql_error());
                            
                                    
            $sel_cart="select * from remote WHERE deno_id='".$checkdeno."'";
                    
            $rs_cart=mysql_query($sel_cart,$conn);
                            
            $rows mysql_fetch_array($rs_cart)  or die(mysql_error());
                        

                                    


                    
               
            $remote=$rows['remote'];
               
            $denoforyou=$checkdeno
            Habe die wichtigsten elemente jetzt in diese datei reingepackt.

            Kommentar


            • #7
              Und es funktioniert mit der PDO variante.
              Genial und sauber.
              rkr kannst du mir Tutorials, Hilfen bzw. Bücher für PDO empfehlen?
              Mein Code wirkt sauberer damit!

              Kommentar


              • #8
                Gerade nicht, weil ich unterwegs bin. Aber du müsstest im Netz leicht hunderte gute Tutorials finden. Wichtig sind vor allem prepared statements, charsets und buffered/unbuffered queries.
                Standards - Best Practices - AwesomePHP - Guideline für WebApps

                Kommentar

                Lädt...
                X