Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Remove product shopping cart.php issue 2.3.4


radhavallabh

Recommended Posts

Hey!! Could you help me with below issue

 

The remove button is not working on shopping cart.php

It works on URLS without attributes but does not work on URLS with attributes

Example shown below

 

 

The URL is this for the live store but does not remove the item-


 

The above link contains a item with attributes

 

This URL removes the item


This link works as product is without attributes\

 

Please urgent help would be deeply appreciated.......

Link to comment
Share on other sites

  • Replies 51
  • Created
  • Last Reply

Application top.php

<?php
/*
  $Id$

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2008 osCommerce

  Released under the GNU General Public License
*/

// start the timer for the page parse time log
  define('PAGE_PARSE_START_TIME', microtime());

// set the level of error reporting
  error_reporting(E_ALL & ~E_NOTICE);

// check support for register_globals
  if (function_exists('ini_get') && (ini_get('register_globals') == false) && (PHP_VERSION < 4.3) ) {
    exit('Server Requirement Error: register_globals is disabled in your PHP configuration. This can be enabled in your php.ini configuration file or in the .htaccess file in your catalog directory. Please use PHP 4.3+ if register_globals cannot be enabled on the server.');
  }

// load server configuration parameters
  if (file_exists('includes/local/configure.php')) { // for developers
    include('includes/local/configure.php');
  } else {
    include('includes/configure.php');
  }

  if (strlen(DB_SERVER) < 1) {
    if (is_dir('install')) {
      header('Location: install/index.php');
    }
  }

// define the project version --- obsolete, now retrieved with tep_get_version()
  define('PROJECT_VERSION', 'osCommerce Online Merchant v2.3');

// some code to solve compatibility issues
  require(DIR_WS_FUNCTIONS . 'compatibility.php');

// set the type of request (secure or not)
  $request_type = (getenv('HTTPS') == 'on') ? 'SSL' : 'NONSSL';

// set php_self in the local scope
  $req = parse_url($HTTP_SERVER_VARS['SCRIPT_NAME']);
  $PHP_SELF = substr($req['path'], ($request_type == 'NONSSL') ? strlen(DIR_WS_HTTP_CATALOG) : strlen(DIR_WS_HTTPS_CATALOG));

  if ($request_type == 'NONSSL') {
    define('DIR_WS_CATALOG', DIR_WS_HTTP_CATALOG);
  } else {
    define('DIR_WS_CATALOG', DIR_WS_HTTPS_CATALOG);
  }

// include the list of project filenames
  require(DIR_WS_INCLUDES . 'filenames.php');

// include the list of project database tables
  require(DIR_WS_INCLUDES . 'database_tables.php');

// include the database functions
  require(DIR_WS_FUNCTIONS . 'database.php');

// make a connection to the database... now
 @[member=tep]_db_connect() or header("Location: http://radhavallabh.com/visitors.html");
  
  

// set the application parameters
  $configuration_query = tep_db_query('select configuration_key as cfgKey, configuration_value as cfgValue from ' . TABLE_CONFIGURATION);
  while ($configuration = tep_db_fetch_array($configuration_query)) {
    define($configuration['cfgKey'], $configuration['cfgValue']);
  }

// if gzip_compression is enabled, start to buffer the output
  if ( (GZIP_COMPRESSION == 'true') && ($ext_zlib_loaded = extension_loaded('zlib')) && !headers_sent() ) {
    if (($ini_zlib_output_compression = (int)ini_get('zlib.output_compression')) < 1) {
      if (PHP_VERSION < '5.4' || PHP_VERSION > '5.4.5') { // see PHP bug 55544
        if (PHP_VERSION >= '4.0.4') {
          ob_start('ob_gzhandler');
        } elseif (PHP_VERSION >= '4.0.1') {
          include(DIR_WS_FUNCTIONS . 'gzip_compression.php');
          ob_start();
          ob_implicit_flush();
        }
      }
    } elseif (function_exists('ini_set')) {
      ini_set('zlib.output_compression_level', GZIP_LEVEL);
    }
  }

// set the HTTP GET parameters manually if search_engine_friendly_urls is enabled
  if (SEARCH_ENGINE_FRIENDLY_URLS == 'true') {
    if (strlen(getenv('PATH_INFO')) > 1) {
      $GET_array = array();
      $PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
	  //Check Krishnastores
	 // if (($PHP_SELF == '') || (strlen(trim($PHP_SELF)) == 0)) $PHP_SELF = rtrim(str_replace(array(getenv('PATH_INFO'),getenv('QUERY_STRING')) , '', $_SERVER['REQUEST_URI']), '?');
      $vars = explode('/', substr(getenv('PATH_INFO'), 1));
      do_magic_quotes_gpc($vars);
      for ($i=0, $n=sizeof($vars); $i<$n; $i++) {
        if (strpos($vars[$i], '[]')) {
          $GET_array[substr($vars[$i], 0, -2)][] = $vars[$i+1];
        } else {
          $HTTP_GET_VARS[$vars[$i]] = $vars[$i+1];
        }
        $i++;
      }

      if (sizeof($GET_array) > 0) {
        while (list($key, $value) = each($GET_array)) {
          $HTTP_GET_VARS[$key] = $value;
        }
      }
    }
  }

// define general functions used application-wide
  require(DIR_WS_FUNCTIONS . 'general.php');
  require(DIR_WS_FUNCTIONS . 'html_output.php');

// set the cookie domain
  $cookie_domain = (($request_type == 'NONSSL') ? HTTP_COOKIE_DOMAIN : HTTPS_COOKIE_DOMAIN);
  $cookie_path = (($request_type == 'NONSSL') ? HTTP_COOKIE_PATH : HTTPS_COOKIE_PATH);

