1

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

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);
?>
4

1 回答 1

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 和图像。

于 2013-07-28T16:28:37.700 回答