POST 个带有隐藏元素的未选中复选框
POST unchecked checkboxes with hidden elements
我知道还有其他 post 有同样的问题,但它对我不起作用。
好吧,我有一个数据库 table(图像),其中包含 'img_name' 和 'img_status'。状态可以是 'active' 或 'inactive'。在 php 中,我执行以下操作,将数据库中的图像设置为活动或非活动:
while($row = mysqli_fetch_object($images)) {
if ($row->img_status == 'active') {
echo '<input type="hidden" name="image[]" value="' . $row->img_name . '">';
echo '<label><input type="checkbox" name="image[]" value="' . $row->img_name . '" checked> ' . $row->img_name . '</label>';
} else {
echo '<input type="hidden" name="image[]" value="' . $row->img_name . '">';
echo '<label><input type="checkbox" name="image[]" value="' . $row->img_name . '"> ' . $row->img_name . '</label>';
}
}
对于处于活动状态的行,复选框处于选中状态,对于非活动状态,则处于未选中状态。
在提交表格时我这样做:
if(isset($_POST['image']) && is_array($_POST['image'])) {
foreach($_POST['image'] as $imageName) {
// here i want update table
// unchecked: set image to inactive
// checked: set image to active
}
}
现在我的问题是,当我取消选中一个已选中的(因为在数据库中它是活动的,因此在页面加载时它被选中)并提交表单时,它没有 post。
我建议您创建一个名为 status 的列,并将其设为值为 1 的 tinyint,如果图像状态为 0,则表示它未激活,如果为 1,则表示它处于激活状态,然后您可以使用单选按钮而不是像这样的复选框:
<input type="radio" name="status" value="0"<?php if ($row["status"] == 0) { echo "checked"; } ?> />
<input type="radio" name="status" value="1"<?php if ($row["status"] == 1) { echo "checked"; } ?> />
在你的 while 循环中,你也可以这样做来显示文本而不是数字,并在你想要或需要的地方回显它:
$stat = $row['status'];
if($stat == 0) {
$status = "Disabled";
} else {
$status = "Active";
}
尚不清楚为什么需要隐藏字段,但如果您要使用,请给它们一个不同的名称:
while($row = mysqli_fetch_object($images)) {
echo '<input type="hidden" name="allimage[]" value="' . $row->img_name . '">';
echo '<label><input type="checkbox" name="image[]" value="' . $row->img_name . '" ' . ($row->img_status == 'active' ? 'checked' : '') . '> ' . $row->img_name . '</label>';
}
然后,当您获得 return 值时,$_POST['allimage'] 拥有所有图像,$_POST['image'] 拥有被检查的图像。那么:
array_intersect($_POST{'allimage'], $_POST['image']);
已检查所有图像,并且
array_diff($_POST{'allimage'], $_POST['image']);
returns 一个包含所有未检查名称的数组。然后,您可以根据需要将它们的状态设置为 "Active" 或 "Disabled"。
我知道还有其他 post 有同样的问题,但它对我不起作用。 好吧,我有一个数据库 table(图像),其中包含 'img_name' 和 'img_status'。状态可以是 'active' 或 'inactive'。在 php 中,我执行以下操作,将数据库中的图像设置为活动或非活动:
while($row = mysqli_fetch_object($images)) {
if ($row->img_status == 'active') {
echo '<input type="hidden" name="image[]" value="' . $row->img_name . '">';
echo '<label><input type="checkbox" name="image[]" value="' . $row->img_name . '" checked> ' . $row->img_name . '</label>';
} else {
echo '<input type="hidden" name="image[]" value="' . $row->img_name . '">';
echo '<label><input type="checkbox" name="image[]" value="' . $row->img_name . '"> ' . $row->img_name . '</label>';
}
}
对于处于活动状态的行,复选框处于选中状态,对于非活动状态,则处于未选中状态。 在提交表格时我这样做:
if(isset($_POST['image']) && is_array($_POST['image'])) {
foreach($_POST['image'] as $imageName) {
// here i want update table
// unchecked: set image to inactive
// checked: set image to active
}
}
现在我的问题是,当我取消选中一个已选中的(因为在数据库中它是活动的,因此在页面加载时它被选中)并提交表单时,它没有 post。
我建议您创建一个名为 status 的列,并将其设为值为 1 的 tinyint,如果图像状态为 0,则表示它未激活,如果为 1,则表示它处于激活状态,然后您可以使用单选按钮而不是像这样的复选框:
<input type="radio" name="status" value="0"<?php if ($row["status"] == 0) { echo "checked"; } ?> />
<input type="radio" name="status" value="1"<?php if ($row["status"] == 1) { echo "checked"; } ?> />
在你的 while 循环中,你也可以这样做来显示文本而不是数字,并在你想要或需要的地方回显它:
$stat = $row['status'];
if($stat == 0) {
$status = "Disabled";
} else {
$status = "Active";
}
尚不清楚为什么需要隐藏字段,但如果您要使用,请给它们一个不同的名称:
while($row = mysqli_fetch_object($images)) {
echo '<input type="hidden" name="allimage[]" value="' . $row->img_name . '">';
echo '<label><input type="checkbox" name="image[]" value="' . $row->img_name . '" ' . ($row->img_status == 'active' ? 'checked' : '') . '> ' . $row->img_name . '</label>';
}
然后,当您获得 return 值时,$_POST['allimage'] 拥有所有图像,$_POST['image'] 拥有被检查的图像。那么:
array_intersect($_POST{'allimage'], $_POST['image']);
已检查所有图像,并且
array_diff($_POST{'allimage'], $_POST['image']);
returns 一个包含所有未检查名称的数组。然后,您可以根据需要将它们的状态设置为 "Active" 或 "Disabled"。