【问题标题】:Select multiple rows from table using checkboxes使用复选框从表中选择多行
【发布时间】:2016-10-24 18:45:03
【问题描述】:

我正在尝试通过 SELECT 对多个 sql 查询使用复选框。

我有 3 张表,一张用于 groups 一张用于 users 一张用于将用户连接到名为 groupreluser 的不同组。根据检查的组,我希望它打印出属于这些组的每个用户的电话号码。

复选框是根据表groups

的内容创建的
<form method="post">
<?php
$sql = "SELECT * FROM groups WHERE groupname LIKE '%minor%'";
    $result = $conn->query($sql);

    if($result->num_rows > 0){

            while($row = $result->fetch_assoc()){

                    echo '<input type="checkbox" name="checked[]" value="'.$row['group_id'].'">'
                    . $row['groupname'] . '</br>';

            }

    }
?>
 <input type="submit" name="submit" value="submit">
</form>

使用 sql 查询代码来获取电话号码。

if(isset($_POST['submit'])){

    $check = $_POST['checked'];

    if(!empty($check)){


            foreach($check as $sel){
                    $sel = mysqli_real_escape_string($conn, $sel);


                    $sql = "

                            SELECT
                                    groups.group_id,
                                    groups.groupname,
                                    groupreluser.user_id,
                                    groupreluser.group_id,
                                    users.user_id,
                                    users.name,
                                    users.phone
                            FROM
                                    groupreluser
                            JOIN
                                    groups
                            ON
                                    groups.group_id = groupreluser.group_id
                            JOIN
                                    users
                            ON
                                    users.user_id = groupreluser.user_id
                            WHERE 
                                    groups.group_id = '$sel'

                    ";

                    $res = $conn->query($sql);

                    if($res->num_rows > 0){

                            while($row = $res->fetch_assoc()){

                                    echo $row['phone'] . '</br>';

                            }

                    }
            }
    }
}

只要我不使用复选框,而是在 SELECT 语句中手动添加 group_id,它就可以正常工作。知道为什么这不起作用吗?我错过了什么吗?虽然不知道这是否是最好的方法...... 如果不清楚,请告诉我,我会尝试更好地解释它

【问题讨论】:

  • echo '&lt;input type="checkbox" name="checked[]"... 在表单标签内吗?如果没有,PHP 应该会向您抛出一个错误,如“未定义索引...”。
  • 你能帮我们一个忙并 var_dump 几个版本的 $sql 以便我们看看它有多乱吗?
  • 对不起,没有把它放进去。是的,复选框在表单标签内。我现在已将其添加到帖子中

标签: php html mysql sql checkbox


【解决方案1】:

这行可能行不通: $check = mysqli_real_escape_string($conn, $_POST['checked']);

$_POST['checked'] 是一个数组。所以你已经为数组中的每个项目做了上面的行。

【讨论】:

    【解决方案2】:

    您的 $_POST['submit'] 是数组,因此直接将其传递给 mysqli_real_escape_string 将不起作用。但是这种方法会起作用:

    if(isset($_POST['submit'])){
    $check = $_POST['check'];
    if(!empty($check)){
    
            foreach($check as $sel) {
            $sel = mysqli_real_escape_string($conn, $sel);
    
            $sql = "
    
                            SELECT
                                    groups.group_id,
                                    groups.groupname,
                                    groupreluser.user_id,
                                    groupreluser.group_id,
                                    users.user_id,
                                    users.name,
                                    users.phone
                            FROM
                                    groupreluser
                            JOIN
                                    groups
                            ON
                                    groups.group_id = groupreluser.group_id
                            JOIN
                                    users
                            ON
                                    users.user_id = groupreluser.user_id
                            WHERE 
                                    groups.group_id = '$sel'
    
                    ";
    
                    $res = $conn->query($sql);
      ...........
    

    【讨论】:

    • 个人不是粉丝或“试试这个”答案。愿意分享他们为什么要“尝试”那个吗?也许他们会从错误中“学习”。 ;-)
    • 不,抱歉没用。我没有收到任何错误,但它不会回显任何数据
    • 是的,我试过了。我现在已经编辑了帖子,所以你可以看到
    • $sel = mysqli_real_escape_string($conn, $sel);后面加上print $sel;会是什么输出?
    • 对不起@krasipenkov,我搞砸了。您的版本完美运行!谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    相关资源
    最近更新 更多