阻止禁用和选定的选项在表单中发送空白值
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
等控制语句阻止代码端发送该值
【讨论】:
以上是关于阻止禁用和选定的选项在表单中发送空白值的主要内容,如果未能解决你的问题,请参考以下文章
使用按钮单击或表单提交禁用注册按钮,两种方式都会阻止表单提交
Charles——charles 工具栏Tools总结——禁用cookies/Block Cookies Settings