2016-11-12 3 views
1

私は、ユーザーが靴を注文できるオンラインショップを作っています。これをバスケットに渡して、ユーザーはチェックアウトすることができます。現時点では致命的なエラーが発生しています:この行の '$ row = $ query-> fetch_assoc();'で非オブジェクトのメンバ関数fetch_assoc()を呼び出します。 checkoutAction.phpファイルに保存します。致命的なエラー:非オブジェクト上のメンバ関数fetch_assoc()を呼び出します。バスケットに商品を追加しようとしています

checkoutAction.php

 <?php 


     include "checkout.php"; 

     $checkout = new Checkout; 

     include "db.php"; 



    $id = $_REQUEST['equipmentID']; 

    $query = $conn->query("Select * from equipment Where equipmentID = ".$id); 
    $row = $query->fetch_assoc(); 
    $data = array('id' => $row['equipmentID'], 'name' => $row['productname'], 'price' => $row['purchaseprice'], qty=> '1'); 

    $addProduct = $checkout->addToBasket($data); 
    $redirect = $addToBasket?'viewBasket.php':'goretex.php'; 
    header($redirect); 


    } 

checkout.php

<?php 

    session_start(); 

    class Checkout { 

public function addToBasket($product = array()) 
{ 
     $product['quantity'] = (float) $product['quantity']; 
     $product['purchaseprice'] = (float) $product['purchaseprice']; 
     $equipmentid = md5($product['equipmentID']); 


     if($this->saveCheckout()) 
     { 
      return isset($equipmentid) ? $equipmentid : TRUE; 

     } else { 
      return FALSE; 
     } 


} 

HTML /フロントエンド

div class="btn-group"> 
       <button type="button" id="size" onclick  ="changeColor()"class="btn btn-warning">7</button> 
       <button type="button" class="btn btn-warning">8</button> 
       <button type="button" class="btn btn-warning">9</button> 
       <button type="button" class="btn btn-warning">10</button> 
       <button type="button" class="btn btn-warning">11</button> 
       <button type="button" class="btn btn-warning">12</button> 
       </form> 
      </div> 
      <br> 
      <br> 
      <a href="basketAction.php?action=addToBasket&equipmentID=<?php echo $row["equipmentID"]; ?> class="btn btn-info" role="button">Add to Basket</a> 
     </div> 
+1

これは、クエリが実行に失敗したためです。これを試してください、 '...ここでequipmentID = '"。$ id。 "'"); ' –

答えて

1

おそらくこれあなたの$conn->query(...)文はFALSEを返しますので。 mysqli::query文書hereを確認してください。失敗した場合、このメソッドはFALSEを返します。そのため、$query->fetch_assoc()はエラーをスローします。

この障害をキャプチャし、さらにそれをデバッグすることができますので、エラーメッセージを表示するようにコードを更新します。

$query = $conn->query("Select * from equipment Where equipmentID = ".$id); 

// If query return FALSE, there's an error. 
if (! $query) { 
    throw new \Exception("Database errror: {$conn->error}"); 
} 

$row = $query->fetch_assoc(); 

ご希望の場合はこちらをご覧ください。

+0

ありがとうございました。 – PremiumAluminium

0

あなたはmysqliのを使用していると仮定すると:あなたは$conn->query(...)の結果をチェックする必要があり、それクエリが失敗した場合はfalseを返します(http://php.net/manual/en/mysqli.query.php参照)。

そして、SQL注入を防ぐために、equipmentIdを直接SQLに入れるのではなく、プリペアドステートメントを使用することを検討してください。

関連する問題