// include cache functions if enabled
  if (USE_CACHE == 'true') include(DIR_WS_FUNCTIONS . 'cache.php');

// include shopping cart class
  require(DIR_WS_CLASSES . 'shopping_cart.php');

// include navigation history class
  require(DIR_WS_CLASSES . 'navigation_history.php');

// define how the session functions will be used
  require(DIR_WS_FUNCTIONS . 'sessions.php');

// set the session name and save path
  tep_session_name('osCsid');
  tep_session_save_path(SESSION_WRITE_DIRECTORY);

// set the session cookie parameters
   if (function_exists('session_set_cookie_params')) {
    session_set_cookie_params(0, $cookie_path, $cookie_domain);
  } elseif (function_exists('ini_set')) {
    ini_set('session.cookie_lifetime', '0');
    ini_set('session.cookie_path', $cookie_path);
    ini_set('session.cookie_domain', $cookie_domain);
  }

  @ini_set('session.use_only_cookies', (SESSION_FORCE_COOKIE_USE == 'True') ? 1 : 0);

// set the session ID if it exists
  if ( SESSION_FORCE_COOKIE_USE == 'False' ) {
    if ( isset($HTTP_GET_VARS[tep_session_name()]) && (!isset($HTTP_COOKIE_VARS[tep_session_name()]) || ($HTTP_COOKIE_VARS[tep_session_name()] != $HTTP_GET_VARS[tep_session_name()])) ) {
      tep_session_id($HTTP_GET_VARS[tep_session_name()]);
    } elseif ( isset($HTTP_POST_VARS[tep_session_name()]) && (!isset($HTTP_COOKIE_VARS[tep_session_name()]) || ($HTTP_COOKIE_VARS[tep_session_name()] != $HTTP_POST_VARS[tep_session_name()])) ) {
      tep_session_id($HTTP_POST_VARS[tep_session_name()]);
    }
  }

// start the session
  $session_started = false;
  if (SESSION_FORCE_COOKIE_USE == 'True') {
    tep_setcookie('cookie_test', 'please_accept_for_session', time()+60*60*24*30, $cookie_path, $cookie_domain);

    if (isset($HTTP_COOKIE_VARS['cookie_test'])) {
      tep_session_start();
      $session_started = true;
    }
  } elseif (SESSION_BLOCK_SPIDERS == 'True') {
    $user_agent = strtolower(getenv('HTTP_USER_AGENT'));
    $spider_flag = false;

    if (tep_not_null($user_agent)) {
      $spiders = file(DIR_WS_INCLUDES . 'spiders.txt');

      for ($i=0, $n=sizeof($spiders); $i<$n; $i++) {
        if (tep_not_null($spiders[$i])) {
          if (is_integer(strpos($user_agent, trim($spiders[$i])))) {
            $spider_flag = true;
            break;
          }
        }
      }
    }

    if ($spider_flag == false) {
      tep_session_start();
      $session_started = true;
    }
  } else {
    tep_session_start();
    $session_started = true;
  }

  if ( ($session_started == true) && (PHP_VERSION >= 4.3) && function_exists('ini_get') && (ini_get('register_globals') == false) ) {
    extract($_SESSION, EXTR_OVERWRITE+EXTR_REFS);
  }

// initialize a session token
  if (!tep_session_is_registered('sessiontoken')) {
    $sessiontoken = md5(tep_rand() . tep_rand() . tep_rand() . tep_rand());
    tep_session_register('sessiontoken');
  }

// set SID once, even if empty
  $SID = (defined('SID') ? SID : '');

// verify the ssl_session_id if the feature is enabled
  if ( ($request_type == 'SSL') && (SESSION_CHECK_SSL_SESSION_ID == 'True') && (ENABLE_SSL == true) && ($session_started == true) ) {
    $ssl_session_id = getenv('SSL_SESSION_ID');
    if (!tep_session_is_registered('SSL_SESSION_ID')) {
      $SESSION_SSL_ID = $ssl_session_id;
      tep_session_register('SESSION_SSL_ID');
    }

    if ($SESSION_SSL_ID != $ssl_session_id) {
      tep_session_destroy();
      tep_redirect(tep_href_link(FILENAME_SSL_CHECK));
    }
  }

// verify the browser user agent if the feature is enabled
  if (SESSION_CHECK_USER_AGENT == 'True') {
    $http_user_agent = getenv('HTTP_USER_AGENT');
    if (!tep_session_is_registered('SESSION_USER_AGENT')) {
      $SESSION_USER_AGENT = $http_user_agent;
      tep_session_register('SESSION_USER_AGENT');
    }

    if ($SESSION_USER_AGENT != $http_user_agent) {
      tep_session_destroy();
      tep_redirect(tep_href_link(FILENAME_LOGIN));
    }
  }

// verify the IP address if the feature is enabled
  if (SESSION_CHECK_IP_ADDRESS == 'True') {
    $ip_address = tep_get_ip_address();
    if (!tep_session_is_registered('SESSION_IP_ADDRESS')) {
      $SESSION_IP_ADDRESS = $ip_address;
      tep_session_register('SESSION_IP_ADDRESS');
    }

    if ($SESSION_IP_ADDRESS != $ip_address) {
      tep_session_destroy();
      tep_redirect(tep_href_link(FILENAME_LOGIN));
    }
  }

// create the shopping cart
  if (!tep_session_is_registered('cart') || !is_object($cart)) {
    tep_session_register('cart');
    $cart = new shoppingCart;
  }

// include currencies class and create an instance
  require(DIR_WS_CLASSES . 'currencies.php');
  $currencies = new currencies();

// include the mail classes
  require(DIR_WS_CLASSES . 'mime.php');
  require(DIR_WS_CLASSES . 'email.php');
  
    
