大家好,这是我在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>£" .$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
}