Hi there - I've ran into the "Undefined index: product_id" error whilst doing what I hoped to be some relatively simple coding. Basically, I'm trying to make this page automatically redirect people back to the page they came from if the page they came from was "services.html" on my website. The page in question is a "shopping cart" page that's default with opencart. To do this redirect I added the following piece of PHP into the communal headers.tpl file:

<?php
if(strpos($_SERVER['HTTP_REFERER'],'/services.html')&&$_GET['product_id']){
header("Location:".$_SERVER['HTTP_REFERER']);
exit();
}
?>

But that doesn't redirect people back to the page I want them to go to, and it gives the error "Undefined index: product_id" at the top of the shopping cart page.

I was going to post the rest of the headers.tpl file here, but it's too long for a single post, so I'll add it below.

Now, I'm a complete newb, so please don't be shy about telling me I've made a stupidly simple mistake (if that's the case).

Thanks a lot

    Here's the first half of the headers.tpl file:

        <?php
        if(strpos($_SERVER['HTTP_REFERER'],'/services.html')&&$_GET['product_id']){
        header("Location:".$_SERVER['HTTP_REFERER']);
        exit();
        }
        ?>
        <?php if (isset($_SERVER['HTTP_USER_AGENT']) && !strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6')) echo '<?xml version="1.0" encoding="UTF-8"?>'. "\n"; ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" dir="<?php echo $direction; ?>" lang="<?php echo $lang; ?>" xml:lang="<?php echo $lang; ?>">
        <head>
        <title><?php echo $title; ?></title>
        <?php if ($keywords) { ?>
        <meta name="keywords" content="<?php echo $keywords; ?>" />
        <?php } ?>
        <?php if ($description) { ?>
        <meta name="description" content="<?php echo $description; ?>" />
        <?php } ?>
        <base href="<?php echo $base; ?>" />
        <?php if ($icon) { ?>
        <link href="<?php echo $icon; ?>" rel="icon" />
        <?php } ?>
        <?php foreach ($links as $link) { ?>
        <link href="<?php echo str_replace('&', '&amp;', $link['href']); ?>" rel="<?php echo $link['rel']; ?>" />
        <?php } ?>
        <link rel="stylesheet" type="text/css" href="catalog/view/theme/<?php echo $template; ?>/stylesheet/stylesheet.css" />
        <!--[if lt IE 7]>
        <link rel="stylesheet" type="text/css" href="catalog/view/theme/<?php echo $template; ?>/stylesheet/ie6.css" />
        <script type="text/javascript" src="catalog/view/javascript/DD_belatedPNG_0.0.8a-min.js"></script>
        <script>
        DD_belatedPNG.fix('img, #header .div3 a, #content .left, #content .right, .box .top');
        </script>
        <![endif]-->
        <?php foreach ($styles as $style) { ?>
        <link rel="<?php echo $style['rel']; ?>" type="text/css" href="<?php echo $style['href']; ?>" media="<?php echo $style['media']; ?>" />
        <?php } ?>
        <script type="text/javascript" src="catalog/view/javascript/jquery/jquery-1.3.2.min.js"></script>
        <script type="text/javascript" src="catalog/view/javascript/jquery/thickbox/thickbox-compressed.js"></script>
        <link rel="stylesheet" type="text/css" href="catalog/view/javascript/jquery/thickbox/thickbox.css" />
        <script type="text/javascript" src="catalog/view/javascript/jquery/tab.js"></script>
        <?php foreach ($scripts as $script) { ?>
        <script type="text/javascript" src="<?php echo $script; ?>"></script>
        <?php } ?>
        <script type="text/javascript"><!--
        function bookmark(url, title) {
           if (window.sidebar) { // firefox
            window.sidebar.addPanel(title, url, "");
           } else if(window.opera && window.print) { // opera
              var elem = document.createElement('a');
              elem.setAttribute('href',url);
              elem.setAttribute('title',title);
              elem.setAttribute('rel','sidebar');
              elem.click();
           } else if(document.all) {// ie
                 window.external.AddFavorite(url, title);
           }
        }
        //--></script>
        </head>
        <body>
        <div id="container">
        <div id="header">
          <div class="div1">
            <div class="div2">
              <?php if ($logo) { ?>
              <a href="<?php echo str_replace('&', '&amp;', $home); ?>"><img src="<?php echo $logo; ?>" title="<?php echo $store; ?>" alt="<?php echo $store; ?>" /></a>
              <?php } ?>
            </div>
            <div class="div3"><a href="<?php echo str_replace('&', '&amp;', $special); ?>" style="background-image: url('catalog/view/theme/<?php echo $template; ?>/image/special.png');"><?php echo $text_special; ?></a><a onclick="bookmark(document.location, '<?php echo addslashes($title); ?>');" style="background-image: url('catalog/view/theme/<?php echo $template; ?>/image/bookmark.png');"><?php echo $text_bookmark; ?></a><a href="<?php echo str_replace('&', '&amp;', $contact); ?>" style="background-image: url('catalog/view/theme/<?php echo $template; ?>/image/contact.png');"><?php echo $text_contact; ?></a><a href="<?php echo str_replace('&', '&amp;', $sitemap); ?>" style="background-image: url('catalog/view/theme/<?php echo $template; ?>/image/sitemap.png');"><?php echo $text_sitemap; ?></a></div>
            <div class="div4"><a href="<?php echo str_replace('&', '&amp;', $home); ?>" id="tab_home"><?php echo $text_home; ?></a>
              <?php if (!$logged) { ?>
              <a href="<?php echo str_replace('&', '&amp;', $login); ?>" id="tab_login"><?php echo $text_login; ?></a>
              <?php } else { ?>
              <a href="<?php echo str_replace('&', '&amp;', $logout); ?>" id="tab_logout"><?php echo $text_logout; ?></a>
              <?php } ?>
              <a href="<?php echo str_replace('&', '&amp;', $account); ?>" id="tab_account"><?php echo $text_account; ?></a><a href="<?php echo str_replace('&', '&amp;', $cart); ?>" id="tab_cart"><?php echo $text_cart; ?></a><a href="<?php echo str_replace('&', '&amp;', $checkout); ?>" id="tab_checkout"><?php echo $text_checkout; ?></a></div>
            <div class="div5">
              <div class="left"></div>
              <div class="right"></div>
              <div class="center">
                <div id="search">
                  <div class="div8"><?php echo $entry_search; ?>&nbsp;</div>
                  <div class="div9">
                    <?php if ($keyword) { ?>
                    <input type="text" value="<?php echo $keyword; ?>" id="filter_keyword" />
                    <?php } else { ?>
                    <input type="text" value="<?php echo $text_keyword; ?>" id="filter_keyword" onclick="this.value = '';" onkeydown="this.style.color = '#000000'" style="color: #999;" />
                    <?php } ?>
                    <select id="filter_category_id">
                      <option value="0"><?php echo $text_category; ?></option>
                      <?php foreach ($categories as $category) { ?>
                      <?php if ($category['category_id'] == $category_id) { ?>
                      <option value="<?php echo $category['category_id']; ?>" selected="selected"><?php echo $category['name']; ?></option>
                      <?php } else { ?>
                      <option value="<?php echo $category['category_id']; ?>"><?php echo $category['name']; ?></option>
                      <?php } ?>
                      <?php } ?>
                    </select>
                  </div>
                  <div class="div10">&nbsp;&nbsp;<a onclick="moduleSearch();" class="button"><span><?php echo $button_go; ?></span></a> <a href="<?php echo str_replace('&', '&amp;', $advanced); ?>"><?php echo $text_advanced; ?></a></div>
                </div>
              </div>
            </div>
          </div>
          <div class="div6">
            <div class="left"></div>
            <div class="right"></div>
            <div class="center">
             <?php if (isset($common_error)) { ?>
             <div class="warning"><?php echo $common_error; ?></div>
             <?php } ?>
              <div id="breadcrumb">
                <?php foreach ($breadcrumbs as $breadcrumb) { ?>
                <?php echo $breadcrumb['separator']; ?><a href="<?php echo str_replace('&', '&amp;', $breadcrumb['href']); ?>"><?php echo $breadcrumb['text']; ?></a>
                <?php } ?>
              </div>
              <div class="div7">
                <?php if ($currencies) { ?>
                <form action="<?php echo str_replace('&', '&amp;', $action); ?>" method="post" enctype="multipart/form-data" id="currency_form">
                  <div class="switcher">
                    <?php foreach ($currencies as $currency) { ?>
                    <?php if ($currency['code'] == $currency_code) { ?>
                    <div class="selected"><a><?php echo $currency['title']; ?></a></div>
                    <?php } ?>
                    <?php } ?>
                    <div class="option">
                      <?php foreach ($currencies as $currency) { ?>
                      <a onclick="$('input[name=\'currency_code\']').attr('value', '<?php echo $currency['code']; ?>'); $('#currency_form').submit();"><?php echo $currency['title']; ?></a>
                      <?php } ?>
                    </div>
                  </div>
                  <div style="display: inline;">
                    <input type="hidden" name="currency_code" value="" />
                    <input type="hidden" name="redirect" value="<?php echo $redirect; ?>" />
    
    
      </div>
                  </form>
                  <?php } ?>
                  <?php if ($languages) { ?>
                  <form action="<?php echo str_replace('&', '&amp;', $action); ?>" method="post" enctype="multipart/form-data" id="language_form">
                    <div class="switcher">
                      <?php foreach ($languages as $language) { ?>
                      <?php if ($language['code'] == $language_code) { ?>
                      <div class="selected"><a><img src="image/flags/<?php echo $language['image']; ?>" alt="<?php echo $language['name']; ?>" />&nbsp;&nbsp;<?php echo $language['name']; ?></a></div>
                      <?php } ?>
                      <?php } ?>
                      <div class="option">
                        <?php foreach ($languages as $language) { ?>
                        <a onclick="$('input[name=\'language_code\']').attr('value', '<?php echo $language['code']; ?>'); $('#language_form').submit();"><img src="image/flags/<?php echo $language['image']; ?>" alt="<?php echo $language['name']; ?>" />&nbsp;&nbsp;<?php echo $language['name']; ?></a>
                        <?php } ?>
                      </div>
                    </div>
                    <div>
                      <input type="hidden" name="language_code" value="" />
                      <input type="hidden" name="redirect" value="<?php echo $redirect; ?>" />
                    </div>
                  </form>
                  <?php } ?>
                </div>
              </div>
            </div>
          </div>
          <script type="text/javascript"><!--
          function getURLVar(urlVarName) {
             var urlHalves = String(document.location).toLowerCase().split('?');
             var urlVarValue = '';
      
         if (urlHalves[1]) {
            var urlVars = urlHalves[1].split('&');
      
            for (var i = 0; i <= (urlVars.length); i++) {
               if (urlVars[i]) {
                  var urlVarPair = urlVars[i].split('=');
      
                  if (urlVarPair[0] && urlVarPair[0] == urlVarName.toLowerCase()) {
                     urlVarValue = urlVarPair[1];
                  }
               }
            }
         }
      
         return urlVarValue;
      }
      
      $(document).ready(function() {
         route = getURLVar('route');
      
         if (!route) {
            $('#tab_home').addClass('selected');
         } else {
            part = route.split('/');
      
            if (route == 'common/home') {
               $('#tab_home').addClass('selected');
            } else if (route == 'account/login') {
               $('#tab_login').addClass('selected');   
            } else if (part[0] == 'account') {
               $('#tab_account').addClass('selected');
            } else if (route == 'checkout/cart') {
               $('#tab_cart').addClass('selected');
            } else if (part[0] == 'checkout') {
               $('#tab_checkout').addClass('selected');
            } else {
               $('#tab_home').addClass('selected');
            }
         }
      });
      //--></script>
      <script type="text/javascript"><!--
      $('#search input').keydown(function(e) {
         if (e.keyCode == 13) {
            moduleSearch();
         }
      });
      
      function moduleSearch() {   
         pathArray = location.pathname.split( '/' );
      
         url = '<?php echo HTTP_SERVER; ?>';
      
         url += 'index.php?route=product/search';
      
         var filter_keyword = $('#filter_keyword').attr('value')
      
         if (filter_keyword) {
            url += '&keyword=' + encodeURIComponent(filter_keyword);
         }
      
         var filter_category_id = $('#filter_category_id').attr('value');
      
         if (filter_category_id) {
            url += '&category_id=' + filter_category_id;
         }
      
         location = url;
      }
      //--></script>
      <script type="text/javascript"><!--
      $('.switcher').bind('click', function() {
         $(this).find('.option').slideToggle('fast');
      });
      $('.switcher').bind('mouseleave', function() {
         $(this).find('.option').slideUp('fast');
      });
      //--></script>
        Noam Chomsky;10987139 wrote:
        <?php
        if(strpos($_SERVER['HTTP_REFERER'],'/services.html')&&$_GET['product_id']){
        header("Location:".$_SERVER['HTTP_REFERER']);
        exit();
        }
        ?>

        Getting rid of the error is easy by checking isset($_GET['product_id']) before checking the value of $_GET['product_id'].
        Do note that they will only be redirected if the array key product_id exists and if the value of that element is not '0' or the empty string ''.

        Also note that any value in $GET or $POST is lost when you perform a redirect. A redirect implies a new GET request, and if that doesn't include the original query string, that data is not passed on.

          Hmmm.. well I ended up changing the PHP to

          <?php
          if($_SERVER['HTTP_REFERER']=='http://www.floathousebooks.com/services.html'&&isset($this->request->get['product_id'])){
              header("Location:".$_SERVER['HTTP_REFERER']);
          }
          ?>

          and the error's gone, but the page still won't redirect. Do you know what to do here? Is isset still kicking in too late, or is there some other fiendish cause of this problem?

            Noam Chomsky;10987165 wrote:
            $_SERVER['HTTP_REFERER']=='http://www.floathousebooks.com/services.html'
            

            and the error's gone, but the page still won't redirect.
            Have you compared the value of the left hand side and the value of the right hand side by inspection?

            Also, do note what the php doc says about HTTP_REFERER.

            Noam Chomsky;10987165 wrote:

            Is isset still kicking in too late

            isset does not "kick in too late". Where isset() is used, it checks wether the given variable has been defined or array element exists. Nothing more, nothing less.

              Write a Reply...