【问题标题】:Multiple checkbox in phpphp中的多个复选框
【发布时间】:2012-09-21 11:44:20
【问题描述】:

我有 4 个复选框,假设我只选中其中两个,即 user1 和 user3

<input type="checkbox" name="usersp[]" value="1" checked="checked" />User1 <br>
<input type="checkbox" name="usersp[]" value="2"/>User2 <br>
<input type="checkbox" name="usersp[]" value="3" checked="checked" />User3 <br>
<input type="checkbox" name="usersp[]" value="4"/>User4 <br>

我的数据库中有两个字段(“User_id”、“Selected”),下面是我的插入代码

foreach($_POST['usersp'] as $user_id) {
  $sql = "INSERT INTO sel_users(`User_id`,`Selected`) VALUES('$user_id','')";
  $result = mysql_query($sql);
}

我的问题是如何在“已选择”字段中插入选中的用户作为 1 的值和其他作为 0 的值?

【问题讨论】:

  • 如果您的表 sel_users 仅适用于选定用户,为什么需要插入尚未选定的用户?当然,只插入选定的用户是最好的做法吗?
  • &lt;input type="hidden" name="usersp[1]" value="0" /&gt;&lt;input type="checkbox" name="usersp[1]" value="1" /&gt;代替&lt;input type="checkbox" name="usersp[]" value="1" /&gt;
  • 问题是当我使用我的更新查询时,假设我更新这些复选框并取消选中用户1,用户3并检查用户2和用户4,那么我将如何进行更新查询,因为它也会更新并插入同一时间。
  • @DCoder 实际上我正在从数据库中获取所有这些用户,但我正在尝试 for 循环。
  • 这不会改变逻辑 - 为每个用户 ID 生成一对输入,使用该 ID 作为输入名称中的索引...

标签: php mysql html checkbox


【解决方案1】:

除非您已经知道(未选中的复选框),否则您无法知道它们

这是实现梦想的唯一途径

//YOUR USERS IDS
$userIDS=array('1','2','3','4');
//CHECKED USERS ARRAY
$checkedUsers=array('1','3');

if(!isset($_POST['usersp'])){
foreach($userIDS as $userID){
    //IF IT IN CHECK ARRAY, CHECK IT!
    $checked=(in_array($userID,$checkedUsers))?' checked="checked"':'';
    echo '<input type="checkbox" name="usersp[]" value="'.$userID.'"'.$checked.' />';
}
}

else{
    foreach($userIDS as $userID){
        //USER SELECTED OR NOT?
        $selected=(in_array($userID,$_POST['usersp']))?'1':'0';
        $sql = "INSERT INTO sel_users(`User_id`,`Selected`) VALUES('$user_id','$selected')";
        $result = mysql_query($sql);
    }
}

【讨论】:

  • 感谢您的回答,我以自己的方式使用,但它对我有帮助。再次感谢:)
【解决方案2】:

您将获得选中复选框的值,而不是未选中复选框的值。

使用本教程

http://www.html-form-guide.com/php-form/php-form-checkbox.html

determine whether checkbox is checked php $_GET

【讨论】:

  • 感谢您的帮助 :) 我现在明白了。
【解决方案3】:

Checkbox 给出同名的Checked 元素的值。

所以在你给出的例子中你不会得到未经检查的值。

但是如果你给每个复选框一个不同的名字,那么你可以实现你想要的:-

<input type="checkbox" name="usersp1" value="1" checked="checked" />User1 <br>
<input type="checkbox" name="usersp2" value="2"   />User2 <br>
<input type="checkbox" name="usersp3" value="3" checked="checked" />User3 <br>
<input type="checkbox" name="usersp4" value="4"   />User4 <br>

在 PHP 方面

for($i=1;$i<5;$i++){
    if(isset($_POST['usersp'.$i]){
         $sql = "INSERT INTO sel_users(`User_id`,`Selected`) VALUES('$user_id','1')";
         $result = mysql_query($sql);
    }
    else{
        //Somehow you still have to get other User_id's in another way.
    }
}

现在您可以在其他地方获取未选择的用户 ID 表单,您可以将其放入 else 条件中。 您可以使用 Ajax + JS 或 JQuery 来提交表单,而不是使用默认的 HTML 提交,这样您就可以使用另一个名称为未选中的值提供服务,并在 PHP 中相应地处理它们

【讨论】:

  • 谢谢你的回答,我也试试这个逻辑。 :)
【解决方案4】:

为我工作,将选中和取消选中的值都保存到 mysql

HTML:

<form method="post" action="jawab25.php">
<input type="hidden" name="check_lista[]" value="<?php echo $r["id"]?>">
<input type="checkbox" name="check_listb[]" value="<?php echo $r["id"]?>">
<input value="Check" type="Submit">

jawab25.php:

    foreach($_POST['check_lista'] as $itema){
        $string="update trans set ck='N' where id='$itema'";
        $tampil=mysql_query($string);
    }

    foreach($_POST['check_listb'] as $itemb){
        $string="update trans set ck='Y' where id='$itemb'";
        $tampil=mysql_query($string);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 2013-04-13
    相关资源
    最近更新 更多