¿Donde esta el fallo en este codigo PHP que a veces no guarda las variables?

Como podreis ver aqui:

http://www.vallromanesverd.es/es/5-mascotas

e
n la parte central inferior aparecen 3 tabs, "Destacados", "Novedades" y "Mas Vendidos"; el problema esta en que en "Novedades" las imágenes de los productos son correctas, pero en las otras 2 tabs ("Destacados" y "Mas Vendidos") a veces repite las imágenes del producto anterior y no se corresponden.

Os coloco el código PHP separandolo por cada una de esas tabs.

Parte general de consultas / OPINIONES
$sqldestacados2 = "SELECT DISTINCT p.id_product, pl.name, p.ean13, p.id_category_default, cl.link_rewrite AS cll, pl.link_rewrite AS pl, p.price, p.id_tax_rules_group FROM ps_product AS p INNER JOIN ps_product_lang AS pl INNER JOIN ps_category_lang as cl ON cl.id_category = p.id_category_default AND cl.id_lang = 3 AND p.id_product = pl.id_product AND p.active = 1 AND pl.id_lang = 3 AND (p.id_category_default = " .$nueva .") GROUP BY p.id_product";




$sqldestacados = "SELECT DISTINCT p.id_product, pl.name, p.ean13, p.id_category_default, cl.link_rewrite AS cll, pl.link_rewrite AS pl, p.price, p.id_tax_rules_group FROM ps_product AS p INNER JOIN ps_product_lang AS pl INNER JOIN ps_category_lang as cl ON cl.id_category = p.id_category_default AND cl.id_lang = 3 AND p.id_product = pl.id_product AND p.active = 1 AND pl.id_lang = 3 AND (p.id_category_default = " .$nueva .") GROUP BY p.id_product ORDER BY RAND( ) LIMIT 0 , 15";
$sqlnuevos = "SELECT DISTINCT p.id_product, pl.name, p.ean13, p.id_category_default, cl.link_rewrite AS cll, pl.link_rewrite AS pl, p.price, p.id_tax_rules_group FROM ps_product AS p INNER JOIN ps_product_lang AS pl INNER JOIN ps_category_lang as cl ON cl.id_category = p.id_category_default AND p.id_product = pl.id_product AND pl.id_lang = 3 AND p.active = 1 AND (p.id_category_default = " .$nueva .") GROUP BY p.id_product ORDER BY  `date_add` DESC LIMIT 0 , 15";
$sqlmasvendidos = "SELECT DISTINCT p.id_product, pl.name, p.ean13, p.id_category_default, cl.link_rewrite AS cll, pl.link_rewrite AS pl, p.price, p.id_tax_rules_group FROM ps_product AS p INNER JOIN ps_product_lang AS pl ON p.id_product = pl.id_product INNER JOIN ps_product_sale AS ps ON p.id_product = ps.id_product INNER JOIN ps_category_lang AS cl ON cl.id_category = p.id_category_default AND pl.id_lang =3 AND p.active = 1 AND (p.id_category_default =" .$nueva .") GROUP BY p.id_product ORDER BY RAND( ) LIMIT 0 , 15";
$sqlopiniones = "SELECT feedback, name, date FROM `ps_feedback` WHERE permission = 1 ORDER BY RAND( ) LIMIT 0 , 1";


$tabladestacados = mysql_query($sqldestacados);
$tablanuevos = mysql_query($sqlnuevos);
$tablamasvendidos = mysql_query($sqlmasvendidos);
$tablaopiniones = mysql_query($sqlopiniones);


$tabladestacados2 = mysql_query($sqldestacados2);
$total_destacados = mysql_num_rows($tabladestacados2);


Destacados
$tododestacados = "<div id='HomeTabs1' class='HomeTabs' style='padding:0px!important;float: left;clear: both;'> <ul id='more_info_tabs' class='idTabs idTabsShort' style='border: none;margin-top:18px!important;'><li><a id='masdestacados' href='#destacados' class='selected'>Destacados</a></li><li><a id='masnuevos' style='color:white!important;' href='#nuevos'>Novedades</a></li><li><a id='masvendidos' href='#vendidos'>Mas Vendidos</a></li></ul><div id='destacados'><div class='block_content' style='border:none;'><ul style='list-style:none;'>";$todonuevos = "";
$todomasvendidos = "";
$todoopiniones = "";
$cuentadestacados = 0;
$cuentanuevos = 0;
$cuentamasvendidos = 0;
$cuentaopiniones = 0;


