PHP和(isset($ _POST ['']))问题

5

非常抱歉如果这个问题已经有人问过了,但我没有找到明显的答案。我是一个完全不懂的新手,请多关照!当我加载以下代码时,它似乎运行了if(isset($_POST['test'])),即使我没有按下"test"按钮。我只想在按下“test”按钮时执行代码。我该怎么解决?

<?php
    if(isset($_POST['update'])) {
        $content=simplexml_load_file("books.xml");
        $value=$content->book->price;
        $sum=$content->book->price;
    }

    if(isset($_POST['test'])) {
        $content=simplexml_load_file("books.xml");
        $value=$content->book->price;
        $content->book->price = $value + 1.0;
        $content->asXML("books.xml");
        $sum=$content->book->price;
    }
?>

<body>
    <form method="post">
        <input type="checkbox" id="i1check1" onchange="toggleDisabled(this.checked)"> Alarm 01
        <input type="text" id="i1text1" name="i1" size="80" maxlength="128" value="<?php echo @$sum;?>"/>
        <input type="submit" id="i1btn1" name="update" value="Update"/>
        <input type="submit" id="i1btn2" name="test" value="Test"/>
    </form>

    <script>
        function toggleDisabled(_checked) {
            document.getElementById('i1text1').disabled = _checked ? false : true;
            document.getElementById('i1btn1').disabled = _checked ? false : true;
        }
    </script>
</body>

这是因为您设置了文本输入框的值字段。 - Vickrant
你的代码在 "if(isset($_POST['update'])){" 和 "if(isset($_POST['test'])){" 内部不会运行,直到你按下 "update" 或 "test" 按钮,你必须定义 $_POST['update'] 是否设置为变量,因此你必须使用 (isset)。 - Brijal Savaliya
你的答案正确吗?你测试过了吗? - prava
当我加载以下代码时,它似乎会运行if(isset($_POST['test'])),即使我没有按下“test”按钮。加载是什么意思?我已经检查过了,一切正常。如果您在单击任何按钮后刷新页面,则它将进入相同的条件,因为提交的值可在$_POST中使用。 - VipindasKS
2个回答

5

请尝试以下方法

if(isset($_POST['update']) && $_POST['update'] == "Update"){
    $content=simplexml_load_file("books.xml");
    $value=$content->book->price;
    $sum=$content->book->price;
}

if(isset($_POST['test']) && $_POST['test'] == "Test"){
    $content=simplexml_load_file("books.xml");
    $value=$content->book->price;
    $content->book->price = $value + 1.0;
    $content->asXML("books.xml");
    $sum=$content->book->price;
}

1
他的代码运行良好,没有任何问题: if(isset($_POST['update']) && $_POST['update'] == "Update"){ - Brijal Savaliya
@Manish Jesani,您的建议解决了我在表单加载时值被更新的问题。但是这又产生了另一个问题,即值仅在按钮点击后显示(而不是在表单加载时)。我该如何解决此问题?或者是否有比我的当前方法更好的方法? - Juan Le Roux

1
在您的情况下,应该使用!empty而不是isset
每当表单被提交时,所有表单的name属性都将在$_POST数组中接收。它无论是否设置。
您可以使用!empty进行过滤,因为它将检查set + has value。而isset仅检查set。
if(!empty($_POST['update'])){ // !empty instead of isset

    $content=simplexml_load_file("books.xml");
    $value=$content->book->price;
    $sum=$content->book->price;

}
if(!empty($_POST['test'])){  // !empty instead of isset

    $content=simplexml_load_file("books.xml");
    $value=$content->book->price;
    $content->book->price = $value + 1.0;
    $content->asXML("books.xml");
    $sum=$content->book->price;
}

建议:您在表单中写了echo @$sum;。不要使用@隐藏错误。相反,您应该在开发模式下打开error_reporting

您应该将该语句编写为以下形式。

 echo empty($sum) ? '' : $sum;  // ternary operator  

您建议我们使用"!empty",但每次重新加载表单时,$sum仍会增加1。正如我在原帖中提到的,我对PHP还很陌生,所以我真的很需要您明确您不隐藏错误的建议是什么意思?您的意思是什么? - Juan Le Roux
@符号用于隐藏错误。只需将其删除并打开您的错误报告。它会向您显示通知。 - Ravi Hirani
谢谢@Ravi Hirani的建议。 - Juan Le Roux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接