Php мой код вычисляет даже без ввода

Это код PHP, который я использую для расчетов. Предполагается, что он принимает входные данные из текстовых полей и вычисляет общую сумму на их основе, но когда я нажимаю кнопку, которая должна быть предназначена для расчета общей суммы, он всегда предполагает, что все значения в текстовых полях установлены на 1. Например, я введите значение 10 во все 6 текстовых полей, но общее количество, которое я получаю, всегда равно 610. Даже если в текстовых полях нет вводов, и я нажимаю кнопку, он всегда возвращает 610.

<?php

if (isset($_POST['order1']) && isset($_POST['order2']) && isset($_POST['order3']) && isset($_POST['order4']) && isset($_POST['order5']) && isset($_POST['order6'])) {
    $order1 = isset($_POST['order1']);
    $order2 = isset($_POST['order2']);
    $order3 = isset($_POST['order3']);
    $order4 = isset($_POST['order4']);
    $order5 = isset($_POST['order5']);
    $order6 = isset($_POST['order6']);
}

function total ($order1, $order2, $order3, $order4, $order5, $order6) {
    echo ($order1 * 150) + ($order2 * 100) + ($order3 * 80) + ($order4 * 180) + ($order5 * 50) + ($order6 * 50);
}

echo "This order is worth a total of PHP";
if (isset($_POST['order1']) && isset($_POST['order2']) && isset($_POST['order3']) && isset($_POST['order4']) && isset($_POST['order5']) && isset($_POST['order6'])) {
    echo total($order1, $order2, $order3, $order4, $order5, $order6);
}
echo ".";

?>

Вот остальная часть моего кода:

<?php session_start(); /* Starts the session */

if(!isset($_SESSION['UserData']['Username'])){
    header("location:index.php");
    exit;
    include 'admin.php';
}
?>

<html>
<!DOCTYPE html>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inconsolata">
<style>
    table {
        font-family: arial, sans-serif;
        border-collapse: collapse;
        width: 100%;
    }

    td, th {
        border: 1px solid #dddddd;
        text-align: left;
        padding: 8px;
    }

    tr:nth-child(even) {
        background-color: #dddddd;
    }
</style>
</head>
<body>

<?php

$price1 = isset($_POST['price1']) ? $_POST['price1'] : 150;
$price2 = isset($_POST['price2']) ? $_POST['price2'] : 100;
$price3 = isset($_POST['price3']) ? $_POST['price3'] : 80;
$price4 = isset($_POST['price4']) ? $_POST['price4'] : 180;
$price5 = isset($_POST['price5']) ? $_POST['price5'] : 50;
$price6 = isset($_POST['price6']) ? $_POST['price6'] : 50;

?>

<h2>Cashier</h2>

<form method="POST" action="">
    <table>
        <tr>
            <th>Product Name</th>
            <th>Price</th>
            <th>Amount of Orders</th>
        </tr>
        <tr>
            <td>Double Cheesy Quarter Pounder</td>
            <td><?php echo "PHP" . $price1; ?></td>
            <td><input type="text" name="order1">
            </td>
        </tr>
        <tr>
            <td>Crispy Bacon Burger</td>
            <td><?php echo "PHP" . $price2; ?></td>
            <td><input type="text" name="order2"></td>
        </tr>
        <tr>
            <td>Mushroom Burger</td>
            <td><?php echo "PHP" . $price3; ?></td>
            <td><input type="text" name="order3"></td>
        </tr>
        <tr>
            <td>Triple Bacon Burger</td>
            <td><?php echo "PHP" . $price4; ?></td>
            <td><input type="text" name="order4"></td>
        </tr>
        <tr>
            <td>Cheesy Bacon Fries</td>
            <td><?php echo "PHP" . $price5; ?></td>
            <td><input type="text" name="order5"></td>
        </tr>
        <tr>
            <td>Chocolate Frappe</td>
            <td><?php echo "PHP" . $price6; ?></td>
            <td><input type="text" name="order6"> <input type="submit" value="Confirm"></td>
        </tr>
    </table>

    <?php

    if (isset($_POST['order1']) && isset($_POST['order2']) && isset($_POST['order3']) && isset($_POST['order4']) && isset($_POST['order5']) && isset($_POST['order6'])) {
        $order1 = isset($_POST['order1']);
        $order2 = isset($_POST['order2']);
        $order3 = isset($_POST['order3']);
        $order4 = isset($_POST['order4']);
        $order5 = isset($_POST['order5']);
        $order6 = isset($_POST['order6']);
    }

    function total ($order1, $order2, $order3, $order4, $order5, $order6) {
        echo ($order1 * 150) + ($order2 * 100) + ($order3 * 80) + ($order4 * 180) + ($order5 * 50) + ($order6 * 50);
    }

    echo "This order is worth a total of PHP";
    if (isset($_POST['order1']) && isset($_POST['order2']) && isset($_POST['order3']) && isset($_POST['order4']) && isset($_POST['order5']) && isset($_POST['order6'])) {
        echo total($order1, $order2, $order3, $order4, $order5, $order6);
    }
    echo ".";

    ?>

</form>

</body>

<a href="index.php"><input type="submit" value="Logout"></a>
<br><br>


</html>

Вы не можете добавить несколько isset($_POST['']) с &&, потому что, если один не существует, код внутри условного оператора не выполняется. В вашем другом вопросе у вас есть пример правильного использования issets.

Oscargeek 10.09.2018 08:23

И это: $order1 = isset($_POST['order1']); устанавливает переменную как true или false, а не значение. Нужно делать $order1 = isset($_POST['order1']) ? $_POST['order1'] : 0;

Oscargeek 10.09.2018 08:26

@Oscargeek Если форма содержит эти поля, то поля будут иметь вид установленный, независимо от того, было введено число или нет. Так что проблема не в isset&&. Единственное, что может пойти не так, это то, что расчет может вообще не выполняться, но это не то, что описывает OP.

deceze 10.09.2018 08:27

Кроме того, вы могли бы написать это более кратко, как isset($_POST['order1'], $_POST['order2'], ...).

deceze 10.09.2018 08:28
1
4
70
3

Ответы 3

Как вы уже проверили, значения существуют, следующая строка ...

$order1 = isset($_POST['order1']);

устанавливает значение в 1 (поскольку возвращаемое значение isset() истинно). Измените их на ...

$order1 = $_POST['order1'];

Повторите для всех остальных значений.

убрать функцию isset() из всех этих ... $order6 = isset($_POST['order6']);

внутри секунды, если удалить эхо перед вызовом функции total($order1, $order2, $order3, $order4, $order5, $order6);

Приведенного ниже кода должно быть достаточно, чтобы получить желаемый результат. Нет необходимости устанавливать все переменные вне вашего оператора if.

if (isset($_POST['order1']) && isset($_POST['order2']) && isset($_POST['order3']) && isset($_POST['order4']) && isset($_POST['order5']) && isset($_POST['order6'])) {
    echo "This order is worth a total of PHP" . ($_POST['order1'] * 150) + ($_POST['order2'] * 100) + ($_POST['order3'] * 80) + ($_POST['order4'] * 180) + ($_POST['order5'] * 50) + ($_POST['order6'] * 50) . ".";
}

Другие вопросы по теме