// Begin Scrolling Customer Testimonials v1.0
// file uploading class
  require(DIR_WS_CLASSES . 'upload.php');
// End Scrolling Scrolling Customer Testimonials v1.0

// set the language
  if (!tep_session_is_registered('language') || isset($HTTP_GET_VARS['language'])) {
    if (!tep_session_is_registered('language')) {
      tep_session_register('language');
      tep_session_register('languages_id');
    }

    include(DIR_WS_CLASSES . 'language.php');
    $lng = new language();

    if (isset($HTTP_GET_VARS['language']) && tep_not_null($HTTP_GET_VARS['language'])) {
      $lng->set_language($HTTP_GET_VARS['language']);
    } else {
      $lng->get_browser_language();
    }

    $language = $lng->language['directory'];
    $languages_id = $lng->language['id'];
  }

// include the language translations
  $_system_locale_numeric = setlocale(LC_NUMERIC, 0);
  require(DIR_WS_LANGUAGES . $language . '.php');
  setlocale(LC_NUMERIC, $_system_locale_numeric); // Prevent LC_ALL from setting LC_NUMERIC to a locale with 1,0 float/decimal values instead of 1.0 (see bug #634)
  
   // Ultimate SEO URLs v2.2d
 if ((!defined(SEO_ENABLED)) || (SEO_ENABLED == 'true')) {
   include_once(DIR_WS_CLASSES . 'seo.class.php');
   if ( !is_object($seo_urls) ){
     $seo_urls = new SEO_URL($languages_id);
   }
 }

// currency
  if (!tep_session_is_registered('currency') || isset($HTTP_GET_VARS['currency']) || ( (USE_DEFAULT_LANGUAGE_CURRENCY == 'true') && (LANGUAGE_CURRENCY != $currency) ) ) {
    if (!tep_session_is_registered('currency')) tep_session_register('currency');

    if (isset($HTTP_GET_VARS['currency']) && $currencies->is_set($HTTP_GET_VARS['currency'])) {
      $currency = $HTTP_GET_VARS['currency'];
    } else {
      $currency = ((USE_DEFAULT_LANGUAGE_CURRENCY == 'true') && $currencies->is_set(LANGUAGE_CURRENCY)) ? LANGUAGE_CURRENCY : DEFAULT_CURRENCY;
    }
  }

// navigation history
  if (!tep_session_is_registered('navigation') || !is_object($navigation)) {
    tep_session_register('navigation');
    $navigation = new navigationHistory;
  }
  $navigation->add_current_page();

// action recorder
  include('includes/classes/action_recorder.php');

// Shopping cart actions
  if (isset($HTTP_GET_VARS['action'])) {
// redirect the customer to a friendly cookie-must-be-enabled page if cookies are disabled
    if ($session_started == false) {
      tep_redirect(tep_href_link(FILENAME_COOKIE_USAGE));
    }

    if (DISPLAY_CART == 'true') {
      $goto =  FILENAME_SHOPPING_CART;
      $parameters = array('action', 'cPath', 'products_id', 'pid');
    } else {
      $goto = basename($PHP_SELF);
      if ($HTTP_GET_VARS['action'] == 'buy_now') {
        $parameters = array('action', 'pid', 'products_id');
      } else {
        $parameters = array('action', 'pid');
      }
    }
    switch ($HTTP_GET_VARS['action']) {
      // customer wants to update the product quantity in their shopping cart
      case 'update_product' : for ($i=0, $n=sizeof($HTTP_POST_VARS['products_id']); $i<$n; $i++) {
                                if (in_array($HTTP_POST_VARS['products_id'][$i], (is_array($HTTP_POST_VARS['cart_delete']) ? $HTTP_POST_VARS['cart_delete'] : array()))) {
                                  $cart->remove($HTTP_POST_VARS['products_id'][$i]);
                                } else {
                                  $attributes = ($HTTP_POST_VARS['id'][$HTTP_POST_VARS['products_id'][$i]]) ? $HTTP_POST_VARS['id'][$HTTP_POST_VARS['products_id'][$i]] : '';
                                  $cart->add_cart($HTTP_POST_VARS['products_id'][$i], $HTTP_POST_VARS['cart_quantity'][$i], $attributes, false);
                                }
                              }
                              tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
                              break;
      // customer adds a product from the products page
      case 'add_product' :    if (isset($HTTP_POST_VARS['products_id']) && is_numeric($HTTP_POST_VARS['products_id'])) {
                                $attributes = isset($HTTP_POST_VARS['id']) ? $HTTP_POST_VARS['id'] : '';
                                $cart->add_cart($HTTP_POST_VARS['products_id'], $cart->get_quantity(tep_get_uprid($HTTP_POST_VARS['products_id'], $attributes))+1, $attributes);
                              }
                              tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
                              break;
      // customer removes a product from their shopping cart
      case 'remove_product' : 	  if (isset($HTTP_GET_VARS['products_id'])) {
                           $cart->remove($HTTP_GET_VARS['products_id']);
                             }							
							   tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
                              break;
      // performed by the 'buy now' button in product listings and review page
      case 'buy_now' :        if (isset($HTTP_GET_VARS['products_id'])) {
                                if (tep_has_product_attributes($HTTP_GET_VARS['products_id'])) {
                                  tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $HTTP_GET_VARS['products_id']));
                                } else {
                                  $cart->add_cart($HTTP_GET_VARS['products_id'], $cart->get_quantity($HTTP_GET_VARS['products_id'])+1);
                                }
                              }
                              tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
                              break;
      case 'notify' :         if (tep_session_is_registered('customer_id')) {
                                if (isset($HTTP_GET_VARS['products_id'])) {
                                  $notify = $HTTP_GET_VARS['products_id'];
                                } elseif (isset($HTTP_GET_VARS['notify'])) {
                                  $notify = $HTTP_GET_VARS['notify'];
                                } elseif (isset($HTTP_POST_VARS['notify'])) {
                                  $notify = $HTTP_POST_VARS['notify'];
                                } else {
                                  tep_redirect(tep_href_link($PHP_SELF, tep_get_all_get_params(array('action', 'notify'))));
                                }
                                if (!is_array($notify)) $notify = array($notify);
                                for ($i=0, $n=sizeof($notify); $i<$n; $i++) {
                                  $check_query = tep_db_query("select count(*) as count from " . TABLE_PRODUCTS_NOTIFICATIONS . " where products_id = '" . (int)$notify[$i] . "' and customers_id = '" . (int)$customer_id . "'");
                                  $check = tep_db_fetch_array($check_query);
                                  if ($check['count'] < 1) {
                                    tep_db_query("insert into " . TABLE_PRODUCTS_NOTIFICATIONS . " (products_id, customers_id, date_added) values ('" . (int)$notify[$i] . "', '" . (int)$customer_id . "', now())");
                                  }
                                }
                                tep_redirect(tep_href_link($PHP_SELF, tep_get_all_get_params(array('action', 'notify'))));
                              } else {
                                $navigation->set_snapshot();
                                tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
                              }
                              break;
      case 'notify_remove' :  if (tep_session_is_registered('customer_id') && isset($HTTP_GET_VARS['products_id'])) {
                                $check_query = tep_db_query("select count(*) as count from " . TABLE_PRODUCTS_NOTIFICATIONS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and customers_id = '" . (int)$customer_id . "'");
                                $check = tep_db_fetch_array($check_query);
                                if ($check['count'] > 0) {
                                  tep_db_query("delete from " . TABLE_PRODUCTS_NOTIFICATIONS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and customers_id = '" . (int)$customer_id . "'");
                                }
                                tep_redirect(tep_href_link($PHP_SELF, tep_get_all_get_params(array('action'))));
                              } else {
                                $navigation->set_snapshot();
                                tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
                              }
                              break;
      case 'cust_order' :     if (tep_session_is_registered('customer_id') && isset($HTTP_GET_VARS['pid'])) {
                                if (tep_has_product_attributes($HTTP_GET_VARS['pid'])) {
                                  tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $HTTP_GET_VARS['pid']));
                                } else {
                                  $cart->add_cart($HTTP_GET_VARS['pid'], $cart->get_quantity($HTTP_GET_VARS['pid'])+1);
                                }
                              }
                              tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
                              break;
    }
  }