while($row = mysql_fetch_array($tabladestacados)) {     
$pnombre = $row['name'];
if ($longca > 35)
{
$pnombre1 = substr($pnombre, 0, 35);
$pnombre1 = $pnombre1 ."...";    
}
else
{
$pnombre1 = $pnombre;    
}
$pid = $row['id_product'];
$clink = $row['cll'];
$plink = $row['pl'];
$pwp = $row['price'];
$pean = $row['ean13'];
$ptaxgroup = $row['id_tax_rules_group'];


$tablaimagen = mysql_query("SELECT * FROM ps_image WHERE id_product = " .$pid ." and position = 1");
while($row = mysql_fetch_array($tablaimagen)) { 
$idimage = $row['id_image'];    
}
$tablatax = mysql_query("SELECT * FROM ps_tax WHERE id_tax = " .$ptaxgroup);
while($row = mysql_fetch_array($tablatax)) { 
$tax_rate = $row['rate'];    
}
if ($tax_rate == "18.00")
{
$tax_rate = 1.18;    
}
elseif ($tax_rate = "8.00")
{
$tax_rate = 1.08;    
}
else
{
$tax_rate = 1.04;    
}


if ($pean <> "")
{
$plink = $plink ."-" .$pean;
}


$pr = $pwp * $tax_rate;
$pr = round($pr,2);
$precio_viejo = $pr;
$pdescontar = "";
$precio_nuevo = "";
$tabladesc = mysql_query("SELECT * FROM ps_specific_price WHERE id_product = " .$pid." and from_quantity = 1");
while($row = mysql_fetch_array($tabladesc)) { 
$pdesc = $row['reduction'];
$type = $row['reduction_type'];


$tabladesc = mysql_query("SELECT * FROM ps_product_attribute WHERE id_product = " .$pid." and default_on = 1");
while($row = mysql_fetch_array($tabladesc)) { 
$atribute_price = $row['price'];
}


if ($atribute_price > $pwp)
{
if ($type == "percentage")
{    
$as = $pwp + $atribute_price;
$pr2 = $as * $tax_rate;
$pr = round($pr2,2);
$as2 = $as * $pdesc;
$as2 = $as - $as2;
$pr2 = $as2 * $tax_rate;
$pr = round($pr2,2);
$precio_nuevo = $pr; 
}
else
{
$as = $pwp + $atribute_price;
$pr2 = $as * $tax_rate;
$pr = round($pr2,2);


$pr2 = $as2 * $tax_rate;
$pr = round($pr2,2);
$precio_nuevo = $pr - $pdesc;    
}
}
else
{
if ($type == "percentage")
{
$as = $pwp * $pdesc;
$pdescontar = $pwp - $as; 
$pr2 = $pdescontar;
$pr2 = $pr2 * $tax_rate;
$pr2 = round($pr2,2);
$precio_nuevo = $pr2;  
}
else
{
$pr2 = $pwp * $tax_rate;
$pr2 = round($pr2,2);
$pr2 = $pr2 - $pdesc;
$precio_nuevo = $pr2;       
}
}
}


$botona = "<a class='button ajax_add_to_cart_button exclusive' style='margin-bottom: 5px;margin-left: 30px;float: left;' href='/carro-de-la-compra?add&id_product=$pid' rel='ajax_id_product_$pid' title='A&ntilde;adir'><span style='left: -19px!important;'></span>A&ntilde;adir</a>";
$botonver = "<a class='button lnk_view' style='margin-bottom: 5px;margin-left: 5px;' href='/" .$clink ."/" .$pid ."-" .$plink .".html' title='Ver'><span></span>Ver</a>";
$botones = $botona .$botonver;


$tododestacados = $tododestacados ."<li style='width:162px;float:left;list-style:none;margin-right:6px;'><div id='titulo' style='width:162px;height:39px;'><a href='/" .$clink ."/" .$pid ."-" .$plink .".html' title='$pnombre' style='text-decoration:none;color: #B59359;font-weight: bold;'>$pnombre1</a></div><a href='/" .$clink ."/" .$pid ."-" .$plink .".html' title='$pnombre' style='text-decoration:none;'><div id='imagen' style='width:162px;height:131px;margin:0 auto;text-align:center;'><img src='/" .$idimage ."-home/" .$plink .".jpg' title'$pnombre' alt='$pnombre' height='131px' widht='131px' /></div></a><div id='precioo' style='width:162px;height:18px;margin:0 auto;text-align:center;'>";
if ($precio_nuevo <> "")
{
$tododestacados = $tododestacados ."<span style='color: red;text-decoration: line-through;margin-right:3px;'>$pr</span><span style='text-decoration:none!important;text-align:center!important;margin:0 auto;font-weight: bold;color: red;text-shadow: 1px 1px 2px #433D32;'>$precio_nuevo &#8364;</span></div>$botones</li>";    
}
else
{
$tododestacados = $tododestacados ."<span style='text-decoration:none!important;text-align:center!important;margin:0 auto;font-weight: bold;color: red;text-shadow: 1px 1px 2px #433D32;'>$pr &#8364;$precio_nuevo</span></div>$botones</li>";    
}    
  
}
$tododestacados = $tododestacados ."</ul></div></div>";


