aus Funktion in eine Funktion

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

  • aus Funktion in eine Funktion

    Hallo liebes Forum,

    Entweder habe ich Tomtaten auf den Augen oder fehlende Gedanken. Ich habe folgendes Problem:

    Ich Übergebe von einer Seite A eine ID an die Seite B.
    Nun soll mit dieser ID innerhalb einer Function, eine While Schleife mit einer DB Abfrage ausgeführt werden und ein array geschrieben werden.
    Nun möchte ich dieses array an eine andere Funktion innerhalb dieser Seite übergeben. Ich bekomme es nur heute nicht hin. Das array wird mir einfach nicht angezeigt.
    Folgendes ist die Function, welche das array schreibt, funktioniert auch:

    PHP-Code:
        function add_cart_photo($photo_quantity '0'$products_id) {
          global 
    $customer_id;
    //      $products_id = $products_id;
          
    if ($this->in_cart($products_id)) {
            
    $this->update_quantity_photo($products_id$photo_quantity);
          } else {
            
    $this->contents[$products_id] = array('quantity_photo' => $photo_quantity);
            
              }
        } 
    In diese Function, soll das array von oben übergeben werden:

    PHP-Code:
        function get_products() {
          global 
    $languages_id$size;
          if (!
    is_array($this->contents)) return false;
          
    $products_array = array();
          
    reset($this->contents);
          while (list(
    $products_id, ) = each($this->contents)) {

            
    $products_query tep_db_query("select p.products_id, 
    pd.products_name, p.products_model, p.products_image, 
    p.products_price, p.products_weight, p.products_tax_class_id, 
    p.price_group from " 
    TABLE_PRODUCTS " p, " 
    TABLE_PRODUCTS_DESCRIPTION " pd where p.products_id = '" . (int)
    $products_id "' and pd.products_id = p.products_id and pd.language_id 
    = '" 
    . (int)$languages_id "'");
            if (
    $products tep_db_fetch_array($products_query)) {
              
    $prid $products['products_id'];
              
    $products_price $products['products_price'];

              
    $specials_query tep_db_query("select 
    specials_new_products_price from " 
    TABLE_SPECIALS " where 
    products_id = '" 
    . (int)$prid "' and status = '1'");
              if (
    tep_db_num_rows($specials_query)) {
                
    $specials tep_db_fetch_array($specials_query);
                
    $products_price $specials['specials_new_products_price'];
              }

              
    $products_array[] = array('id' => $products_id,
                                        
    'name' => $products['products_name'],
                                        
    'model' => $products['products_model'],
                                        
    'image' => $products['products_image'],
                                        
    'price' => $products_price,
                                        
    'photo' => $quantity_photo,
                                        
    'price_group' => $products['price_group'],
                                        
    'quantity' => $this->contents[$products_id]['qty'],
                                        
    'weight' => $products['products_weight'],
                                        
    'final_price' => ($products_price $this->attributes_price($products_id)),
                                        
    'tax_class_id' => $products['products_tax_class_id'],
                                        
    'attributes' => (isset($this->contents[$products_id]
    [
    'attributes']) ? $this->contents[$products_id]['attributes'] : ''));
            }
          }

          return 
    $products_array;
        } 

  • #2
    Gehts um $this->contents?
    Woher weißt du, dass die erste Funktion das Array korrekt erzeugt?
    Woher weißt du, dass es in der zweiten nicht verfügbar ist?
    Sind beide Funktionen Methoden des selben (nicht nur des gleichen!) Objekts?

    Willst du wirklich in einer Schleife die DB fragen?

    Kommentar


    • #3
      Hallo onemorenerd,

      Gehts um $this->contents? JA

      weil ich das array, mit print_r ausgegeben habe und ein Inhalt vorhanden ist. Woher ich weiß, das es nicht ferfügbar ist?! Wenn ich print_r in die neue funtion einsetze, wird mir der inhalt des array nicht angezeigt.

      Was hättest du denn für eine Idee, statt einer Schleife?

      Vielen Dank und Grüße

      Kommentar


      • #4
        Original geschrieben von SLSB02
        Was hättest du denn für eine Idee, statt einer Schleife?
        Die zwei SELECT-Queries pro Schleifendurchlauf kannst du zusammenfassen und die Schleife sparst du dir komplett, wenn du statt
        Code:
        while (list($products_id, ) = each($this->contents)) {
            ... where p.products_id = $products_id ...
        }
        alles in einem Rutsch machst:
        Code:
        ... where p.products_id IN('.implode(', ', $this->contents).' ...
        Erklär mir bitte mal, warum du bei
        Code:
        ... where p.products_id = '" . (int)$products_id . "' and ...
        die Produkt-ID in ' einschließt!?

        Und zum eigentlichen Problem: Wie instanzierst du die Klasse, zu der die beiden Funktionen gehören? Sind sie überhaupt Methoden des selben Objekts?

        Kommentar


        • #5
          Hallo,

          so sieht der Anfang, der Datei aus:

          PHP-Code:
            class shoppingCart {
              var 
          $contents$total$weight$cartID$content_type
          hier steht $content_type drin. Sonst wüsste ich gerade nicht so recht, was du meinst ;-(

          Kommentar


          • #6
            Ich meine alle Stellen, wo
            $irgendwas = new shoppingCart();
            steht. Davon sollte es eigentlich nur eine geben. Irgendwann später im Code wird dann
            $irgendwas->add_cart_photo(...);
            stehen und hoffentlich noch später
            $irgendwas->get_products(...);

            Ist das so?

            Kommentar


            • #7
              Hallo,

              ja das ist richtig so, denn alles anderen werte die im unteren array geschrieben werden, funktionieren ja, es hackt nur bei add_cart_photo.

              Vielen Dank, für deine schnellen Antworten...

              Kommentar


              • #8
                Was ist denn bitte das "untere Array"? Und was heißt hier, es "hackt bei add_cart_photo", ich denke du hast schon überprüft, dass diese Methode das Array korrekt erzeugt?

                Irgendwie wird das so nix, hänge das Script doch mal an; ich schau lieber im Ganzen drüber.

                Kommentar


                • #9
                  Hallo,

                  ich meinte das untere array aus meinem ersten Beitrag...
                  Vielen Dank, für dein Hilfe....
                  Angehängte Dateien

                  Kommentar


                  • #10
                    Tja das ist leider nur die Klasse. Da kann ich nur sagen, dass zwischen
                    $irgendwas->add_cart_photo(...);
                    und
                    $irgendwas->get_products(...);
                    möglichst nicht
                    $irgendwas->cleanup()
                    stehen sollte oder ein anderer Aufruf, der $this->contents verändert.

                    Falls dir das nicht hilft, häng das Script an, wo du
                    $irgendwas = new shoppingCart();
                    drinstehen hast und das du auch die ganze Zeit aufrufst um zu testen.

                    Kommentar


                    • #11
                      Hallo nochmal,

                      ich habe den Fehler nun eingrenzen können:

                      PHP-Code:
                            reset($this->contents);
                            while (list(
                      $products_id, ) = each($this->contents)) {

                             
                      $productss_query tep_db_query("select photo_size from " 
                      TABLE_PHOTO_INFO " where price_group = '" $products
                      ['price_group'] . "' and language_id = 2");
                              while(
                      $productss tep_db_fetch_array($productss_query)){

                              
                      $size[] = array('quantity_photo' => $productss['photo_size'],
                                               
                      'id' => $prid);

                      in der ersten while schleife, wird die produkt id, übergeben und mit der 2ten while schleife, möchte ich ein array erstellen. das problem ist nur, das er immer wieder von vorne anfängt so das bei jedem produkt nach dem ersten immer die werte aller vorgänger produkte habe, was ich aber nicht möchte. Ich möchte immer nur die Werte passend zu dem jeweiligen Produkt in das array haben?!

                      Vielen Dank

                      Kommentar


                      • #12
                        Schreib unset($size); vor die innere While-Schleife.

                        Kommentar


                        • #13
                          Hallo onemorenerd vielen Danke, für deine schnelle Hilfe...

                          Ich habe es nun hinbekommen, das es so läuft, wie ich es gerne hätte. Doch dabei ist mir nun noch eine kleiner Fehler passiert, vielleicht, könnt ihr mir noch einmal helfen!?

                          Ich möchte, entweder die neue Menge aus dem array übernehmen oder die standard Menge aus der DB. Nun ist es aber leider so, dass die Menge aus dem $cart_quantity_photo array nicht in das $size array übergeben wird sondern immer nur der Wert aus der DB, was mache ich hier falsch... Irgendwie, will das alles nicht so recht klappen... *sonst passt des immer*

                          PHP-Code:
                                if (is_array($cart_quantity_photo)) {
                                
                          reset($cart_quantity_photo);
                                while (list(
                          $photo_id$photo_quantity ) = each($cart_quantity_photo) ){
                                if (
                          $photo_id == $products['products_id'].$productss['photo_id']) {
                                    
                          $mengen $photo_quantity;
                                  
                          $id $photo_id;
                                }
                              }
                          }
                                if( (
                          $photo_id == $products['products_id'].$productss['photo_id']) && $productss['quantity'] == $photo_quantity) {

                              
                          $menge $productss['quantity'];
                          } else {
                              
                          $menge = (int)$mengen;

                          }
                                  
                          $size[] = array('photo_size' => $productss['photo_size'],
                                                  
                          'photo_price' => $productss['photo_price'],
                                                  
                          'photo_tax' => $productss['tax_class_id'],
                                                  
                          'id_photo' => $prid,
                                                  
                          'photo_id' => $productss['photo_id'],
                                                  (int)
                          $products_id $productss['photo_id'] => (int)$menge); 
                          Vielen Dank, für eure Hilfe, liebe Grüße

                          Kommentar

                          Lädt...
                          X