gpt4 book ai didi

php - 复选框正在检查

转载 作者:行者123 更新时间:2023-11-29 22:37:11 25 4
gpt4 key购买 nike

我有一个页面,其中包含使用数据库生成的复选框。当我们按下复选框并提交它时,它工作正常并且正在数据库中更新。但是当我尝试取消选中“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com