2011-04-18 3 views
0

Je reçois cette erreur:Obtenir Erreur fatale

Fatal error: Unsupported operand types in C:\xampp\htdocs\process.php on line 59("$total = calculate_size_cost() + calculate_topping_cost() + calculate_delivery_cost();")

<?php 
    $name = $_GET['name']; 
    $phone = $_GET['phone']; 
    $address = $_GET['address']; 
    $size = $_GET['size']; 
    $topping = $_GET['topping']; 
    $delivery = $_GET['deliverytype']; 
    $comment=$_GET['comments']; 

    mysql_connect ("localhost", "root", "") or die ('Error: ' . mysql_error()); 
    mysql_select_db ("pizza"); 
    $query ="INSERT INTO orders (name, phone, address, size, topping, delivery, comments) VALUES ('".$name."', '".$phone."', '".$address."','".$size."','".$topping."','".$delivery."','".$comment."')"; 



    $total = 0; 
    $total = calculate_size_cost() + calculate_topping_cost() + calculate_delivery_cost(); 

    echo "Dear $name your {$_GET["size"]} pizza has been ordered."; 
    echo "Your Total is $ $total"; 
    echo "\n\n\nYour Toppings: {$_GET["topping"]}"; 
    echo "\nYour Comments: {$_GET["comments"]}"; 
    echo "Your Delivery Type:{$_GET["deliverytype"]}"; 

    function calculate_size_cost() { 
     $size = 0; 
     if ($_GET['size'] == "Small"){ 
      $size+=5; 

     } 
     else if ($_GET['size'] == "Medium"){ 
      $size+=10; 

     } 
     else if ($_GET['size'] == "Large"){ 
      $size+=15; 
     } 
     return $size; 


    } 

    function calculate_topping_cost() { 
     $topping = 1; 
     return $_GET['topping']; 
    } 

    function calculate_delivery_cost() { 
     $delivery_cost = 0; 
     if ($_GET['deliverytype'] == "delivery") { 
      $delivery_cost += 5; 
     } 
     return $delivery_cost; 
    } 
    ?> 
+0

Que contient '$ _GET ['topping']'? –

+1

Je suppose que $ _GET ['topping']; ce n'est pas un nombre :). –

+0

Il contient la valeur de $ topping. – Ankur

Répondre

2

essai avec conversion de type (u peut utiliser (float) ou tout u besoin, im en utilisant (int)

$size =(int) $_GET['size']; 
$topping =(int)$_GET['topping']; 
$delivery = (int)$_GET['deliverytype']; 

faire également la même chose avec la valeur de retour de chaque fonction comme

return (int)$size; et ainsi de suite ... sur

@Ankur une suggestion: modifier la syntaxe d'insertion (je préfère ce)

$query =" INSERT INTO orders SET 
       name='".$name."', 
       phone='".$phone."', 
       address='".$address."', 
       size='".$size."', 
       topping='".$topping."', 
       delivery='".$delivery."', 
       comments='".$comment."')"; 

puis écrire

$done=mysql_query($query); 
echo $done; 
+0

Merci pour l'aide. Mais il n'insère pas les données dans la base de données. La base de données montre que MySQL a renvoyé un jeu de résultats vide. – Ankur

+0

signifie que l'erreur fatale a disparu. maintenant seul problème mysql. J'ai raison? – diEcho

+0

ouais, le problème mysql. Il n'insère pas les valeurs dans la table. – Ankur

1

vous retournez le tableau GET au lieu de vos résultats.

function calculate_topping_cost() { 
    $topping = 1; 
    return $_GET['topping']; 
} 

essayer ceci:

function calculate_topping_cost() { 
    $topping = 1; 
    return $topping; 
} 
1

$_GET["topping"] contient probablement quelque chose qui est pas un numéro. Vous pouvez forcer le jeter:

function calculate_topping_cost() { 
     $topping = 1; 
     return (int) $_GET['topping']; 
    } 

cela retourne 0 si topping est pas un numéro.

Mais vous voulez probablement attraper cette condition explicitement, ou corriger le code - la fonction n'a pas beaucoup de sens, cela peut simplement être une erreur.

+0

a corrigé le code, mais il y a une chose, au lieu de montrer les garnitures, cela montre le mot 'Array' seulement. – Ankur