如何查询是否选中了多个复选框


how to query if multiple checkbox is checked?

我正在用 PHP 生成报告代码,如果我在表单中选中多个复选框,我会遇到问题。

这是我的示例 html 代码。

<input type="check" name="permit" value="Locational Clearance"/>Locational Clearance
    <input type="check" name="permit"  value="PALC"/>PALC
    <input type="check" name="permit"  value="DP"/>DP
    <input type="check" name="permit"  value="AP"/>AP

这是我的查询。

<?php
    $servername = "localhost";
    $username = "root";
    $password = "";

    $year = $_POST['year'];
    $permit = $_POST['permit'];
    $range_to = $_POST['range_to'];
    $range_from = $_POST['range_from'];
    $comma_separated_permits = implode(",", $permit);
    // Create connection
    $conn = mysql_connect($servername, $username, $password);
    // Check connection
    if(! $conn )
    if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = "SELECT  permit_type, count(id) as 'no',DATE_FORMAT(date,'%M %Y') as 'month', sum(total_amount) as 'amount'     
        FROM payments
        WHERE date like '%$year%' and permit_type IN ('$comma_separated_permits')
        group by DATE_FORMAT(date,'%M')
        order by DATE_FORMAT(date,'%m')";
mysql_select_db('cpdo_db');
$result = mysql_query( $sql, $conn );
if(! $result )
{
  die('Could not get data: ' . mysql_error());
}
?>

我在mySQL工作台中尝试过这个,它工作正常

   <?php
    $servername = "localhost";
    $username = "root";
    $password = "";

    $year = $_POST['year'];
    $permit = $_POST['permit'];
    $range_to = $_POST['range_to'];
    $range_from = $_POST['range_from'];
    $permitArray = implode('","', (array)$permit);
    // Create connection
    $conn = mysql_connect($servername, $username, $password);
    // Check connection
    if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = "SELECT  permit_type, count(id) as 'no',DATE_FORMAT(date,'%M %Y') as 'month', sum(total_amount) as 'amount'     
        FROM payments
        WHERE permit_type IN ('$permitArray') AND date like '%$year%'
        group by permit_type, DATE_FORMAT(date,'%M %Y')
        ";
        var_dump($permitArray,$year);
mysql_select_db('cpdo_db');
$result = mysql_query( $sql, $conn );
if(! $result )
{
  die('Could not get data: ' . mysql_error());
}
?>
    <div id="tabs">
            <div id="tabs-1" class="tab-pad">
                <table class="table table-striped table-bordered" border="1" id="locdata" cellspacing="0" width="100%">
                    <thead>
                        <tr>
                        <center><h1><?php echo $year; ?></h1></center>
                            <th>Month</th>
                            <th>No</th>
                            <th>Permit Type</th>
                            <th>Total Amount</th>
                        </tr>
                    </thead>
                    <tbody>
                                                                                                                <?php 

                            while($row = mysql_fetch_array($result,MYSQL_ASSOC)){
                                //Creates a loop to loop through results
                                echo '<tr>';
                                    echo '<td>'.'<input type="text" name="permit-type" style="border:none;" readonly value="'.$row['month'].'"/>'.'</td>';
                                        echo '<td>'.'<input name="total-no" type="text" style="border:none;" readonly value="'.$row['no'].'"/>'.'</td>';
                                        echo '<td>'.'<input name="total-no" type="text" style="border:none;" readonly value="'.$row['permit_type'].'"/>'.'</td>';
                                        echo '<td>'.'<input name="total-amount" type="text" style="border:none;" readonly value="'."P".$row['amount'].".00".'"/>'.'</td>';
                                echo '</tr>';
                        }   
                    ?>               
                    </tbody>
                </table>  
          </div>    
         </div>

<?php
mysql_close($conn);
?>
但是

在我输入PHP代码的地方,如果我选中1个复选框,它会返回一个结果,但是当我选中2个或更多复选框时,没有结果返回

缺少

将输入值传递给 $_POST 变量的代码部分(您可以通过 ajax 序列化或用方法表单将其传递给另一个 php...等等),但是...如果我想象您现在$permits输入值数组,那么您应该将$permits数组转换为一些逗号分隔的 Vlaues 女巫可以在查询中使用:

$comma_separated_permits = implode(",", $permits);

现在,您可以在查询中使用它:

... WHERE .... AND permit_type IN ($comma_separated_permits) ...

我刚刚在数据库表上测试了这个名为"test"的小示例,其中包含一些行

$array = array ("PALC","DP","AD");
$tosql = implode("','", $array);
$sql = ("SELECT * FROM `test` WHERE `key` IN ('$tosql')");
$result = $db -> query($sql) -> fetchAll(PDO::FETCH_COLUMN,0);
var_dump ($result); 

它工作正常...在 IN() clausule 中使用字符串而不是整数时要小心。我的答案不包含凸出您的数组表单复选框,因为您询问如何查询数据库

带有 html 部分的完整示例:

<form action="#" method="post">
  <input type="checkbox" name="checks[]" value="PALC" />PALC
  <input type="checkbox" name="checks[]" value="DP" />DP
  <input type="checkbox" name="checks[]" value="AD" />AD
  <input type="submit" />
</form>

然后添加 php:

if (!empty($_POST['checks'])){
    $array = $_POST['checks'];
    $tosql = implode("','", $array);
    $sql = ("SELECT * FROM `test` WHERE `key` IN ('$tosql')");
    $result = $db -> query($sql) -> fetchAll(PDO::FETCH_COLUMN,0);
var_dump ($result);
}