Novedades
$todonuevos = "<div id='nuevos'><div class='block_content' style='border: none;'><ul style='list-style:none;'>";while($row = mysql_fetch_array($tablanuevos)) {            
$pnombre = $row['name'];
if ($longca > 35)
{
$pnombre1 = substr($pnombre, 0, 35);
$pnombre1 = $pnombre1 ."...";    
}
else
{
$pnombre1 = $pnombre;    
}
$pid = $row['id_product'];
$clink = $row['cll'];
$plink = $row['pl'];
$pwp = $row['price'];
$pean = $row['ean13'];
$ptaxgroup = $row['id_tax_rules_group'];


$tablaimagen = mysql_query("SELECT * FROM ps_image WHERE id_product = " .$pid ." and position = 1");
while($row = mysql_fetch_array($tablaimagen)) { 
$idimage = $row['id_image'];    
}
$tablatax = mysql_query("SELECT * FROM ps_tax WHERE id_tax = " .$ptaxgroup);
while($row = mysql_fetch_array($tablatax)) { 
$tax_rate = $row['rate'];    
}


if ($tax_rate == "18.00")
{
$tax_rate = 1.18;    
}
elseif ($tax_rate = "8.00")
{
$tax_rate = 1.08;    
}
else
{
$tax_rate = 1.04;    
}
if ($pean <> "")
{
$plink = $plink ."-" .$pean;
}
$pr = $pwp * $tax_rate;
$pr = round($pr,2);
$precio_viejo = $pr;
$pdescontar = "";
$precio_nuevo = "";
$tabladesc = mysql_query("SELECT * FROM ps_specific_price WHERE id_product = " .$pid." and from_quantity = 1");
while($row = mysql_fetch_array($tabladesc)) { 
$pdesc = $row['reduction'];
$type = $row['reduction_type'];


$tabladesc = mysql_query("SELECT * FROM ps_product_attribute WHERE id_product = " .$pid." and default_on = 1");
while($row = mysql_fetch_array($tabladesc)) { 
$atribute_price = $row['price'];
}


if ($atribute_price > $pwp)
{
if ($type == "percentage")
{    
$as = $pwp + $atribute_price;
$pr2 = $as * $tax_rate;
$pr = round($pr2,2);
$as2 = $as * $pdesc;
$as2 = $as - $as2;
$pr2 = $as2 * $tax_rate;
$pr = round($pr2,2);
$precio_nuevo = $pr; 
}
else
{
$as = $pwp + $atribute_price;
$pr2 = $as * $tax_rate;
$pr = round($pr2,2);
$pr2 = $as2 * $tax_rate;
$pr = round($pr2,2);
$precio_nuevo = $pr - $pdesc;  
}
}
else
{
if ($type == "percentage")
{
$as = $pwp * $pdesc;
$pdescontar = $pwp - $as; 
$pr2 = $pdescontar;
$pr2 = $pr2 * $tax_rate;
$pr2 = round($pr2,2);
$precio_nuevo = $pr2;  
}
else
{
$pr2 = $pwp * $tax_rate;
$pr2 = round($pr2,2);
$pr2 = $pr2 - $pdesc;
$precio_nuevo = $pr2;       
}
}
}


$botona = "<a class='button ajax_add_to_cart_button exclusive' style='margin-bottom: 5px;margin-left: 30px;float: left;' href='/carro-de-la-compra?add&id_product=$pid' rel='ajax_id_product_$pid' title='A&ntilde;adir'><span style='left: -19px!important;'></span>A&ntilde;adir</a>";
$botonver = "<a class='button lnk_view' style='margin-bottom: 5px;margin-left: 5px;' href='/" .$clink ."/" .$pid ."-" .$plink .".html' title='Ver'><span></span>Ver</a>";
$botones = $botona .$botonver;


$todonuevos = $todonuevos ."<li style='width:162px;float:left;list-style:none;margin-right:6px;'><div id='titulo' style='width:162px;height:39px;'><a href='/" .$clink ."/" .$pid ."-" .$plink .".html' title='$pnombre' style='text-decoration:none;color: #B59359;font-weight: bold;'>$pnombre1</a></div><a href='/" .$clink ."/" .$pid ."-" .$plink .".html' title='$pnombre' style='text-decoration:none;'><div id='imagen' style='width:162px;height:131px;margin:0 auto;text-align:center;'><img src='/" .$idimage ."-home/" .$plink .".jpg' title'$pnombre' alt='$pnombre' height='131px' widht='131px' /></div></a><div id='precioo' style='width:162px;height:18px;margin:0 auto;text-align:center;'>";
if ($precio_nuevo <> "")
{
$todonuevos = $todonuevos ."<span style='color: red;text-decoration: line-through;margin-right:3px;'>$pr</span><span style='text-decoration:none!important;text-align:center!important;margin:0 auto;font-weight: bold;color: red;text-shadow: 1px 1px 2px #433D32;'>$precio_nuevo &#8364;</span></div>$botones</li>";    
}
else
{
$todonuevos = $todonuevos ."<span style='text-decoration:none!important;text-align:center!important;margin:0 auto;font-weight: bold;color: red;text-shadow: 1px 1px 2px #433D32;'>$pr &#8364;$precio_nuevo</span></div>$botones</li>";    
}     
}
$todonuevos = $todonuevos ."</ul></div></div>";

