2016-10-22 6 views
1

私のコードに問題があるようで、修正できません。私は問題を抱えているというエラーが出ています。チケット販売のショッピングカートを作成するにはどうすればいいですか

エラーは次のとおりです。

未定義のインデックス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> 

答えて

1

ここにはかなりの問題があります。

  • まず、2つの明白なもの:あなたは ライン5に代わり$result$relultを持っているあなたは、(非クエリを実行している、29

  • さらにライン上$i-0の代わり$i=0持っていますあなたが で をチェックしてください。 8が設定されているが、注入後にチェックが行われるその クエリで不明な値...

  • オンラインでは、$_SESSION['cart']は配列であると想定していますが、この配列は以前は定義されていませんでした。

  • $cart = unserialize(serialize($_SESSION['cart']))とは何ですか?カートはItemオブジェクトの配列である場合は、単にそのように繰り返すことができます: foreach ($_SESSION['cart'] as $item) { echo $item->id; /*etc*/ }
0

未定義のインデックスID

私は$_GET['id']が定義されていないと思います。おそらく$_POST['id']または$_SESSION['id']が必要ですか?
GETとPOSTの違いについては、this answerを参照してください。

未定義の変数結果

あなたは5行目$relult =にタイプミスが$result =する必要がありました。

未定義の変数再び私

タイプミス、ライン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> 

を修正する必要が<h4></h3><tr>要素やタイプミスでカバーしなければなりません。 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); 
関連する問題