Function nur einmal aufrufen

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

  • #16
    Wenn du schon nur drei Dateien hast, dann machs doch mal wie von closure vorgeschlagen und schreibe deinen Code zurück bis auf eine minimale Pseudocode-Notation. Das kann auch eine Folge von Stichpunkten sein.

    Aus der While-Schleife da oben könnte beispielsweise das werden:
    PHP-Code:
    while(hole nächstes Foto aus DB) {
      if (
    Foto in Warenkorb) {
        
    Menge alte Menge
      
    } else {
        
    Menge neue Menge
      
    }
      
    // ...

    Wie du wohl merkst, verstehe ich den Code nicht. Aber das Prinzip sollte klar sein: Keine Variablen mehr, sondern sinngebende Bezeichnungen wie "Menge" oder "Anzahl Fotos im Warenkorb", keine Funktionen sondern Vorgänge wie "hole nächstes Foto" oder "berechne Gesamtpreis". Aber Achtung: Schreib das hin, was der Code wirklich macht, nicht das, was er machen soll! Das ist ein Unterschied; mindestens an einer Stelle (da wo der Fehler ist).

    Kommentar


    • #17
      Dann ist die Deklaration von size() ohne Argument und der Aufruf mit Argument.

      PHP-Code:
      in der Funktion:
      function 
      size()
      global 
      $languages_id$cart_quantity_photo$cart;

      $menge $photo['quantity']; // aus der Datenbank
               
      } else {
      $menge $cart_quantity_photo[$products_key];


      im Aufruf:

      $cart->size($_POST['cart_quantity_photo']); 
      ist hier eventuell register_globals im Spiel, ansonsten spielt $_POST überhaupt keine Rolle bei der Bestimmung von $menge.
      $this und global $cart beissen sich auch irgendwie (sind dasselbe wenn es nur ein cart Objekt gibt).


      Der Rückgabewert der Funktion im Aufruf ; $cart->size(...) ; fällt ins Leere, steht zwischen zwei Strichpunkten:
      PHP-Code:
      $cart->add_cart($HTTP_POST_VARS['products_id'][$i], 
      $HTTP_POST_VARS['cart_quantity'][$i], $attributesfalse);
                                        
      $cart->size($_POST['cart_quantity_photo']);
                                      } 
      Zuletzt geändert von miximaxi; 27.03.2006, 23:10.

      Kommentar


      • #18
        Hallo,

        ich habe schon versucht, size() eine Deklaration zu verpassen aber irgendwie, will das nicht so, wie ich das will.
        Ich nutze doch aber $cart_quantity_photo global, ist das villeicht ein Problem.

        Gruß und Dank

        Kommentar


        • #19
          Das kann ein Problem sein, wenn register_globals = on ist, denn dann sind $_POST['cart_quantity_photo'] und $cart_quantity_photo anfangs das selbe.

          Veränderungen an $_POST[$cart_...] wirken allerdings nicht auf $cart_.... und umgekehrt!

          Kommentar


          • #20
            im Aufruf wird (a) der Parameter, und
            (b) das Funktionsergebnis ignoriert, und
            (c) sonst keine Variabeln gesetzt, dh keine globalen oder im $this.
            Der Aufruf ist ein NOOP.
            Möglicherweise sollte dies ein Parameter zu $cart->add sein, ist es aber nicht....
            PHP-Code:
            .                                                  ;
                                              
            $cart->size($_POST['cart_quantity_photo']); 
            Zuletzt geändert von miximaxi; 28.03.2006, 06:40.

            Kommentar


            • #21
              Function wird erneut aufgerufen

              Hallo,

              wollte den alten Tread nicht noch mal noch vorne holen.
              Der letzte Hinweise war, dass die Function an einer Stelle ein 2tes mal aufgerufen wird. Ich stehe nun ein wenig auf der Leitung.

              Die Function, befindet sich in der Datei function.php.
              Der Aufruf, erfolgt nach dem klick eines aktualisierungs Button in der general.php und die ausgabe erfolgt auf der ausgabe.php

              Der Aufruf der Funktion, nach dem klick des Button:

              PHP-Code:
                 $cart->size($_POST['cart_quantity_photo'][$i]); 
              die function:

              PHP-Code:

              function size() {
              global 
              $languages_id$cart_quantity_photo;

                    
              $sizes = array();
                    
              $photo_array = array();
                    
              reset($this->contents);
                    while (list(
              $products_id) = each($this->contents)) {

                      
              $photo_query tep_db_query("select p.price_group, 
              ph.photo_size, ph.quantity, ph.photo_id, ph.photo_id, ph.photo_price, 
              ph.tax_class_id from " 
              TABLE_PHOTO_INFO " ph, " 
              TABLE_PRODUCTS " p where p.products_id = '" . (int)$products_id "' 
              and  ph.price_group = p.price_group and ph.language_id  = '" 
              . (int)
              $languages_id "'");

                      while(
              $photo tep_db_fetch_array($photo_query)) {

                      
              $products_key = (int)$products_id $photo['photo_id'];

                       if( (
              $cart_quantity_photo[$products_key] == '') || 
              $cart_quantity_photo[$products_key] == $photo['quantity']) {
                       
              $menge $photo['quantity'];
                       } else {
                       
              $menge $cart_quantity_photo[$products_key];
                      }         

                           
              $sizes[] = array('id' => (int)$products_id,
                                            
              'photo_size' => $photo['photo_size'],
                                           
              'photo_price' => $photo['photo_price'],
                                           
              'photo_tax' => $photo['tax_class_id'],
                                           
              'id_photo' => $prid,
                                           
              'photo_id' => $photo['photo_id'],
                                           
              $products_key => $menge);
                                           
                      }
                          
              $photo_array[] = array('photo' => $sizes);
                  unset(
              $sizes);
                  }
                  return 
              $photo_array;

              die Ausgabe:

              PHP-Code:
                   $sizess $cart->size(); 
              Die Funktion, wird doch 2x ausgeführt, richtig?

              Gruß und dank...

              Kommentar


              • #22
                Re: Function wird erneut aufgerufen

                Original geschrieben von SLSB02
                wollte den alten Tread nicht noch mal noch vorne holen.
                Doppelpostings sind und bleiben unerwünscht.
                *zusammenführ*
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #23
                  Einen Button, auf den man klicken kann und dieser löst eine action=update aus. Dieses Action, verweist dann auf eine function. Nun ist aber so, das die Seite (normal) wieder neu geladen wird und die Function, noch ein 2tes mal aufgerufen wird. Wie kann ich die Funktion nur einmal aufrufen?
                  Das einfachste dürfte doch wohl sein (wie auch schon geschrieben), dass der erste Fkt Aufruf eine Session Var registriert. Wenn die Fkt aufgerufen wird prüft sie erst ob dieser Wert gesetzt ist --> wenn ja die Session Var schrotten und return false
                  falls nein --> Session Var registrieren und Fkt ausführen

                  Gruss

                  tobi
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #24
                    Hallo Tobi,

                    vielen Dank für deine Antwort, das habe ich auch schon in Betracht gezogen und probiert. Mein Problem, ist nur das ich den Inhalt der Function auf der Seite nicht ausgeben kann. Ich kann auf diese nicht zugreifen wenn ich die function in der ausgabe.php nicht starten oder ich stehe momentan total auf dem schlauch, das kann auch sein.

                    Vielleicht kannst du mir in die richtung noch einmal einen nützlichen Tipp geben. WIe kann ich das ergebniss der Funktion auf einer anderen Seite ausgeben ohne Sie zu starten?

                    Kommentar


                    • #25
                      Du bist ja ziemlich beratungsresistent! Weiter oben findest du bereits einige Tipps, wie du die Übersicht über deinen schlecht strukturierten Code (wieder-) gewinnen könntest. Was davon hast du mal umgesetzt?

                      Kommentar


                      • #26
                        Hallo,

                        das hat glaube ich nichts mit resistent zu tun. Das hat was damit zu tun, das ich als letztes eine andere Frage gestellt habe.

                        Die Function, funktioniert, es werden alle Werte geändert und ausgegeben, so wie ich es haben will. Nur wird die Function wahrscheinlich durch die Ausgabe Seite noch einmal gestartet, wodurch es zu den alten Werten kommt. Denn $cart_quantity_photo ist dann schon wieder nicht mehr vorhanden! Ich hätte nur gerne mal gewusst, wie ich die Ergebnisse der Funktion an eine andere Seite weitergebe ohne die Function neu zu starten. Ich weiß, das es villeicht alles bissel blöd klingt. Aber ich denke, das ich schon einen Schritt weiter gekommen bin!

                        Folgendes, steht in einem case für den Updatebutton:

                        PHP-Code:
                         $cart->size($_POST['cart_quantity_photo'][$i]); 
                        und das steht in der Seite, die alles ausgibt:

                        PHP-Code:
                         $sizess $cart->size(); 
                        das startet doch die Funktion ein 2tes mal.
                        Zuletzt geändert von SLSB02; 29.03.2006, 15:48.

                        Kommentar


                        • #27
                          Original geschrieben von SLSB02
                          Nur wird die Function wahrscheinlich durch die Ausgabe Seite noch einmal gestartet, wodurch es zu den alten Werten kommt.
                          Was heißt hier "wahrscheinlich" - du schreibst doch weiter unten selber, dass du die Funktion explizit noch mal aufrufst ...?
                          Ich hätte nur gerne mal gewusst, wie ich die Ergebnisse der Funktion an eine andere Seite weitergebe ohne die Function neu zu starten.
                          In dem du sie in einer Session oder anderswo ablegst, und von dort auch wieder ausliest ...
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar

                          Lädt...
                          X