阻止禁用和选定的选项在表单中发送空白值

Posted

技术标签:

【中文标题】阻止禁用和选定的选项在表单中发送空白值【英文标题】:Stop a disabled and selected option from sending blank value in a form 【发布时间】:2019-07-10 08:39:30 【问题描述】:

所以这里遇到了一个小问题,尝试了很多不同的解决方案,但最终总是向数据库发送一个空白值。所以我得到了一个下拉列表,其中包含两个值和一个永远不会被允许进行 POST 的值。因此,如果您在从下拉菜单中选择一个值之前不小心单击了“Oppdater”按钮,我不希望它被发送,但现在它会发送并且只是向数据库添加一个空白值。示例:

                <form action="" method="post">
                    <input type="hidden" name="id" value="' . $row['id'] . '">
                    <select name="status2" class="endre-status">
                        <option selected="selected" disabled="disabled">Change status</option>
                        <option value="Done">Done</option>
                        <option value="Pending">Pending</option>
                    </select>
                    <input type="submit" name="insert2" value="Oppdater">
                </form>

在这里您可以看到我已选择并禁用它,这应该意味着当我使用 isset() 检查时它不会被发送,但它仍然会发送并在我的数据库中放置一个空白值。

这是我使用下拉列表中的新值更新数据库的代码。

if (isset($_POST['insert2']))

    $status2 = $_POST['status2'];
    $id = $_POST['id'];

    $sql2 = ("UPDATE test3 SET status='$status2' WHERE id='$id'");

    if (mysqli_query($conn, $sql2)) 
    header("Location: index.php");
    exit;
 else 
    echo "Error: " . $sql2 . "<br>" . mysqli_error($conn);

这是它的外观:

我还尝试将禁用选项的值设置为“0”并使用 empty() 检查,但它仍然将“0”发送到数据库。如果有人可以帮助我,那就太好了。谢谢。

【问题讨论】:

echo $status2 和 $id 并在单击按钮时查看值是否存在于变量中。你能告诉我们你的桌子的结构吗? 【参考方案1】:

如果您的选项是静态的,您可以检查一下价值是否来自您的选项?

in_array函数可以帮到你

例如:

$options = array("Done","Pending");
if (in_array($_POST['status2'], $options)) 

【讨论】:

这可能是一个不错的方法,但是当我尝试这样做时,我得到了一个谷歌浏览器错误“ERR_TOO_MANY_REDIRECTS”。【参考方案2】:

在线:

<option selected="selected" disabled="disabled">Change status</option>

你提到了selected,所以默认情况下,第一个选项将作为选定选项返回,它返回 0 似乎是合乎逻辑的。 建议的解决方案: 在insert2 按钮上设置断点并将下拉列表留空,然后检查返回值。最后尝试通过If等控制语句阻止代码端发送该值

【讨论】:

以上是关于阻止禁用和选定的选项在表单中发送空白值的主要内容,如果未能解决你的问题,请参考以下文章

禁用表单提交按钮,而不阻止 HTML5 验证

使用按钮单击或表单提交禁用注册按钮,两种方式都会阻止表单提交

js阻止form表单重复提交

Charles——charles 工具栏Tools总结——禁用cookies/Block Cookies Settings

我如何禁用选项请求方法甚至在 dropwizard 中处理

打开新的浏览器选项卡会使 Django 的 CSRF 令牌无效,从而阻止表单提交