首页 > 解决方案 > 使用 PHP 脚本在 POST 中发送错误的提交按钮

问题描述

我的 PHP 表单使用多个提交按钮,用于 A/B 处理

有时,即使不是单击的提交按钮,也会传递错误的提交按钮。按钮如下所示:

<form method="post" action="url..." autocomplete="off">
... fields...
<input type="submit" name="UpdateExit" value="Exit" />
<input type="submit" name="UpdateSave" value="Save" />
<input type="submit" name="InsertNew" value="Insert new" />
<input type="submit" name="Delete" value="Delete" />            
<input type="button" name="Cancel" value="Cancel" />
</form>

有时var_dump($_POST)两者都显示UpdateExitUpdateSave 即使我点击了InsertNew!不用说它会弄乱输出。然后发送“右键”。

我将此行为范围缩小到 webkit 浏览器,并且在清除浏览器缓存后第一次使用该表单时,它似乎“恢复正常”。这是经验性的,我不能说它与 PHP 或 HTML 相关。但我在一天的大部分时间里一直在努力解决这个问题,并没有发现关于 SO 或其他地方的信息:(

有人听说过/遇到过类似的行为吗?

标签: phphtmlforms

解决方案


尝试:

<form method="post" action="url..." autocomplete="off">
... fields...
<input type="submit" name="UpdateExit" value="Exit" />
<input type="submit" name="UpdateSave" value="Save" />
<input type="submit" name="InsertNew" value="Insert new" />
<input type="submit" name="Delete" value="Delete" />            
<input type="submit" name="Cancel" value="Cancel" />
</form>

像处理任何其他提交按钮一样处理取消逻辑。

PHP 表单处理程序逻辑:

<?php
    if (isset($_POST['UpdateExit'])) {
        //Do something based on Update and Exit was used
    }
    elseif (isset($_POST['UpdateSave'])) {
        //Do something based on Update and Save was used
    }
    elseif (isset($_POST['InsertNew'])) {
        //Do something based on Insert New was used
    }
    elseif (isset($_POST['Delete'])) {
        //Do something based on Delete was used
    }
    else {
        //Do something because Cancel was used...
    }
?>

推荐阅读