// include the who's online functions
  require(DIR_WS_FUNCTIONS . 'whos_online.php');
  tep_update_whos_online();

// include the password crypto functions
  require(DIR_WS_FUNCTIONS . 'password_funcs.php');

// include validation functions (right now only email address)
  require(DIR_WS_FUNCTIONS . 'validations.php');

// split-page-results
  require(DIR_WS_CLASSES . 'split_page_results.php');

// infobox
  require(DIR_WS_CLASSES . 'boxes.php');

// auto activate and expire banners
  require(DIR_WS_FUNCTIONS . 'banner.php');
  tep_activate_banners();
  tep_expire_banners();

// auto expire special products
 // require(DIR_WS_FUNCTIONS . 'specials.php');
 // tep_expire_specials();
 
// auto expire special products
  require(DIR_WS_FUNCTIONS . 'specials.php');
  tep_start_specials();
  tep_expire_specials();


  require(DIR_WS_CLASSES . 'osc_template.php');
  $oscTemplate = new oscTemplate();

// calculate category path
  if (isset($HTTP_GET_VARS['cPath'])) {
    $cPath = $HTTP_GET_VARS['cPath'];
  } elseif (isset($HTTP_GET_VARS['products_id']) && !isset($HTTP_GET_VARS['manufacturers_id'])) {
    $cPath = tep_get_product_path($HTTP_GET_VARS['products_id']);
  } else {
    $cPath = '';
  }

  if (tep_not_null($cPath)) {
    $cPath_array = tep_parse_category_path($cPath);
    $cPath = implode('_', $cPath_array);
    $current_category_id = $cPath_array[(sizeof($cPath_array)-1)];
  } else {
    $current_category_id = 0;
  }
  
//on/off
// include the category functions and load the category cache if possible
  require(DIR_WS_FUNCTIONS . 'categories.php');
  $success = include(DIR_WS_CACHE . FILENAME_CATEGORY_CACHE);
  if ($success != 'Category Cache Success') { 
    $hiddencats = array();
    if (HIDE_HIDDEN_CAT_PRODS == 'true') {
      $hiddencats = build_hidden_category_array();
    }
  }

// include the breadcrumb class and start the breadcrumb trail
  require(DIR_WS_CLASSES . 'breadcrumb.php');
  $breadcrumb = new breadcrumb;

 // $breadcrumb->add(HEADER_TITLE_TOP, HTTP_SERVER);
  $breadcrumb->add(HEADER_TITLE_CATALOG, tep_href_link(FILENAME_DEFAULT));

