2012-12-07 2 views
0

Я работаю в мини-корзине. Кажется, что все работает, однако он не извлекает правильные данные, когда я нажимаю на другой продукт, например.Возникли проблемы с мини-корзиной

Я выбираю продукт 1 - Это дает мне нужную информацию, но если я выбрать продукт-он даст мне такую ​​же информацию, как продукт 1.

Я будет отображать мой код ниже, но я считаю, что ошибка приходит из этой строки кода:

$sql = sprintf("SELECT Model, Price FROM Bike WHERE BikeCode = %d;", $bikecode); 

Я не думаю, что его получение $ bikecode

Это весь код в файле PHP:

<?php 
    $bikecode = $_GET['id'];  //the product id from the URL 
    $action = $_GET['action']; //the action from the URL 

if($bikecode && !productExists($bikecode)) { 
    die("Product Doesn't Exist"); 
} 

    switch($action) { //decide what to do 

     case "add": 
      $_SESSION['cart'][$bikecode]++; //add one to the quantity of the product with id $bikecode 
     break; 

     case "remove": 
      $_SESSION['cart'][$bikecode]--; //remove one from the quantity of the product with id $bikecode 
      if($_SESSION['cart'][$bikecode] == 0) unset($_SESSION['cart'][$bikecode]); //if the quantity is zero, remove it completely (using the 'unset' function) - otherwise is will show zero, then -1, -2 etc when the user keeps removing items. 
     break; 

     case "empty": 
      unset($_SESSION['cart']); //unset the whole cart, i.e. empty the cart. 
     break; 
    } 

    if($_SESSION['cart']){ 

     echo "<table width=\"100%\">"; 

      foreach($_SESSION['cart'] as $bikecode => $quantity) { 

       $sql = sprintf("SELECT Model, Price FROM Bike WHERE BikeCode = %d;", $bikecode); 

       $result = mysqli_query($con, $sql); 

       if(mysqli_num_rows($result) > 0) { 

        list($model, $price) = mysqli_fetch_row($result); 

        $cost = $quantity * $price; 
        $total = $total + $cost; 

         echo "<tr><th>Model:</th><th>Quantity:</th><th>Price:</th></tr>"; 
         echo "<tr>"; 
         echo "<td align=\"center\">$model</td>"; 
         echo "<td align=\"center\">$quantity <a href=\"$_SERVER[PHP_SELF]?action=remove&id=$bikecode\">X</a></td>"; 
         echo "<td align=\"center\">£$cost</td>"; 
        echo "</tr>"; 
       } 
      } 

      echo "<tr>"; 
       echo "<td colspan=\"2\" align=\"right\">Total</td>"; 
       echo "<td align=\"right\">£$total</td>"; 
      echo "</tr>"; 

      echo "<tr>"; 
       echo "<td colspan=\"3\" align=\"right\"><a href=\"$_SERVER[PHP_SELF]?action=empty\" onclick=\"return confirm('Are you sure?');\">Empty Cart</a></td>"; 
      echo "</tr>";  
     echo "</table>"; 

    }else{ 
     echo "You have no items in your shopping cart."; 
    } 

function productExists($bikecode) { 
    $sql = sprintf("SELECT * FROM Bike WHERE BikeCode = %d;", $bikecode); 
    return mysqli_num_rows(mysqli_query($con, $sql)) > 0; 
} 
?> 

Помощь будет очень ценится, но если вы не можете найти ошибку могли бы вы направить меня в другой способ отображения этого кода:

$sql = sprintf("SELECT Model, Price FROM Bike WHERE BikeCode = %d;", $bikecode); 
+0

Вы пробовали явно литье $ bikecode к 'int' перед включением его в запросе? то есть: '$ sql = sprintf (« SELECT Model, Price FROM Bike WHERE BikeCode =% d; », intval ($ bikecode));' кроме этого, 'echo' запрос на страницу и проверить, сформировались так, как вы ожидаете. – Sammitch

+0

my $ bikecode не является целым числом его varchar мой велосипедный код содержит текст и цифры. – Hii

+1

Тогда почему вы используете флаг '% d' в' sprintf() ', и почему он не заключен в кавычки в запросе? Используйте это: 'sprintf (« SELECT Model, Price FROM Bike WHERE BikeCode = '% s'; ", $ bikecode);' – Sammitch

ответ

0

Это выглядит, как вы его получили, но для удобства ссылки на другие, которые могли бы его поиск заключается в том, что вы использовали% d в sprintf(), чтобы попытаться представить varchar, когда% d рассматривается как целое число. Использование% s решит проблему.

sprintf() - Manual

Смежные вопросы