【问题标题】:How to resolve uncaught type error: unsupported operand types.... in PHP?如何解决未捕获的类型错误:PHP 中不支持的操作数类型....
【发布时间】:2021-08-08 11:46:37
【问题描述】:

我创建了一个使用 PHP 中的 cookie 工作的表单。这就是表格的样子。

当我输入价格和数量的值时,我希望它们相乘并将结果显示在“总账单价值”文本框中。每次我输入价格和数量的值时,我都希望它们相加,这就是我使用 cookie 的原因。这是我的代码。

    <html>
    <head></head>
    <body>

    <?php
        if($_SERVER["REQUEST_METHOD"] == "POST")
        {
            $result=0;
           
            if(isset($_POST["btnReset"]))
            {
                setcookie("result", $result); 
            }

            elseif(isset($_POST["btnClick"]))
            {
                if(isset($_COOKIE["result"]))
                {
                    $result=$_COOKIE["result"];
                }
                $result= $result + $_POST["Price"]*$_POST["Quantity"];
                setcookie("result", $result);
            }
            else
            {
                if(isset($_COOKIE["result"]))
                {
                    echo "something";
                }
                
    
            }
        }
    ?>

<?php 
if (isset($result)) {
    $bill = $result;
} else {
    $bill = '';
}
?>
    
        <form method="POST" >
            <ul style="list-style-type:none;">
                <li>
                    Product Name: <input type="text" name="ProductName"> <br>
                    Price: <input type="number" name="Price" value="price"> <br>
                    Quantity: <input type="number" name="Quantity" value="qty"><br>
                    <input type="submit" name="btnClick" value="Add"> 
                    <input type="submit" name="btnReset" value="Clear">
                    <input type="submit" name="btnPrint" value="Print"><br>
                    Total Bill Value: <input type="text" name="Bill" value="<?php echo $bill; ?>">                 
                </li>
            </ul>
        </form>


         
    
    
    </body>
</html>

但是每当我单击“添加”按钮时,我都会收到此错误

第 21 行是这样的

 $result= $result + $_POST["Price"]*$_POST["Quantity"];

有人知道我为什么会收到这个错误吗??

另一件事是,当我输入产品名称、价格和数量并获得总账单价值并对许多产品执行此操作并点击“打印”按钮时,我希望所有产品及其总账单价值打印出来。我该怎么做?

非常感谢任何帮助。提前致谢!

编辑:所以我对 $result 做了一个 var_dump

这就是我得到的

【问题讨论】:

  • 在上面的 21 行中,执行var_dump($result); 以检查它在该点实际包含的内容。该错误表明它是一个数组(您不能在这样的计算中使用它)
  • 是的,它给了我一个数组,但我不明白为什么?我没有将 $result 定义为数组:/
  • 数组包含什么?你能用输出更新你的问题吗?您是否也在其他地方设置了相同的 cookie?
  • 好的,我更新了。否:/我在问题中包含的代码是完整代码。实际上它工作正常,我正在尝试将 cookie 放入数组和其他东西中,但后来我删除了所有这些代码,现在当我运行我拥有的原始代码时(就是这个)它不起作用。 (我希望我说的很清楚:E)

标签: php forms cookies typeerror setcookie


【解决方案1】:

我要做的第一件事是将您的 PHP 代码移到开头的 &lt;html&gt; 标记上方,这将有助于避免出现 setcookie (for example) 的警告。

我稍微重写了您的代码,重命名了按钮和值。已在 PHP 5.4.45 版本中测试。

<?php

// Default result value
$result = 0;

if ( !empty( $_POST ) ) {

    $cookie_key = 'result';
    $action = !empty( $_POST[ 'action' ] ) ? $_POST[ 'action' ] : false;
    $result = !empty( $_COOKIE[ $cookie_key ] ) ? (float)$_COOKIE[ $cookie_key ] : $result;


    // Add product
    if ( $action === 'add' ) {
        $price = !empty( $_POST[ 'Price' ] ) ? (float)$_POST[ 'Price' ] : 0;
        $quantity = !empty( $_POST[ 'Quantity' ] ) ? (int)$_POST[ 'Quantity' ] : 0;
        if ( $price && $quantity ) {
            $result = $result + ( $price * $quantity );
        }
    }

    // Clear result
    else if ( $action === 'clear' ) {
        $result = 0;
    }

    // Print
    else if ( $action === 'print' ) {
        // Handle print action
    }

    // Store value
    setcookie( $cookie_key, $result );
}
?>
<html>
<head></head>
<body>
    <form method="POST" >
        <ul style="list-style-type:none;">
            <li>
                Product Name: <input type="text" name="ProductName"> <br>
                Price: <input type="number" name="Price" value="price"> <br>
                Quantity: <input type="number" name="Quantity" value="qty"><br>
                <input type="submit" name="action" value="add"> 
                <input type="submit" name="action" value="clear">
                <input type="submit" name="action" value="print"><br>
                Total Bill Value: <input type="text" name="Bill" value="<?php echo $result; ?>">
            </li>
        </ul>
    </form>

</body>
</html>

它在行动:

【讨论】:

  • 感谢您的回答!我复制了代码并尝试了它,但计算不正确?例如,如果我输入 4*5,我得到 21。此外,结果应该被加起来,这就是我使用 cookie 的原因。也就是说,如果我第一次输入 2*3,然后我第二次输入 5*6,那么总账单价值应该是 6+30 = 36。
  • @adria 不确定您遇到问题的原因。我使用您提供的示例添加了在我的本地环境中运行的上述代码的屏幕记录,它按预期工作。
猜你喜欢
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
相关资源
最近更新 更多