使用unset()从购物车中删除商品会导致mysql错误


Removing item using unset() from shopping cart creates mysql error

大家好,这是我在stack overflow.com上的第一篇文章我正在尝试创建购物车。值被存储在二维表的会话中。第一个值表示数据库中的项目id,第二个值表示项目数量。

foreach($cart_array as $row){
    $sql = "SELECT * FROM prod_table WHERE id=".$row['0']."";
    $cart_result = mysql_query($sql, $conn);
    while ($array = mysql_fetch_array($cart_result)) {
        echo "<tr><td>". $array[manufacturer] . "</td>";
        echo "<td>". $array[model]."</td>";
        echo "<td>".$row['1']."</td>";
        $cart_value = $array[price]*$row['1'];
        //sum and store value of all products
        $total_cart_value += $cart_value;
        echo "<td>&pound;" .$cart_value. "</td>";
        echo "<td><a href='search.php?kick_id=".$row['0']."'>Remove</a></td></tr>";

OK,要从购物车中删除项目,用户点击删除,然后他被发送回同一页面(由于某种原因,我很难使用$_SERVER['PHP_SELF'}与GET方法…)然后触发代码的不同部分,它将从$cart_array中删除一对值,使用unset函数。

if(isset($_GET['kick_id'])) {
    $t = count($cart_array);
    for( $u = 0; $u < $t; $u++){
        if ($cart_array[$u]['0'] == $_GET['kick_id']){
            unset($cart_array[$u]['0']);
            unset($cart_array[$u]['1']);
            echo " Item has been removed from your cart";
            $cart_array = array_values($cart_array); 

它实际上删除了一对值,但是,现在它没有正常运行,而是显示错误消息:警告:mysql_fetch_array():提供的参数不是一个有效的MySQL结果资源…我假设在会话数组中必须有一些"跟踪"删除的值,这会导致错误。如何修复代码?是否有其他方法/方法来删除值??

您似乎没有unset($cart_array[$u]),只有它包含的两个键。

不需要设置$cart_array[$u]['0']'1',只需要设置$cart_array[$u]

我认为……

这就是你做错的地方。
程序员不应该"假设"。程序员可以(也应该)确定
假设会让你误入歧途,浪费你的时间(当你提出问题时也会浪费别人的时间)。

因此,您必须做一些调试—调查以找到问题的实际原因supplied argument is not a valid MySQL result resource错误表示查询中有错误。你得看看误差是多少。因此,运行所有查询的方式应该让您看到发生的任何错误。最简单的方法是
$cart_result = mysql_query($sql, $conn) or trigger_error(mysql_error()." in ".$sql);

并再次运行代码。
您将在通常的位置发现SQL错误-屏幕或日志文件。

如果你不能理解错误的含义并自己纠正你的代码——是时候问一个问题了。一个明确而直接的问题,而不是由一些假设而产生的模糊问题。明白了吗?

有两种方法可以解决这个问题:

1)关于你的第一部分:

foreach($cart_array as $row){
  if(empty($row[0])
    continue;
  $sql = "SELECT * FROM prod_table WHERE id=".$row['0']."";
  [...]

2),而不是unset($cart_array[$u]['0']);你为什么不执行unset($cart_array[$u]);div ?

可能是这个

while ($array = mysql_fetch_array($cart_result)) {

是导致问题的原因。基于你看到的误差。在尝试获取结果之前,请检查

是否有任何可用的结果。
if(mysql_num_rows($cart_result)>0){
  while ($array = mysql_fetch_array($cart_result)) {
//rest code here
}