Produkte von außen in den Warenkorb legen

Thema wurde von Anonymous, 17. Juli 2012 erstellt.

  1. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Hi,

    in meinem alten Shop habe ich eine Funktion verwendet, mit der ich Produkte per Product ID auch von externen Webseiten in den Warenkorb legen konnte. Kennt jemand sowas auch für Gambio? Ich hatte versucht, das Script anzupassen, aber leider funktioniert es nicht und ich bekomme nicht einmal eine Fehlermeldung:

    PHP:
    <?php
     
    require('includes/application_top.php');
     
     
    $allProducts filter_input(INPUT_GET'product_id'FILTER_SANITIZE_STRING);
     
     
    $products explode(','$allProducts);
     
    //EXAMPLE URL: addproducts.php?product_id=28{8}17{7}15{9}19[1]
     
    foreach ($products as $product)
     {
      
    //get the productID
      
    $productID = (int)$product//get product ID
      
    $product htmlspecialchars ($product);
    // baustelle
         
    $prodid_query xtc_db_query("select products_id, products_model from products where products_model = '" $product "'");
         
    $prodid_fetch xtc_db_fetch_array($prodid_query);
         
    $prodidString xtc_redirect(xtc_href_link(FILENAME_SHOPPING_CART'action=buy_now' '&products_id=' $prodid_fetch['products_id']));
    // baustelle
     
      //check if it has a quantity (in square brackets)
      
    $hasquantity false;  
      if ((
    strpos($product'[')) && (strpos($product']'))) {
       
    $hasquantity true;
       
    //get quantity  
       
    $productQuantity substr($productstrrpos($product'[') + 1, -1); 
      }
     
      
    //if it has attributes because of curly brackets...
      
    if (strpos($product'{')) {
     
       
    //use regular expressions to grab attributes and put them into "matches" array
       
    $matches null;
       
    preg_match_all('~\\{([0-9]{1,3})\\}([0-9]{1,3})~'$product$matchesPREG_SET_ORDER); 
       
    $attributes = array(); 
       foreach (
    $matches as $entry) {   
        
    $attributes[$entry[1]] = $entry[2];
       };
     
       
    //if it has quantity
       
    if ($hasquantity == true){  
        
    //add/update cart item PLUS quantity
        
    $cart->add_cart($productID, ($cart->get_quantity(xtc_get_uprid($productID$attributes))+$productQuantity), $attributes);        
       }
       else {
        
    //add/update cart item PLUS 1
        
    $cart->add_cart($productID, ($cart->get_quantity(xtc_get_uprid($productID$attributes))+1), $attributes);
       }
      }
      else {
       
    //if we have a quantity (but no attributes)...
       
    if ($hasquantity == true){ 
        
    $cart->add_cart($productID, ($cart->get_quantity(xtc_get_uprid($productID$attributes))+$productQuantity));
       }
       else {
        
    //if we have no quantity or attributes
        
    $cart->add_cart($productID, ($cart->get_quantity(xtc_get_uprid($productID$attributes))+1));
       }
      }
      
    $productID 0;
      
    $productOptionID 0;
      
    $optionValueID 0;
     }
     
     
    xtc_redirect(xtc_href_link(FILENAME_SHOPPING_CART'''SSL'));
    ?>
    Fällt wem was auf?

    Viele Grüße,
    Lena
     
  2. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Ok, schon gut, ich bin zu blöd: Ich habe die Artikelnummer statt der Artikel-ID übergeben. SO kann es natürlich nicht klappen. Ich poste hier später noch die Lösung für diejenigen, die auch Interesse daran haben...
     
  3. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Hallo,

    hier meine Lösung ohne Support und ohne Garantie und ohne Haftung. Ich nutze sie, um beispielsweise auf anderen Webseiten Angebote einblenden zu können, die man dann per Klick direkt bei mir im Shop in den Warenkorb legt.

    Dieses Script als addcart.php im Gambio Hauptverzeichnis ablegen

    PHP:
    <?php
     
    // Shopfunktionen von Gambio nutzen
      
    require('includes/application_top.php');
     
    // Artikelnummer, die in den Warenkorb gelegt werden soll, bereinigen und auslesen (heißt hier 'artnr' und muss ggf. angepasst werden)
       
    $product filter_input(INPUT_GET'artnr'FILTER_SANITIZE_STRING);
     
    // Suche in der Shopdatenbank und gib mir die zur Artikelnr zugehörige Products_ID heraus
     
    $prodid_query xtc_db_query("select products_id, products_model from products where products_model = '" $product "'");
        
    $prodid_fetch xtc_db_fetch_array($prodid_query);
     
    // Bisherigen Warenkorb für die offene Session leeren (kann auch auskommentiert werden)
     
    $cart->remove_all();
     
    // Produkt in den Warenkorb legen
     
    $cart->add_cart($prodid_fetch['products_id']);
     
    // Weiterleitung zum Warenkorb
     
    xtc_redirect(xtc_href_link(FILENAME_SHOPPING_CART'''SSL'));
    ?> 
    Das Script funktioniert nur für Artikel ohne Variationen.

    Entsprechend muss die Ursprungsseite, auf der das Produkt angezeigt wurde, die Variable artnr übergeben, also z. B. so:

    PHP:
    <?PHP
    // Hinter artnr festlegen, welche Artikelnr in den Warenkorb gelegt werden soll
    $redir 'http://www.meinedomain.de/addcart.php?artnr=1234';
    ?>
    <INPUT type="button" value="In den Warenkorb" onClick="location.href='<?PHP echo $redir?>'">
    Viel Erfolg damit!

    LG
    Lena
     
  4. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Hallo,

    bei der obigen Lösung gibts einen Bug im Zusammenhang mit Sessions und eine SQL Injection Möglichkeit. Bitte diesen addcart.php code verwenden:


     
  5. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Warum so kompliziert?

    Gambio hat so was schon an Bord...

    PHP:
    http://www.meinedomain.de/index.php?action=buy_now&BUYproducts_id=Artikel-Id
     
  6. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Hallo Avenger,

    gut dass das bei mir nicht funktioniert - ich hätte mich ja tot geärgert nach all der Arbeit die ich da reingesteckt habe ;-) Gibts noch einen Syntaxfehler oder ein Session Problem?

    Viele Grüße,
    Burkhard
     
  7. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Hast Du die Artikel-ID verwendet?
     
  8. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Hi Avenger,

    ja... Hast du das Ding bei dir im Shop getestet?

    LG
     
  9. Anonymous

    Anonymous G-WARD 2015/2016

    Registriert seit:
    20. Februar 2012
    Beiträge:
    8.755
    Danke erhalten:
    1.516
    Danke vergeben:
    1.051
    wenn ich das so eingebe:

    (Link nur für registrierte Nutzer sichtbar.)

    bekomme ich nur die index.php angezeigt
     
  10. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Hi Achim,

    das "p" gehört nicht zur products_id...

    LG
     
  11. Anonymous

    Anonymous G-WARD 2015/2016

    Registriert seit:
    20. Februar 2012
    Beiträge:
    8.755
    Danke erhalten:
    1.516
    Danke vergeben:
    1.051
    Hallo Lena

    ich Dummerchen, danke.
     
  12. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Funktioniert aber trotzdem bei mir nicht, bei dir, Achim?

    LG
     
  13. Anonymous

    Anonymous G-WARD 2015/2016

    Registriert seit:
    20. Februar 2012
    Beiträge:
    8.755
    Danke erhalten:
    1.516
    Danke vergeben:
    1.051
    #13 Anonymous, 26. August 2012
    Zuletzt bearbeitet: 26. August 2012
    test noch, melde mich danach wieder

    Funktioniert, er hat den Artikel in den Warenkorb gelegt. Allerdings bin ich noch innerhalb meines Shops und möchte auf der Seite bleiben und nicht zur index.php gehen.
    Da muss ich noch grübeln............

    -----------------------------------------------------------------------------------------

    wenn ich statt index.php die Produktseite: product_info.php?info=p1522_heatstrip-mhs-1800.html einsetze,
    funktioniert es nicht mehr.
    also = GX2-Test-NEU/product_info.php?info=p1522_heatstrip-mhs-1800.html?action=buy_now&BUYproducts_id=1523
    Was ist denn anders an dem Befehl bei index.php-Seite und der Produkt.html-Seite?
     
  14. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Nein, bisher nicht.....

    Der Code ist zwar da, aber ein ziemlich übles Machwerk, weil GET- und POST-Parameter sinnlos gemixt werden...

    Man kann das aber relativ einfach heilen:

    In "includes/cart_actions.php"

    nach

    PHP:
            case 'buy_now' :
    einfügen

    PHP:
          //Avenger
          
    if (!$_POST['products_id'])
          {
            
    $_POST['products_id']=$_GET['BUYproducts_id'];
            
    $_POST['id']='';
          }
          
    //Avenger
    dann funktioniert das.....
     
  15. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Na ja gut, meins funktioniert ja auch UND ist updatesicher. Dann nehme ich das weiter...
     
  16. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

    Registriert seit:
    22. Januar 2014
    Beiträge:
    419
    Danke erhalten:
    36
    Danke vergeben:
    53
  17. Nicefarrier

    Nicefarrier Erfahrener Benutzer

    Registriert seit:
    26. Januar 2013
    Beiträge:
    403
    Danke erhalten:
    32
    Danke vergeben:
    48
    Avenger ist nicht mehr hier im Forum ;), versuche es einfach..