这里有一个小问题,尝试了许多不同的解决方案,但最终总是向数据库发送空值。所以我得到了一个包含两个值和一个值的下拉列表,该值永远不会被允许进行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”。如果有人可以帮助我,那将非常好。谢谢。
答案 0 :(得分:1)
如果您的选项是静态的,则可以检查是否值来自您的选项?
in_array 功能可以帮助您
例如:
$options = array("Done","Pending");
if (in_array($_POST['status2'], $options)) {
答案 1 :(得分:1)
在线:
<option selected="selected" disabled="disabled">Change status</option>
您已经提到了selected
,因此默认情况下,第一个选项将作为选择的选项返回,并且看起来它返回0是合乎逻辑的。
建议的解决方案:
在insert2
按钮上设置一个断点,并将下拉列表留空,然后检查返回的值。最后尝试阻止代码端通过诸如If