如何为门票销售创建购物车

时间:2016-10-22 23:45:06

标签: php

我的代码似乎无法解决问题。我遇到了错误,我遇到了麻烦。

错误是:

  

未定义的索引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>

2 个答案:

答案 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);