//// add category names or the manufacturer name to the breadcrumb trail
//  if (isset($cPath_array)) {
//    for ($i=0, $n=sizeof($cPath_array); $i<$n; $i++) {
//      $categories_query = tep_db_query("select categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$cPath_array[$i] . "' and language_id = '" . (int)$languages_id . "'");
//      if (tep_db_num_rows($categories_query) > 0) {
//        $categories = tep_db_fetch_array($categories_query);
//        $breadcrumb->add($categories['categories_name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', array_slice($cPath_array, 0, ($i+1)))));
//      } else {
//        break;
//      }
//    }
//  } elseif (isset($HTTP_GET_VARS['manufacturers_id'])) {
	//on/off
	// add category names or the manufacturer name to the breadcrumb trail

  if (isset($cPath_array)) {

    if ($success == 'Category Cache Success') {

      for ($i=0, $n=sizeof($cPath_array); $i<$n; $i++) {

        $breadcrumb->add($category_info_array[$cPath_array[$i]]['name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . $category_info_array[$cPath_array[$i]]['path']));

      }

    } else {

      for ($i=0, $n=sizeof($cPath_array); $i<$n; $i++) {

        $categories_query = tep_db_query("select categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$cPath_array[$i] . "' and language_id = '" . (int)$languages_id . "'");

        if (tep_db_num_rows($categories_query) > 0) {

          $categories = tep_db_fetch_array($categories_query);

          $breadcrumb->add($categories['categories_name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', array_slice($cPath_array, 0, ($i+1)))));

        } else {

          break;

        }

      }

    }

  } elseif (isset($HTTP_GET_VARS['manufacturers_id'])) {

 
    $manufacturers_query = tep_db_query("select manufacturers_name from " . TABLE_MANUFACTURERS . " where manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'");
    if (tep_db_num_rows($manufacturers_query)) {
      $manufacturers = tep_db_fetch_array($manufacturers_query);
      $breadcrumb->add($manufacturers['manufacturers_name'], tep_href_link(FILENAME_DEFAULT, 'manufacturers_id=' . $HTTP_GET_VARS['manufacturers_id']));
    }
  }

// add the products model to the breadcrumb trail
  if (isset($HTTP_GET_VARS['products_id'])) {
    $model_query = tep_db_query("select products_model from " . TABLE_PRODUCTS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "'");
    if (tep_db_num_rows($model_query)) {
      $model = tep_db_fetch_array($model_query);
   //   $breadcrumb->add($model['products_model'], tep_href_link(FILENAME_PRODUCT_INFO, 'cPath=' . $cPath . '&products_id=' . $HTTP_GET_VARS['products_id']));
    }
  }
  
  // add the products name to the breadcrumb trail
if (isset($HTTP_GET_VARS['products_id'])) {
$name_query = tep_db_query("select products_name from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "'");
if (tep_db_num_rows($name_query)) {
$name = tep_db_fetch_array($name_query);
$breadcrumb->add($name['products_name'], tep_href_link(FILENAME_PRODUCT_INFO, 'cPath=' . $cPath . '&products_id=' . $HTTP_GET_VARS['products_id']));
}
}

// initialize the message stack for output messages
  require(DIR_WS_CLASSES . 'message_stack.php');
  $messageStack = new messageStack;

include('megastore_theme.php');

include('megastore_theme/megastore_functions.php');
include('megastore_theme/megastore_socials_accounts.php');


    if (mysqli_connect_errno($$link) == 1203) {
        // 1203 == ER_TOO_MANY_USER_CONNECTIONS (mysqld_error.h)
       header("Location: http://radhavallabh.com/visitors.html");
  exit;
    }
	  else if (mysqli_connect_errno($$link) == 1040) {
        // 1040 == ER_TOO_MANY_USER_CONNECTIONS (mysqld_error.h)
       header("Location: http://radhavallabh.com/visitors.html");
  exit;
    }

?>
Link to comment
Share on other sites


// customer removes a product from their shopping cart

case 'remove_product' : if (isset($HTTP_GET_VARS['products_id'])) {

$cart->remove($HTTP_GET_VARS['products_id']);

$messageStack->add_session('product_action', sprintf(PRODUCT_REMOVED, tep_get_products_name($HTTP_GET_VARS['products_id'])), 'warning');

}

tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));

break;

Link to comment
Share on other sites

Redownloaded 2.3.4 application top original oscommerce

 

It had the same function...

 

 

 // customer removes a product from their shopping cart
      case 'remove_product' : if (isset($HTTP_GET_VARS['products_id'])) {
                                $cart->remove($HTTP_GET_VARS['products_id']);
                              }
                              tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
                              break;

Link to comment
Share on other sites

Not the answer to your problem but a work around

 

I had a problem in the past with quotes special characters in a modified product option type shop  with the ability to add text .

 

Any text  with special characters  could not be removed from the shopping cart

 

A work around was to add a new button/function clear cart all (clear all attributes) ...... which worked

 

http://www.clubosc.com/remove-all-items-from-shopping-cart.html

 

Downside is the complete shopping cart is emptied

 

Regards

Joli

 

PS: now not the answer for your problem just a work around

To improve is to change; to be perfect is to change often.

 

Link to comment
Share on other sites

How does function remove() look like in your file catalog/includes/classes/shopping_cart.php ?

 

Checking right now, it doesn't remove products without attributes either. If setting the quantity to 0, it removes normally with and without attributes

Link to comment
Share on other sites

@@multimixer

Thank you for helping me solve this issue...

I was testing some altered codes hence those without attributes also stopped working,

 

Now those without attributes have started working again but yet the ones with attributes are causing issues-

 

The function remove is below--

 function remove($products_id) {
      global $customer_id;
	//  $products_id = tep_get_uprid($products_id, $attributes);

      unset($this->contents[$products_id]);
// remove from database
      if (tep_session_is_registered('customer_id')) {
        tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'");
        tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'");
      }

// assign a temporary unique ID to the order contents to prevent hack attempts during the checkout procedure
      $this->cartID = $this->generate_cart_id();
    }
Link to comment
Share on other sites

@@multimixer @@joli1811 @@wHiTeHaT

I guess I found the real bug- as parameters are not sending through properly;

I am using 'More Products Weight' addon (modified it for 2.3.4) but it does not give any updates for the shopping cart.php

I tried making some edits but yet am a little far I guess could you please help me fix the shopping cart.php accordingly......

Attaching below my shopping cart.php I have added the lines for weight that I could figure out- please guide me further...

<?php
/*
  $Id$

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2010 osCommerce

  Released under the GNU General Public License
*/

  require("includes/application_top.php");

  if ($cart->count_contents() > 0) {
    include(DIR_WS_CLASSES . 'payment.php');
    $payment_modules = new payment;
  }

  require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_SHOPPING_CART);

  $breadcrumb->add(NAVBAR_TITLE, tep_href_link(FILENAME_SHOPPING_CART));

  require(DIR_WS_INCLUDES . 'template_top.php');
?>

<h1><?php echo HEADING_TITLE; ?></h1>

<?php
  if ($cart->count_contents() > 0) {
?>
<div class="shopping_cart_page">
    <?php echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_SHOPPING_CART, 'action=update_product')); ?>

    <div class="contentContainer">
      <h2><?php echo TABLE_HEADING_PRODUCTS; ?></h2>

      <div class="contentText">

    <?php
        $any_out_of_stock = 0;
        $products = $cart->get_products();
        for ($i=0, $n=sizeof($products); $i<$n; $i++) {
    // Push all attributes information in an array
          if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) {
            while (list($option, $value) = each($products[$i]['attributes'])) {
              echo tep_draw_hidden_field('id[' . $products[$i]['id'] . '][' . $option . ']', $value);
              $attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pa.options_values_weight, pa.weight_prefix
                                          from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa
                                          where pa.products_id = '" . (int)$products[$i]['id'] . "'
                                           and pa.options_id = '" . (int)$option . "'
                                           and pa.options_id = popt.products_options_id
                                           and pa.options_values_id = '" . (int)$value . "'
                                           and pa.options_values_id = poval.products_options_values_id
                                           and popt.language_id = '" . (int)$languages_id . "'
                                           and poval.language_id = '" . (int)$languages_id . "'");
              $attributes_values = tep_db_fetch_array($attributes);

              $products[$i][$option]['products_options_name'] = $attributes_values['products_options_name'];
              $products[$i][$option]['options_values_id'] = $value;
              $products[$i][$option]['products_options_values_name'] = $attributes_values['products_options_values_name'];
              $products[$i][$option]['options_values_price'] = $attributes_values['options_values_price'];
              $products[$i][$option]['price_prefix'] = $attributes_values['price_prefix'];
			  $products[$i][$option]['options_values_weight'] = $attributes_values['options_values_weight'];
              $products[$i][$option]['weight_prefix'] = $attributes_values['weight_prefix'];
            }
          }
        }
    ?>

        <table border="0" width="100%" cellspacing="0" cellpadding="0">

    <?php

        for ($i=0, $n=sizeof($products); $i<$n; $i++) {
          echo '      <tr>';

          $products_name = '<table border="0" cellspacing="2" cellpadding="2" class="cart_item">' .
                           '  <tr>' .
                           '    <td align="left"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . tep_get_prid($products[$i]['id'])) . '">' . tep_image(DIR_WS_IMAGES . $products[$i]['image'], $products[$i]['name'], '', '', 'class="shoppingcart_img"') . '</a></td>' .
                           '    <td valign="top" align="left"><div  class="shopping_cart_product_name"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . tep_get_prid($products[$i]['id'])) . '"><strong>' . $products[$i]['name'] . '</strong></a></div>';

          if (STOCK_CHECK == 'true') {
            $stock_check = tep_check_stock($products[$i]['id'], $products[$i]['quantity']);
            if (tep_not_null($stock_check)) {
              $any_out_of_stock = 1;

              $products_name .= $stock_check;
            }
          }

          if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) {
            reset($products[$i]['attributes']);
            while (list($option, $value) = each($products[$i]['attributes'])) {
              $products_name .= '<div class="attributes_options"><small><i> - ' . $products[$i][$option]['products_options_name'] . ' ' . $products[$i][$option]['products_options_values_name'] . '</i></small></div>';
            }
          }

          $products_name .= '
          <div class="shopping_cart_boxes">
          <div class="shopping_cart_input">' . tep_draw_input_field('cart_quantity[]', $products[$i]['quantity'], 'size="4"') . tep_draw_hidden_field('products_id[]', $products[$i]['id']) .'</div>
          <div class="shopping_cart_refresh">'. tep_draw_button(IMAGE_BUTTON_UPDATE, 'refresh') . '</div>
          </div>';

          $products_name .= '    </td>' .
                            '  </tr>' .
                            '</table>';

          echo '        <td valign="top">' . $products_name . '</td>' .
               '        <td align="right" valign="top">
               <strong>' . $currencies->display_price($products[$i]['final_price'], tep_get_tax_rate($products[$i]['tax_class_id']), $products[$i]['quantity']) . '</strong>
                         <div class="shopping_cart_button_remove"><a class="icon-trash-2 custom_color" href="' . tep_href_link(FILENAME_SHOPPING_CART, 'products_id=' . $products[$i]['id'] . '&action=remove_product') . '"></a>
          </div>

               </td>' .
               '      </tr>';
        }
    ?>

        </table>

        <p class="sub_total" align="right"><strong><?php echo SUB_TITLE_SUB_TOTAL; ?> <?php echo $currencies->format($cart->show_total()); ?></strong></p>

    <?php
        if ($any_out_of_stock == 1) {
          if (STOCK_ALLOW_CHECKOUT == 'true') {
    ?>

        <p class="stockWarning" align="center"><?php echo OUT_OF_STOCK_CAN_CHECKOUT; ?></p>

    <?php
          } else {
    ?>

        <p class="stockWarning" align="center"><?php echo OUT_OF_STOCK_CANT_CHECKOUT; ?></p>

    <?php
          }
        }
    ?>

      </div>

      <div class="buttonSet checkout_button">
        <span class="buttonAction"><?php echo tep_draw_button(IMAGE_BUTTON_CHECKOUT, 'triangle-1-e', tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'), 'primary'); ?></span>
      </div>

    <?php
        $initialize_checkout_methods = $payment_modules->checkout_initialization_method();

        if (!empty($initialize_checkout_methods)) {
    ?>

      <p class="or_paypol" align="right"><?php echo TEXT_ALTERNATIVE_CHECKOUT_METHODS; ?></p>

    <?php
          reset($initialize_checkout_methods);
          while (list(, $value) = each($initialize_checkout_methods)) {
    ?>

      <p class="paypal" align="right"><?php echo $value; ?></p>

    <?php
          }
        }
    ?>

    </div>

    </form>
</div>
<?php
  } else {
?>

<div class="contentContainer">
  <div class="contentText">
    <?php echo TEXT_CART_EMPTY; ?>

    <p align="right"><?php echo tep_draw_button(IMAGE_BUTTON_CONTINUE, 'triangle-1-e', tep_href_link(FILENAME_DEFAULT)); ?></p>
  </div>
</div>

<?php
  }

  require(DIR_WS_INCLUDES . 'template_bottom.php');
  require(DIR_WS_INCLUDES . 'application_bottom.php');
