购物车输出重复首次输入

时间:2013-07-28 16:09:00

标签: php duplicates cart recordset

我在我正在建设的网站上设置了购物车。我可以轻松添加物品,移除物品和清除购物车。我遇到的问题实际上是显示购物车中的商品,或更多的相关数据库条目。

PHP会话变量包含与用于标识数据库中的项目的ID号相关的数字。我需要购物车然后显示图像,名称,删除选项和ID号。当显示购物车时,如果有多个商品,则图像和名称始终是购物车中为每个条目重复的第一个商品,而ID号确实会发生变化。

这让我觉得我只执行一个查询,而实际上我需要在下面第一个代码段的foreach循环中运行查询。作为PHP的新手,我不太确定最好的方法。我刚刚通过Dreamweaver添加了一个记录集(第二个代码)。

有人能指出最好的方向指导我解决我的小问题。

非常感谢

购物车展示

    <?php 
    $cart = $_SESSION['cart'];
  if (!$cart) {echo "<div class='dialogue_box_inside_info_request'>
 <div class='dialogue_box_image'>
    <img src='images/basket_empty_dialogue.png' width='618' height='264' />
    </div>
</div>";}
  else
  {

      $array = explode(',', $_SESSION['cart']);

  echo "<table width='835' border = '0'>";
  foreach($array as $cartId) {
  $ship_name = $row_ships['ship_name'];
  $ship_image = $row_ships['image'];
  echo "<tr>";
  echo "<td width='110' height='58' class='table_text'><img src='images/ships/$ship_image'width='83' height='53' /> </td>";
  echo "<td width='620' height='58' class='table_text'>$ship_name</td>";
  echo "<td width='35' height='58' class='table_text'><a href='cart.php?action=delete&ship_id=$cartId'><img src='images/trash.png' width='31' height='42' /></a></td>";
  echo "<td height='58'>$cartId</td>";
  echo "</tr>";
  } 
  echo "</table>";

  }
   ?> 

记录集位于代码顶部

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

mysql_select_db($database_ships, $ships);
$query_ships = "SELECT ship_id, ship_name, image FROM ship_infomation";
$ships = mysql_query($query_ships, $ships) or die(mysql_error());
$row_ships = mysql_fetch_assoc($ships);
$totalRows_ships = mysql_num_rows($ships);
?>

1 个答案:

答案 0 :(得分:0)

您绝对不需要在循环中运行查询;这违背了SQL数据库的本质/意图(简单地说 - 并且除了糟糕的数据库设计 - 一个查询=快速,许多迭代查询=慢)。

问题似乎与你的foreach循环有关。在第二个代码块中获取的数据数组是$ row_ships,您在foreach循环中使用它来分配$ ship_name和$ ship_image。

但是,我没有看到你循环遍历$ row_ships数组。你的循环前进到$ array(通过$ _SESSION ['cart']字符串填充在循环外部),为每次迭代提供不同的$ cartId。但是,$ ship_name = $ row_ships ['ship_name']对于每次迭代都是相同的赋值(也适用于$ image)。

如果$ cartId与表中的ship_id相对应,则需要在循环中建立该连接,以便为$ cartId的每个值使用正确的ship_name和image。