我的代码似乎无法解决问题。我遇到了错误,我遇到了麻烦。
错误是:
未定义的索引ID,未定义的变量结果和未定义的变量i
我该如何解决这个问题?
<?php
session_start();
require 'connect.php';
require 'item.php';
$relult = mysqli_query($link, 'select * from tickets where id='.$_GET['id']);
$product = mysqli_fetch_object($result);
if(isset($_GET['id'])){
$item= new Item();
$item->id = $product->id;
$item->name = $product->game;
$item->price = $product->price;
$item->quantity = 1;
$_SESSION['cart'][] = $item;
}
?>
<table align="center">
<td colspan="11"><h4> Upcoming games 2016/2017</h3> <td>
<tr>
<th>id</th>
<th>game</th>
<th>price</th>
<th>stadium</th>
<th>quantity</th>
<th>Sub Total</th>
</tr>
<?php
$cart = unserialize(serialize($_SESSION['cart']));
for($i-0; $i<count($cart); $i++){
?>
<tr>
<td><?php echo $cart[$i]->id; ?> </td>
<td><?php echo $cart[$i]->game; ?> </td>
<td><?php echo $cart[$i]->price; ?> </td>
<td><?php echo $cart[$i]->stsdium; ?> </td>
<td><?php echo $cart[$i]->quantity; ?> </td>
<td><?php echo $cart[$i]->price * $cart[$i]->quantity; ?> </td>
</tr>
<?php } ?>
</table>
<a href=" buytickets.php">Add more tickets to your cart</a>
</div>
答案 0 :(得分:1)
我担心这里有很多问题。
首先,有两个显而易见的问题:您有$relult
而不是$result
第5行。第29行您有$i-0
而不是$i=0
。
此外,您正在执行查询(非安全查询,请查看
在parameter binding与PDO)使用$_GET['id']
,而不是。{
似乎确定这个变量可用:你在线检查
如果已设置,则为8,但在注入后执行该检查
查询中的未知值...
在第14行,您假设$_SESSION['cart']
是一个数组,尽管此数组之前尚未定义过。
$cart = unserialize(serialize($_SESSION['cart']))
的内容是什么?如果购物车是Item
个对象的数组,您可以简单地迭代:
foreach ($_SESSION['cart'] as $item) { echo $item->id; /*etc*/ }
答案 1 :(得分:0)
未定义的索引ID
我猜$_GET['id']
未定义。也许您需要$_POST['id']
或$_SESSION['id']
?
请参阅this answer以了解GET和POST之间的区别。
未定义的变量结果
第5行有一个拼写错误。$relult =
应为$result =
。
未定义的变量i
同样是一个错字,这次是第28行:for($i-0;
应为for($i=0;
。
您在$_SESSION['cart']
的第一次访问权限应该是检查它是否已设置并且是否为数组。做这样的事情来初始化值:
if(!isset($_SESSION['cart']) || !is_array($_SESSION['cart'])
$_SESSION['cart'] = array();
该行
<td colspan="11"><h4> Upcoming games 2016/2017</h3> <td>
应该包含在<tr>
元素中,并且需要修复拼写错误<h4></h3>
。当你只有6列时,为什么是colspan 11?
$cart = unserialize(serialize($_SESSION['cart']));
这对我没有意义。为什么不$cart = $_SESSION['cart'];
?
请注意,您没有设置$cart[$i]->stsdium;
。你的意思是体育场吗?
此外,您应该考虑filtering GET和POST值,并使用prepared Statements来提高安全性。
从POST过滤id可能如下所示:
$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT);