作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个页面,其中包含使用数据库生成的复选框。当我们按下复选框并提交它时,它工作正常并且正在数据库中更新。但是当我尝试取消选中“1”复选框时,它会检查所有选中的复选框。
查询:
if(isset($_POST['submit'])){
foreach ($_POST['untrain'] as $room_id => $user_id) {
// This query needs protection from SQL Injection!
$user_id;
$untrainQuery = "UPDATE room_users SET trained = '1' WHERE user_id = $user_id AND room_id = $room_id";
$db->update($untrainQuery);
}
}
if(isset($_POST['submit'])){
foreach ($_POST['amk'] as $room_id => $user_id) {
// This query needs protection from SQL Injection!
$user_id;
$untrainedQuery = "UPDATE room_users SET trained = '0' WHERE user_id = $user_id AND room_id = $room_id";
$db->update($untrainedQuery);
}
}
复选框:
<?php
if($room->trained == 1)
{ ?>
<input type='hidden' value="<?php echo $room->user_id; ?>" name="amk[<?php echo $room->room_id; ?>]">
<input type='checkbox' value="<?php echo $room->user_id; ?>" name="trained[<?php echo $room->room_id; ?>]" checked>
<?php echo "Y"; }
else{ ?>
<input type='checkbox' value="<?php echo $room->user_id; ?>" name="untrain[<?php echo $room->room_id; ?>]">
<?php echo "N";
}?>
</td>
<Td><?php
if($room->active == 1) {
?> <input type='checkbox' name="<?php echo $room->room_id; ?>" checked>
<?php echo "Active"; }
else { ?>
<input type='checkbox' name="<?php echo $room->room_id; ?>"
<?php echo "Inactive"; } ?>
我在复选框之前使用了“隐藏”输入的技巧,但唯一的问题是它不起作用。当我点击它时,它会将所有复选框重置为 0。
最佳答案
我认为您错过了组合复选框+隐藏输入的工作原理。
所以你可以自由地受到 this answer 的启发:
<input id="foo" name="foo" type="checkbox" value="1" />
<input name="foo" type="hidden" value="0" />
看起来你确实知道,如果你使用这个技巧,如果取消选中该复选框,它就不会出现在帖子中。因此,为了欺骗表单,我们将始终添加一个隐藏字段。如果选中该复选框,那么它将包含在帖子中的事实将覆盖隐藏输入的值。
因此,对于您的具体问题:
<td>
<input type="checkbox" value="1" name="trained[<?php echo $room->room_id; ?>_<?php echo $room->user_id; ?>]" <?php echo ($room->trained == 1) ? ' checked' : '' ?> /> Trained
<input type="hidden" value="0" name="trained[<?php echo $room->room_id; ?>_<?php echo $room->user_id; ?>]"/>
</td>
请注意 ternary operator 的使用关于这部分代码<?php echo ($room->trained == 1) ? ' checked' : '' ?>
我在编写 html 模板时可能会经常使用它。
另请注意名称 trained[<?php echo $room->room_id; ?>_<?php echo $room->user_id; ?>]
上的技巧这是必需的,因为我们无法将 user_id 设置为输入的值。
然后是处理部分:
if ( isset ( $_POST['submit'] ) ) {
foreach ( $_POST['trained'] as $ids => $value ) {
// This query needs protection from SQL Injection!
// ^ good point, on which I would suggest you using PDO and prepared statement :)
list($room_id,$user_id) = explode('_',$ids);
// ^ now need to explode the name on the underscore to get both user_id and room_id cf the trick above
$untrainQuery = "UPDATE room_users SET trained = '$value' WHERE user_id = $user_id AND room_id = $room_id";
$db->update ( $untrainQuery );
}
}
清洗、漂洗,对您需要的每个复选框重复此操作,您就可以开始了。
关于php - 复选框正在检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29500205/
我是一名优秀的程序员,十分优秀!