?>

Link to comment
Share on other sites

  • 2 weeks later...

I was having the same issue tonight with the 'Option Types' text attributes, so I thought I could strip off all those attributes in that 'remove' link after the product_id with preg_replace like this in the shopping_cart.php:

 

Find:

href="' . tep_href_link(FILENAME_SHOPPING_CART, 'products_id=' . $products[$i]['id'] . '&action=remove_product'

 

Replace with:

href="' . tep_href_link(FILENAME_SHOPPING_CART, 'products_id=' . preg_replace('/\\{.*/', '', $products[$i]['id']) . '&action=remove_product'

 

Hovering over my 'Remove' link on the shopping cart and no attributes attached anymore, just the normal link with the product_id number, but clicking remove still doesn't remove this product, however other products do remove fine.  If I finally figure it out I'll post it here.

Link to comment
Share on other sites

Strange, using the unmodified link (no preg_replace) I can add another item with same attributes to cart and remove it, but still can't remove the original item.   Are you able to try this on yours and see if it's the same?

Link to comment
Share on other sites

I figured out my issue, not sure if you have the same.  No preg_replace needed, they delete fine with all the attributes in the link.

 

I was able to delete a second product without issue until I added a second product again with a special character.  I entered Name & Name in a text field and added to cart.  In the cart I viewed source and the 'Name & Name' was converted to Name & amp ; Name so the special character interferes with the 'Remove' function.  After doing this I can't delete this item either, so I believe we need to sanitize on the input text field(s) in 'product_info.php'

Link to comment
Share on other sites

@@netsite On original - For me it shows below link on remove product but when I try clicking it nothing happens.....

...................shopping_cart.php?products_id=1135{2}15{29}163{30}168{31}165{32}164{34}167&action=remove_product

 

Even view source and inspect element show the same link....

Link to comment
Share on other sites

I figured out my issue, not sure if you have the same.  No preg_replace needed, they delete fine with all the attributes in the link.

 

I was able to delete a second product without issue until I added a second product again with a special character.  I entered Name & Name in a text field and added to cart.  In the cart I viewed source and the 'Name & Name' was converted to Name & amp ; Name so the special character interferes with the 'Remove' function.  After doing this I can't delete this item either, so I believe we need to sanitize on the input text field(s) in 'product_info.php'

@@netsite

 

Hi Doug,

 

Your case is slightly different the special character in option types is a known bug never did get sanitized had to add a new function see post #5

 

would be nice if you find the solution.

Regards

Joli

 
To improve is to change; to be perfect is to change often.

 

Link to comment
Share on other sites

OK, I have mine working perfect.  If I didn't mention before I'm on v2.3.4 and my option types contribution is from my old v2.2rc2a

 

@@joli1811  Option Types does do a tiny bit of sanitizing in the shopping_cart class which is the root of my problem (until now):

$attr_value = htmlspecialchars(stripslashes($value), ENT_QUOTES);

By the way, if anybody has this contribution you should add the charset to the line above  (mine is UTF-8):

$attr_value = htmlspecialchars(stripslashes($value), ENT_QUOTES, 'UTF-8');

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

@@radhavallabh looks like you don't have special character problem I had, but maybe this is what you need:

 

find in includes/classes/shopping_cart.php:

unset($this->contents[$products_id]);

Make sure you have just ABOVE this line:

$products_id = tep_get_uprid($products_id, $attributes);

Without that line I found products with custom attributes don't get removed from cart.  (and they never remove with special characters but fix below...)

 

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

 

Now on to my solution for my issue...

 

Option Types takes data from text fields and changes them just before insert into the database when you add to cart.  It uses htmpspecialchars() so amperands, quotes, etc are converted (example jack & mary becomes jack & amp ; mary in the database)  --- spaced the &amp part out so it displays correctly on here.

 

When you go to remove from cart these special characters are in the link and nothing gets removed.  A simple edit to the shopping cart class takes these conversions and removes the special characters without affecting the displayed data to the customer or you in your order administration.  We are re-sanitzing CUSTOMERS_BASKET but not CUSTOMERS_BASKET_ATTRIBUTES so the & amp ; still shows up on the cart page and admin area but not in the remove link  (and update cart works fine too with the link like this)  (FYI CUSTOMERS_BASKET is where the 'remove' link gets its data)

 

Hope you understood all that ok.  Now here's the simple edit:

 

in the file includes/classes/shopping_cart.php find this:

