我正在用 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);
}