2013-06-15 1 views
2

Je travaille sur une fonction de panier pour un site Web et ont trébuché à travers cette erreur:types d'opérandes non pris en charge

Erreur fatale: les types d'opérandes non pris en charge ... sur la ligne 77

Je pense que ce peut-être parce que je suis en train d'effectuer des calculs entre une variable et une valeur dans un tableau. Ce que je ne suis pas sûr est de savoir comment réaliser des opérations mathématiques sur une valeur dans un tableau:

($line_cost = $price * $quantity). 

Quelqu'un peut-il me donner des conseils sur ce s'il vous plaît? Je serai très reconnaissant! Voici mon code -

<?php session_start(); ?> 

<?php 

    $product_id = $_GET['id']; //the product id from the URL 
    $action  = $_GET['action']; //the action from the URL 

    //if there is an product_id and that product_id doesn't exist display an error message 
    if($product_id && !productExists($product_id)) { 
     die("Error. Product Doesn't Exist"); 
    } 

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

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

     case "remove": 
      $_SESSION['cart'][$product_id]--; //remove one from the quantity of the product with id $product_id 
      if($_SESSION['cart'][$product_id] == 0) unset($_SESSION['cart'][$product_id]); //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; 

    } 

?> 


<?php 

    if($_SESSION['cart']) { //if the cart isn't empty 
     //show the cart 

     echo "<table border=\"1\" padding=\"3\" width=\"40%\">"; //format the cart using a HTML table 

      //iterate through the cart, the $product_id is the key and $quantity is the value 
      foreach($_SESSION['cart'] as $product_id => $quantity) {  

       //get the name, description and price from the database - this will depend on your database implementation. 
       //use sprintf to make sure that $product_id is inserted into the query as a number - to prevent SQL injection 
       $sql = sprintf("SELECT name, description, price FROM php_shop_products WHERE id = %d;", 
           $product_id); 

       $result = mysql_query($sql); 

       //Only display the row if there is a product (though there should always be as we have already checked) 
       if(mysql_num_rows($result) > 0) { 

        list($name, $description, $price) = mysql_fetch_row($result); 

       echo "$price"; 
       var_dump($quantity); 

        $line_cost = $price * $quantity;  //work out the line cost 
        $total = $total + $line_cost;   //add to the total cost 

        echo "<tr>"; 
         //show this information in table cells 
         echo "<td align=\"center\">$name</td>"; 
         //along with a 'remove' link next to the quantity - which links to this page, but with an action of remove, and the id of the current product 
         echo "<td align=\"center\">$quantity <a href=\"$_SERVER[PHP_SELF]?action=remove&id=$product_id\">X</a></td>"; 
         echo "<td align=\"center\">$line_cost</td>"; 

        echo "</tr>"; 

       } 

      } 

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

      //show the empty cart link - which links to this page, but with an action of empty. A simple bit of javascript in the onlick event of the link asks the user for confirmation 
      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{ 
     //otherwise tell the user they have no items in their cart 
     echo "You have no items in your shopping cart."; 

    } 

    //function to check if a product exists 
    function productExists($product_id) { 
      //use sprintf to make sure that $product_id is inserted into the query as a number - to prevent SQL injection 
      $sql = sprintf("SELECT * FROM php_shop_products WHERE id = %d;", 
          $product_id); 

      return mysql_num_rows(mysql_query($sql)) > 0; 
    } 
?> 

<a href="products.php">Continue Shopping</a> 


<?php 

/* 

products table: 
    CREATE TABLE `products` (
     `id` INT NOT NULL AUTO_INCREMENT , 
     `name` VARCHAR(255) NOT NULL , 
     `description` TEXT, 
     `price` DOUBLE DEFAULT '0.00' NOT NULL , 
     PRIMARY KEY (`id`) 
    ); 

*/ 

?> 



</body> 
</html> 
+0

où est la ligne 77? – Kevin

+0

Est-ce que '$ line_cost = $ price * $ quantity' le contenu de la ligne 77? –

+0

Cela signifie que vos deux * opérandes * ne sont pas des nombres ou tout ce qui peut être converti en nombres. Quelles sont les deux variables ?! – deceze

Répondre

3

AS la fonction gettype() montre que $price est une chaîne et $quantity est un tableau, typecast $price premier en entier et utiliser le tableau $quantity avec sa clé pour accéder à la valeur entière (si elle est pas un entier, le classer aussi).

Il va comme:

$line_cost =(int)$price * (int)$quantity['key']; 

Je espère que ça marche!

+0

Exactement le genre de réponse que je cherchais. Merci! –

+0

@MichaelWalkling heureux que ça a aidé :) – Kevin

Questions connexes