2009-10-14 9 views
0

J'ai ce qui suit qui ajoute l'URL actuelle à une session puis affiche les 10 derniers produits associés à cette URL.unique_array ne fonctionne pas

Le problème est que la fonction unique_array semble permettre aux URL en double à ajouter à la session:

<?php 
// Make URL 
function curPageURL() { 
$pageURL = 'http'; 
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} 
$pageURL .= "://"; 
if ($_SERVER["SERVER_PORT"] != "80") { 
    $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
} else { 
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; 
} 
return $pageURL; 
} 
//Insert Current URL in SESSION 
    $CurrentPage = curPageURL(); 
    if(strpos($CurrentPage, '/products/')) 
    { 
    echo "<div class=\"rhm1-large-box\"> 
    <div class=\"rhm1-right-large-box\"></div> 
     <div class=\"rhm1-left-large-box\"></div> 
     <div class=\"largebox-heading\"><strong>Recently viewed products</strong></div> 
    <div class=\"rhm1-bg-large-box\"></div> 
    </div><div class=\"t\"><div class=\"b\"><div class=\"l\"><div class=\"r\"><div class=\"bl\"><div class=\"br\"> 
    <div id=\"recent\">"; 
    $_SESSION['pages'][] = $CurrentPage; 
    $_SESSION['pages'] = array_unique($_SESSION['pages']); 
    if (Count ($_SESSION['pages']) > 10) 
    Array_Shift ($_SESSION['pages']); 
    //remove 1st part of address from array 
    foreach ($_SESSION['pages'] as &$value) { 
    if(strpos($value, '/products/')) { 
    echo "<div class=\"recent_prod\">"; 
    echo "<div class=\"t\"><div class=\"b\"><div class=\"l\"><div class=\"r\"><div class=\"bl\"><div class=\"br\">"; 
    $url = $value; 
    $id = explode('/', $url); 
    $ppname = $id[5]; 
    $sql = "SELECT * FROM products WHERE product_id='$ppname'"; 
    $result = mysql_query($sql);   
    $myrow = mysql_fetch_array($result); 
    $sqlpid = $myrow['product_id']; 
    $sqlpname = $myrow['product_name']; 
    $sqlpnameurl = str_replace(" ","_",$value); 
    $sqlpcatname = $myrow['category_id']; 
    $sqlpimage = $myrow['product_thumb_image']; 
    echo "<div class=\"prod-titled-a\"><a href=\"" .$sqlpname. "\">" .$sqlpname. "</a></div><br />"; 
    echo "<a href=\"".$sqlpnameurl. "\"><img src=\"/productimages/thumb/" .$sqlpimage. "\" border=\"0px\" alt=\"" .$sqlpname. "\"/></a><br />"; 
    $sql1 = "SELECT * FROM product_xref_options WHERE product_id='$sqlpid'"; 
    $result1 = mysql_query($sql1);   
    $myrow1 = mysql_fetch_array($result1); 
    echo "RRP: &pound;<del>" .$myrow1['wasprice']. "</del><br />"; 
    echo "<span style=\"color:red; font-size:12px;\">OUR PRICE:<b> &pound;" .$myrow1['price']. "</b></span><br />"; 
    echo "</div></div> 
      </div> 
    </div></div></div></div>"; 
    } 
    } 
echo "<span class=\"lb-half\"></span><!--[If IE]><span class=\"lb-double\"></span><![endif]--></div> 
      </div> 
    </div></div></div></div><br clear=\"all\" /><br />"; 
} 
else 
{ 
echo ""; 
} 
    ?> 
+2

Votre code me fait peur. –

+2

pourriez-vous poster des bits de code pertinents avec 'var_dump's? – SilentGhost

+0

Avez-vous des exemples d'URL autorisées en tant que doublons? Faites un var_dump ou print_r sur la valeur $ _SESSION ['pages'], et collez les résultats ici pour une instance où vous dites qu'il y a des doublons. –

Répondre

1

Vous devez vous assurer de gérer vos variables de session avant votre déclaration d'écho. Vous ne voulez pas l'erreur classique "en-têtes déjà envoyés":

// get pages array first to avoid sending headers 
// typecasted to avoid case of empty session var 
$pages = (array) $_SESSION['pages']; 

// ensure no leading and trailing whitespaces 
$pages[] = trim($CurrentPage); 
if (count($pages) > 10) array_shift($pages); 

// push to session 
$_SESSION['pages'] = array_unique($pages);