Más Vendidos
$todovendidos = "<div id='vendidos'><div class='block_content' style='border: none;'><ul style='list-style:none;'>";while($row = mysql_fetch_array($tablamasvendidos)) {   
$pnombre = $row['name'];
if ($longca > 35)
{
$pnombre1 = substr($pnombre, 0, 35);
$pnombre1 = $pnombre1 ."...";    
}
else
{
$pnombre1 = $pnombre;    
}
$pid = $row['id_product'];
$clink = $row['cll'];
$plink = $row['pl'];
$pwp = $row['price'];
$pean = $row['ean13'];
$ptaxgroup = $row['id_tax_rules_group'];


$tablaimagen = mysql_query("SELECT * FROM ps_image WHERE id_product = " .$pid ." and position = 1");
while($row = mysql_fetch_array($tablaimagen)) { 
$idimage = $row['id_image'];    
}
$tablatax = mysql_query("SELECT * FROM ps_tax WHERE id_tax = " .$ptaxgroup);
while($row = mysql_fetch_array($tablatax)) { 
$tax_rate = $row['rate'];    
}
if ($tax_rate == "18.00")
{
$tax_rate = 1.18;    
}
elseif ($tax_rate = "8.00")
{
$tax_rate = 1.08;    
}
else
{
$tax_rate = 1.04;    
}
if ($pean <> "")
{
$plink = $plink ."-" .$pean;
}


$pr = $pwp * $tax_rate;
$pr = round($pr,2);
$precio_viejo = $pr;
$pdescontar = "";
$precio_nuevo = "";
$tabladesc = mysql_query("SELECT * FROM ps_specific_price WHERE id_product = " .$pid." and from_quantity = 1");
while($row = mysql_fetch_array($tabladesc)) { 
$pdesc = $row['reduction'];
$type = $row['reduction_type'];


$tabladesc = mysql_query("SELECT * FROM ps_product_attribute WHERE id_product = " .$pid." and default_on = 1");
while($row = mysql_fetch_array($tabladesc)) { 
$atribute_price = $row['price'];
}


if ($atribute_price > $pwp)
{
if ($type == "percentage")
{    
$as = $pwp + $atribute_price;
$pr2 = $as * $tax_rate;
$pr = round($pr2,2);


$as2 = $as * $pdesc;
$as2 = $as - $as2;
$pr2 = $as2 * $tax_rate;
$pr = round($pr2,2);
$precio_nuevo = $pr; 
}
else
{
$as = $pwp + $atribute_price;
$pr2 = $as * $tax_rate;
$pr = round($pr2,2);


$pr2 = $as2 * $tax_rate;
$pr = round($pr2,2);
$precio_nuevo = $pr - $pdesc;   
}
}
else
{
if ($type == "percentage")
{
$as = $pwp * $pdesc;
$pdescontar = $pwp - $as; 
$pr2 = $pdescontar;
$pr2 = $pr2 * $tax_rate;
$pr2 = round($pr2,2);
$precio_nuevo = $pr2;  
}
else
{
$pr2 = $pwp * $tax_rate;
$pr2 = round($pr2,2);
$pr2 = $pr2 - $pdesc;
$precio_nuevo = $pr2;       
}
}
}


$botona = "<a class='button ajax_add_to_cart_button exclusive' style='margin-bottom: 5px;margin-left: 30px;float: left;' href='/carro-de-la-compra?add&id_product=$pid' rel='ajax_id_product_$pid' title='A&ntilde;adir'><span style='left: -19px!important;'></span>A&ntilde;adir</a>";
$botonver = "<a class='button lnk_view' style='margin-bottom: 5px;margin-left: 5px;' href='/" .$clink ."/" .$pid ."-" .$plink .".html' title='Ver'><span></span>Ver</a>";
$botones = $botona .$botonver;


$todovendidos = $todovendidos ."<li style='width:162px;float:left;list-style:none;margin-right:6px;'><div id='titulo' style='width:162px;height:39px;'><a href='/" .$clink ."/" .$pid ."-" .$plink .".html' title='$pnombre' style='text-decoration:none;color: #B59359;font-weight: bold;'>$pnombre1</a></div><a href='/" .$clink ."/" .$pid ."-" .$plink .".html' title='$pnombre' style='text-decoration:none;'><div id='imagen' style='width:162px;height:131px;margin:0 auto;text-align:center;'><img src='/" .$idimage ."-home/" .$plink .".jpg' title'$pnombre' alt='$pnombre' height='131px' widht='131px' /></div></a><div id='precioo' style='width:162px;height:18px;margin:0 auto;text-align:center;'>";
if ($precio_nuevo <> "")
{
$todovendidos = $todovendidos ."<span style='color: red;text-decoration: line-through;margin-right:3px;'>$pr</span><span style='text-decoration:none!important;text-align:center!important;margin:0 auto;font-weight: bold;color: red;text-shadow: 1px 1px 2px #433D32;'>$precio_nuevo &#8364;</span></div>$botones</li>";    
}
else
{
$todovendidos = $todovendidos ."<span style='text-decoration:none!important;text-align:center!important;margin:0 auto;font-weight: bold;color: red;text-shadow: 1px 1px 2px #433D32;'>$pr &#8364;$precio_nuevo</span></div>$botones</li>";    
}       
}
$todovendidos = $todovendidos ."</ul></div></div></div>";

Por cierto y como ultima cosa, este es el código que obtiene la opinión inferior, lo digo para que lo reviséis ya que aunque hay mas de 20 opiniones casi siempre pone la misma.

Ahora solo toca encontrar el "error" y sabes porque repite a veces la imagen de los productos anteriores.

Un saludo y muchas gracias por todo.

PD: Perdón por tanto código.
Hola:

¿Aún tienes el problema o ya lo solucionaste (creo que no lo has arreglado, pero no estoy seguro)?
Si, esta solucionado; este codigo es respecto a mostrar productos en "categorias vacias" en una tienda online; no funcionaba porque esa tienda tenia un "error" y en la SQL hay una consulta que busca la imagen destacada, pero esta tienda no tenia todas las imagenes como destacadas, asi que lo solucione.