我尝试使用复选框对SELECT进行多个SQL查询。
我有3个表,一个用于组的表一个用于用户,另一个用于将用户连接到名为 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查询代码获取phonenumbers。
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 ,它就可以正常工作。知道为什么这不起作用吗?我错过了吗?不知道这是否是最好的方式,但... 如果不清楚,请告诉我,我会尝试更好地解释它
答案 0 :(得分:1)
这条线可能不起作用:
$check = mysqli_real_escape_string($conn, $_POST['checked']);
$_POST['checked']
是一个数组。所以你已经为数组中的每个项做了上面的行。
答案 1 :(得分:0)
您的$_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);
...........