phpSHOP - PopUp mit Mehrfachauswahl. Prob beim übergeben

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

  • phpSHOP - PopUp mit Mehrfachauswahl. Prob beim übergeben

    Hallo,
    ich habe ein Problem mit phpShop. Ich habe Felder hinzugefügt. Die Übergabe durch den Warenkorb bis hin zur Datenbank gibt keine Probleme, solange es normale Felder (Textfeld, PopUp) sind.

    Ist es aber ein PopUp mit Mehrfachauswahl habe ich Probleme beim übergeben. Er übergibt mir nur "Array" als Wert nicht die selektierten Werte. Ich habe es geschafft, den Array zu splitten und die Werte im Warenkorb anzuzeige mit foreach(). Aber bei der update-funktion verliere ich die Infos in dem Array. Es handelt sich um das Feld "collections". Hier sind die Funktionen. Vielleicht kann mir einer sagen, wie ich das lösen kann.

    Es wäre mir schon hilfreich, wenn mir einer sagen würde, an welcher Stelle der Funktionen ich ansetzen muss, damit auch das Feld collections als Array durchgeht.


    *************************************************************************/
    class ps_cart {
    var $classname="ps_cart";

    PHP-Code:
      /**************************************************************************
      ** name: add()
      ** created by: brett odonnell
      ** description: updates the quantity of all product_ids in the cart
      ** parameters:
      ** returns:
      ***************************************************************************/
      
    function add(&$d) {
        global 
    $cart;
        
    $db = new ps_DB;
        

        
    $return=True;
        
    $d["error"]="";
        
        
     if(
    is_array($d["products"])){
          for (
    $i=0;$i<count($d["products"]);$i++) {
            if(!
    $this->add_item($d["products"][$i]["product_id"],
                                
    $d["products"][$i]["quantity"], 
                                
    $d["products"][$i]["schrift"], 
                                
    $d["products"][$i]["text"], 
                                
    $d["products"][$i]["collections"])){
              
    $d["error"] = $this->error;
              
    $return=False;
            }
          }
        }
        else{
          if(!
    $this->add_item($d["product_id"],
                              
    $d["quantity"], 
                              
    $d["schrift"], 
                              
    $d["text"], 
                              
    $d["collections"])){
            
    $d["error"] = $this->error;
            
    $return=False;
          }
        }

        return 
    $return;
      }

      
    /**************************************************************************
      ** name: add_item()
      ** created by: brett odonnell
      ** description: adds an item to the shopping cart
      ** parameters:
      ** returns:
      ***************************************************************************/
      
    function add_item($product_id,$quantity,$schrift,$text,$collections) {
        global 
    $cart;

        
    $return=True;
        
    $db = new ps_DB;

        
    $this->error ="";

        if(!
    $quantity){
          
    $quantity=1;
        }

        
    // Check for negative quantity
        
    if ($quantity 1) {
            
    $this->error "(qty:$quantity) - To delete an item please click the 'Delete' link.";
            return 
    False;
        }

        if (!
    ereg("^[0-9]*$"$quantity)) {
          
    $this->error .= "Please enter a valid quantity for this item.<br>";
          
    $return=False;
        }

        
    //If the product publish is No then it will not display the item even if you
        //enter or change the product_id in the URL bar.
        
    $q "SELECT product_name,product_publish FROM product WHERE product_id='$product_id'";
        
    $db->query($q);
        
    $db->next_record();
        
    // if the product isn't publishable, don't allow the add or update
        
    if ('N' == $db->f("product_publish") ) {
                  
    // set your "not available" error message here
                 
    $d["error"] = "We're sorry but ".$db->f("product_name")." is not available at this time.";
                 
    // when in ps_cart->update, you probably want to uncomment
                // the line below to remove the product from the cart
                //$this->delete($d);
                 
    return False;
        } 
    //end if prodcut_publish


        // Check to see if checking stock quantity
        
    if (CHECK_STOCK) {
          
    $q "SELECT product_in_stock ";
          
    $q .= "FROM product where product_id=";
          
    $q .= $product_id;
          
    $db->query($q);
          
    $db->next_record();
          
    $product_in_stock $db->f("product_in_stock");
          if (
    $quantity $product_in_stock) {
            
    $this->error .= "Quantity selected exceeds available stock. - ";
            
    $this->error .= "Currently have $product_in_stock items available.";
            
    $return=False;
          }
        }

        
    // If no quantity sent them assume 1
        
    if ($quantity == "")
          
    $quantity 1;
        
    // Check to see if we already have it


        
    if(!$return){ return FALSE; }else{

          
    $updated 0;
          
    // Check for duplicate and do not add to current quantity
          
    for ($i=0;$i<$cart["idx"];$i++) {
            if (
    $cart[$i]["product_id"] == $product_id) {
              
    $updated 1;
            }
          }
          
    // If we did not update then add the item
          
    if (!$updated) {
            
    $cart[$cart["idx"]]["product_id"] = $product_id;
            
    $cart[$cart["idx"]]["quantity"]   = $quantity;
            
    $cart[$cart["idx"]]["schrift"]   = $schrift;
            
    $cart[$cart["idx"]]["text"]   = nl2br($text);
            
    $cart[$cart["idx"]]["collections"]   = $collections;
            
    $cart["idx"]++;
          }

        }
        return 
    True;
      }

     
    /**************************************************************************
      ** name: update()
      ** created by: brett odonnell
      ** description: updates the quantity of all product_ids in the cart
      ** parameters:
      ** returns:
      ***************************************************************************/
      
    function update(&$d) {
        global 
    $cart;
        
    $db = new ps_DB;
        
        
       
        
    for (
    $i=0;$i<$cart["idx"];$i++) {
          if(!
    $this->update_item($i$d["quantity"][$i], $d["schrift"][$i], $d["text"][$i], $d["collections"][$i])){
            
    $d["error"] = $this->error;
            return 
    False;
          }
        }

      }
      

     
    /**************************************************************************
      ** name: update_item()
      ** created by: pablo
      ** description: updates the entire shopping cart
      ** parameters:
      ** returns:
      ***************************************************************************/
      
    function update_item($idx$quantity$schrift$text$collections) {
        global 
    $cart;
        
    $db = new ps_DB;

        
    // Check for negative quantity
        
    if ($quantity 1) {
            
    $this->error "(IDX:$idx|QTY:$quantity) To delete an item please click the 'Delete' link.";
            return 
    False;
        }

        if (!
    ereg("^[0-9]*$"$quantity)) {
            
    $this->error "Please enter a valid quantity for this item.";
            return 
    False;
        }
        
        
      
        

        
    $product_id=$cart[$idx]["product_id"];

        
    // Check to see if checking stock quantity
        
    if (CHECK_STOCK) {
          
    $q "SELECT product_in_stock ";
          
    $q .= "FROM product where product_id=";
          
    $q .= $product_id;
          
    $db->query($q);
          
    $db->next_record();
          
    $product_in_stock $db->f("product_in_stock");
          if (
    $quantity $product_in_stock) {
            
    $this->error "Quantity selected exceeds available stock.<BR>";
            
    $this->error .= "Currently have $product_in_stock items available.";
            return 
    False;
          }
        }

        
    //If the product publish is No then it will not display the item even if you
        //enter or change the product_id in the URL bar.
        
    $q "SELECT product_name,product_publish FROM product WHERE product_id='$product_id'";
        
    $db->query($q);
        
    $db->next_record();
        
    // if the product isn't publishable, don't allow the add or update
        
    if ('N' == $db->f("product_publish") ) {
          
    // set your "not available" error message here
          
    $d["error"] = "We're sorry but ".$db->f("product_name")." is not available at this time.";
          
    // when in ps_cart->update, you probably want to uncomment
          // the line below to remove the product from the cart
          
    $this->delete($d);
          return 
    False;
         } 
    //end if prodcut_publish



        
    if (!isset($idx)) {
          
    $this->error "No IDX was selected.";
          return 
    False;
        }

        
    $cart[$idx]["quantity"] = $quantity;
        
    $cart[$idx]["schrift"] = $schrift;
        
    $cart[$idx]["text"] = $text;
        
    $cart[$idx]["collections"] = $collections;
        
        return 
    True;
      } 
    Zuletzt geändert von topshopper; 29.12.2003, 21:08.

  • #2
    für die Übersicht könntest du mal [php]-Tags um den Code machen

    Kommentar


    • #3
      upps, habe ich total übersehen. sorry.
      hab´s geändert.

      Kommentar


      • #4
        Ich glaub Dein Problem liegt weniger bei php...
        Ich geh einfach ma davon aus das Du mit "popup" die "Dropdown" Felder meinst *g*

        Wenn Du mit Multiselect areitest muss meines wissens der html-feld-name mit [] versehen werden damit ein Array an das Script übergeben wird in dem jeder selektierte Eintrag seinen Platz hat vergiss nich bevor Du das übergebene Array in eine Foreach Anweisung schickst zu überprüfen ob der User überhaupt was selektiert hat bzw. ob im Array was drinn is..

        '][' .... dideldidel dü
        [font=verdana] '][' .... düdeldüdel dü

        Gruss Socket
        -----
        Nein, ich programmiere kein Clan-Script für Dich, nein, auch nicht wenn Deine Schwester gut aussieht!
        [color=darkblue]
        Socket Funktionen[/color]
        [/font]

        Kommentar


        • #5
          hi,
          ich weiß, dass das Feld mit [] übergeben werden muss, damit es ein Array ist und dass alle Multiselects übergeben werden. Das Problem ist, dass die update-funktionen nicht mehr funktionieren, wenn collections ein Array ist!

          Daher denke ich, dass ich die Update-Funktionen irgendwie ändern muss. Aber ich kriegs irgendwie nicht hin.

          Das mit den Überprüfen usw. fange ich mit isset ab bevor ich die daten im Array mit foreach ausgebe.
          Ich hoffe, dass ich es jetzt besser erklärt habe und Du mir sagen kannst, an welcher stelle der Funktion ich ansetzten muss.

          Kommentar


          • #6
            du kannst dann natürlich nicht mehr $var benutzen (gibt Array zurück) sondern $var[0], $var[1], ...

            Kommentar


            • #7
              Hi,
              vielleicht habe ich mich auch nicht präzise ausgedrückt. Die Funktionen funktionieren nicht richtig, wenn das Feld Collections ein Array ist. Also müßte ich die Funktionen irgendwie ändern, dass es möglich wird.

              Die Ausgabe der einzelnen Werte ist nicht das Problem, sondern dass die Funktionen nicht mit Arrays richtig funktioniert.

              Da ich schon seit mehr als einem Tag an diesem Problem sitze und es dato nicht lösen kann und mit meinem Projekt zum Stoppen kam, habe ich 4 weitere Felder hinzugefügt. Nicht die Beste Methode, aber es funzt.

              Vielleicht weiß jemand doch ne Lösung.

              Danke für Eure Hilfe bis hierher;-))

              Kommentar


              • #8
                naja, ich mag mich sicher nicht hinsetzen, dir den code zu coden, aber vielleicht helfen dir is_array(), implode/explode(), foreach, for, ...

                Kommentar


                • #9
                  TobiaZ,

                  wie gesagt, habe ich aus dem möglichen Array 4 einzelne Felder gemacht, da wirklich nur max. 4 Werte als Mehrfachauswahl ausgewählt werden dürfen.

                  Ich erwarte keine fertige Lösung von Dir, mir würde es reichen, wenn Du mir sagen würdest, wo ich ansetzen muss. Ob ich in den Funktionen mit foreach arbeiten muss oder was auch immer. Du darfst nicht vergessen, dass ich kein Programmierer bin.

                  Trotzdem habe ich es geschafft, viele neue Funktionen in den phpShop einzubauen. Vielleicht finde ich ja auch hier die perfekte Lösung. Mit der jetzigen kann ich zumindest weiter an meinem Projekt arbeiten.

                  Ciao.

                  Kommentar

                  Lädt...
                  X