如何使用 php pdo 搜索多个输入和复选框?
How to search multiple inputs and checkboxes with php pdo?
我有一个包含多个“文本”输入的搜索表单,我正在尝试向其中添加复选框。添加复选框后,我得到以下信息:
ERROR: Array to String Conversion
<form action='s-response.php method='get'>
<div class='cusname'><input type='text' name='cusname' class='EdtTxt' /></div>
<div class='street'><input type='text' name='street' class='EdtTxt' /></div>
复选框
<?php while ($row=$query->fetch()){?>
<input type='checkbox' name='groupid[]' value='<?php echo $row['id'];?>'><?php echo $row['title'];?><?php }?>
响应页
$wheres = array();
$params = array();
/* Find all Sent fields, If the field is Not Empty, add the field to the SQL query */
if (!empty($_GET['cosname'])) { $wheres[] = 'c.cname LIKE :cosname'; $params[':cosname'] = '%'.$_GET['cosname'].'%'; }
if (!empty($_GET['street'])) { $wheres[] = 'a.street LIKE :street'; $params[':street'] = '%'.$_GET['street'].'%'; }
复选框部分
if(!empty($_GET['groupid'])) {
foreach($_GET['groupid'] as $value){
$wheres[] = 'g.groupid = :groupid'; $params[':groupid'] = $_GET['groupid'];
}}
查询部分
/* Create the Start and End (static) parts of the query */
$q1="SELECT c.fname,a.street FROM customers c LEFT JOIN cus_address a ON c.id=a.custid WHERE c.act=1";
$q3=" GROUP BY c.id";
/* Create the Middle (dynamic) part of the query */
if (!empty($wheres)) { $q1 .= " AND " . implode(' AND ', $wheres); }
/* Combine into one query and execute */
$sql=$q1.$q3;
$query=$con->prepare($sql);
$query->execute($params);
知道导致错误的原因吗?
查询部分
if(!empty($_GET['groupid'])) {
foreach($_GET['groupid'] as $i => $value){
$placeholder = sprintf(':groupid%d', $i+1);
$wheres[] = sprintf('g.groupid = %s', $placeholder);
$params[$placeholder] = $value;
}
}
在 foreach 循环中,您应该使用 $value
,而不是 $_GET['groupid']
- 它是一个数组,还记得吗?您目前正在对其进行迭代。
我编辑了我的答案以展示如何处理多个组 ID。占位符是唯一的,例如。 :groupid1, :groupid2, :groupid3
.
我有一个包含多个“文本”输入的搜索表单,我正在尝试向其中添加复选框。添加复选框后,我得到以下信息:
ERROR: Array to String Conversion
<form action='s-response.php method='get'>
<div class='cusname'><input type='text' name='cusname' class='EdtTxt' /></div>
<div class='street'><input type='text' name='street' class='EdtTxt' /></div>
复选框
<?php while ($row=$query->fetch()){?>
<input type='checkbox' name='groupid[]' value='<?php echo $row['id'];?>'><?php echo $row['title'];?><?php }?>
响应页
$wheres = array();
$params = array();
/* Find all Sent fields, If the field is Not Empty, add the field to the SQL query */
if (!empty($_GET['cosname'])) { $wheres[] = 'c.cname LIKE :cosname'; $params[':cosname'] = '%'.$_GET['cosname'].'%'; }
if (!empty($_GET['street'])) { $wheres[] = 'a.street LIKE :street'; $params[':street'] = '%'.$_GET['street'].'%'; }
复选框部分
if(!empty($_GET['groupid'])) {
foreach($_GET['groupid'] as $value){
$wheres[] = 'g.groupid = :groupid'; $params[':groupid'] = $_GET['groupid'];
}}
查询部分
/* Create the Start and End (static) parts of the query */
$q1="SELECT c.fname,a.street FROM customers c LEFT JOIN cus_address a ON c.id=a.custid WHERE c.act=1";
$q3=" GROUP BY c.id";
/* Create the Middle (dynamic) part of the query */
if (!empty($wheres)) { $q1 .= " AND " . implode(' AND ', $wheres); }
/* Combine into one query and execute */
$sql=$q1.$q3;
$query=$con->prepare($sql);
$query->execute($params);
知道导致错误的原因吗?
查询部分
if(!empty($_GET['groupid'])) {
foreach($_GET['groupid'] as $i => $value){
$placeholder = sprintf(':groupid%d', $i+1);
$wheres[] = sprintf('g.groupid = %s', $placeholder);
$params[$placeholder] = $value;
}
}
在 foreach 循环中,您应该使用 $value
,而不是 $_GET['groupid']
- 它是一个数组,还记得吗?您目前正在对其进行迭代。
我编辑了我的答案以展示如何处理多个组 ID。占位符是唯一的,例如。 :groupid1, :groupid2, :groupid3
.