$new_products_id_in_cart = $products_id;

Add AFTER this line: 

(what we're donig is replacing all special characters that htmlspecialchars adds (to the remove link on the shopping cart) with nothing so they don't end up in that link and products with special characters in the attrbutes can be deleted from cart)

            //START FIX FOR REMOVE FROM CART BY DROPPING SPECIAL CHARACTERS IN products_id
           $find = array("&", ";", "<", ">", "'", "\"", "#");
           $replace = array("", "", "", "", "", "", "");
           $products_id = str_replace($find, $replace, $products_id);
           // END OF FIX

So in the end your code should look like this in your file:  (at least on 2.3 version - 2.2 may be different, didn't check)

        if (($check_product !== false) && ($check_product['products_status'] == '1')) {
          if ($notify == true) {
            $new_products_id_in_cart = $products_id;
            //START FIX FOR REMOVE FROM CART BY DROPPING SPECIAL CHARACTERS IN products_id
           $find = array("&", ";", "<", ">", "'", "\"", "#");
           $replace = array("", "", "", "", "", "", "");
           $products_id = str_replace($find, $replace, $products_id);
           // END OF FIX
            tep_session_register('new_products_id_in_cart');
          }

I hope this helps, I've found lots of forum posts about this issue with no real solution.  The string replace isn't the fastest way, just what I did to get it working.  Could be better, but good enough for me.

Link to comment
Share on other sites

It works on mine, that was my issue. Make sure you ended your session if any (logout and login again .... or logout and don't login again) because session remembers the cart.

 

If still not working paste your application top and shopping_cart.php and includes/classses/shopping_cart.php plus tell me your php version.

Link to comment
Share on other sites

Hi @@netsite

I have added the code as you suggested

function remove($products_id) {
      global $customer_id;
	 $products_id = tep_get_uprid($products_id, $attributes);

      unset($this->contents[$products_id]);
// remove from database
      if (tep_session_is_registered('customer_id')) {
        tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'");
        tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'");
      }

// assign a temporary unique ID to the order contents to prevent hack attempts during the checkout procedure
      $this->cartID = $this->generate_cart_id();
    }

But still does not work please could you help me get this fixed too.........

 

 

I even tried on second testing but still does not work.... :(

 if (($check_product !== false) && ($check_product['products_status'] == '1')) {
          if ($notify == true) {
            $new_products_id_in_cart = $products_id;
            //START FIX FOR REMOVE FROM CART BY DROPPING SPECIAL CHARACTERS IN products_id
           $find = array("&", ";", "<", ">", "'", "\"", "#");
           $replace = array("", "", "", "", "", "", "");
           $products_id = str_replace($find, $replace, $products_id);
           // END OF FIX
            tep_session_register('new_products_id_in_cart');
          }
Link to comment
Share on other sites

@netsite I noticed even ....product_info.php?products_id=2354{2}547{29}163{34}167{30}168{31}165{32}164{65}609

link for going to the product for editing also does not work this actually proves that the attributes are causing the main issue ...

 

Please help me figure out the problem...
Using Ajax Attribute Manager and More Product Weight addons FYI ; running oscommerce 2.3.4

Link to comment
Share on other sites

@@netsite @@joli1811

I am explaining my issue on oscommerce 2.3.4 more clearly here...

shopping_cart.php?products_id=2073&action=remove_product  this works

 

shopping_cart.php?products_id=2354{2}547{29}163{34}167{30}168{31}165{32}164{65}609&action=remove_product this does not work

 

product_info.php?products_id=2354 this works

 

product_info.php?products_id=2354{2}547{29}163{34}167{30}168{31}165{32}164{65}609 this does not work

 

 Please could you help me understand why are the attributes params in the url are causing problems and help me get it working.... I am running about it for far to much time now  :(

I even tried using original oscommerce 2.3.4 application_top, shopping cart class and shopping cart.php still same issue persists...

Link to comment
Share on other sites

Hi

 

it looks like there is an attempt to remove multiple products?

 

shopping_cart.php?products_id=3&action=remove_product 

/shopping_cart.php?products_id=3{29}&action=remove_product

 

These will both work in default osC

 

shopping_cart.php?products_id=3{29}5{9}&action=remove_product

 

That fails

 

I think you may have some add-on that is allowing an attempt to delete multiple products and the code is incomplete in some way as the standard remove_product in application_top will only delete a single product_id so the ones that work are as intended and the ones with multiple products will bork?

Link to comment
Share on other sites

@@Bob Terveuren

I have multiple attributes to each product- the below URL has the product ID and Multiple attributes...

Hence in below URL

shopping_cart.php?products_id=2354{2}547{29}163{34}167{30}168{31}165{32}164{65}609&action=remove_product

 

2354 is the product ID

{2} is the Option Name ID

547 is the Option Value ID

{29} is the Option Name ID

163 is the Option Value ID
... and so on till 609

On oscommerce demo= This link even has product ID and multiple attributes....

http://demo.oscommerce.com/shopping_cart.php?products_id=2{4}3{3}6&action=remove_product      this works in the demo but mine does not.... :(

Could you please elaborate me the multiple product id issue- as I am not able to figure out the mistake you are trying to tell me
so we could work on fixing it....


Thank you so much again for helping me get this fixed.... awaiting your early response

 

Link to comment
Share on other sites

I can delete without issue with multiple attributes but could not with special characters converted from text fields, which I fixed in a previous post.  Yours is showing up correctly with Option Types installed, but you're missing something in code somewhere else.  It's either shopping_cart.php, application_top.php or includes/classes/shopping_cart.php and possibly includes/functions/general.php

 

Do you have anything in the error log when you try to remove products?  What version are you running?  Can you post the 4 files above?

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...