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.
    [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
    [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

    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

      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);
          }

          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.

                Kommentar

                Lädt...
                X