Получение фатальной ошибки - PullRequest
0 голосов
/ 18 апреля 2011

Я получаю эту ошибку:

Неустранимая ошибка: неподдерживаемые типы операндов в C: \ xampp \ htdocs \ process.php на линии 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;
    }
    ?>

Ответы [ 3 ]

2 голосов
/ 18 апреля 2011

попробуйте с преобразованием типов (вы можете использовать (float) или что вам нужно, я использую (int)

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

также сделать то же самое с возвращаемым значением каждой функции, например

return (int)$size; и т. Д. На

@ Ankur one предложение : изменить синтаксис вставки (я предпочитаю это)

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

, затем написать

 $done=mysql_query($query);
 echo $done;
1 голос
/ 18 апреля 2011

$_GET["topping"] вероятно содержит что-то, что не является числом. Вы можете принудительно разыграть его:

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

это вернет 0, если topping не число.

Но вы, вероятно, хотите явно уловить это условие или исправить код - функция не имеет особого смысла, это может быть просто ошибкой.

1 голос
/ 18 апреля 2011

вы возвращаете массив GET вместо ваших результатов.

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

Попробуйте вместо этого:

function calculate_topping_cost() {
    $topping = 1;
    return $topping;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...