我正在尝试根据发布的值获取数据库。这是一个属性网站,一个名为attr的col具有json数据。这就是我获取数据的方式
if(isset($_POST['search'])){
$proptpe = $_POST['proptype'];
$q= mysqli_query($connect,"SELECT * FROM properties");
$savemyval = array();
while($row= mysqli_fetch_assoc($q)) {
$data = json_decode($row['attr']);
if($proptpe == $data->proptype) {
$savemyval[] = $row['id'];
}
$myquery = '';
foreach($savemyval as $arr){
$myquery.= '`id` = '.$arr.' OR ';
}
$myquery = rtrim($myquery, " OR ");
$type = $_POST ['optionsRadios'];
if(isset($_POST['unit_type'])){
$unit_type = $_POST['unit_type'];
}
else {
$unit_type = '';
}
$min_price = $_POST['min_price'];
$max_price = $_POST['max_price'];
$min_bedroom = $max_bedrooms = '';
if(isset($_POST['res_min_bed'])){
$min_bedrooms=$_POST['res_min_bed'];
}
else{
$min_bedrooms='';
}
if(isset($_POST['res_max_bed'])){
$max_bedrooms = $_POST['res_max_bed'];
}
else{
$max_bedrooms='';
}
if(isset($_POST['com_min_size'])){
$min_size=$_POST['com_min_size'];
}
else{
$min_size='';
}
if(isset($_POST['com_max_size'])){
$max_size=$_POST['com_max_size'];
}
else{
$max_size='';
}
$query= "SELECT * FROM properties WHERE 1=1";
if($type != ""){
$query.=" AND type= '{$type}'";
}
if($unit_type!=""){
$query.=" AND unit_type='$unit_type'";
}
if(($min_price!="") && ($max_price!="")){
$query.=" AND price BETWEEN {$min_price} AND {$max_price} ";
}
if($proptpe){
if($myquery != ''){
$query.=" AND ".$myquery;
}
}
if($min_bedrooms != "" && $max_bedrooms != ""){
if($myquery != ''){
$query.=" AND ".$myquery;
}
}
if(($min_size!="") && ($max_size!="")){
$query.=" AND size BETWEEN {$min_size} AND {$max_size}";
}
if($query==FALSE){
echo mysqli_error($connect);
die;
}
else {
$result = mysqli_query($connect,$query);
}
echo $query;
die;
}
当我打印查询时,我只从商业类型的数据库获得第一条记录,对于住宅类型我获得所有可用的记录,
如果我为发布的值执行print_r,这就是我得到的
Array
(
[optionsRadios] => sale
[unit_type] =>
[min_price] =>
[max_price] =>
[res_min_bed] =>
[res_max_bed] =>
[proptype] => commercial
[search] => Search
)
数组([0] => 42)SELECT * FROM属性WHERE 1 = 1 AND type ='sale'和
id
= 42
需要你的帮助
答案 0 :(得分:1)
您正在做的是以下内容:
For all database records
If proptype is what you selected in form then
Accumulate ID in array savemyval
Immediately loop through savemyval
Generate some SQL
...
die() statement
这里几个问题:
答案 1 :(得分:0)
我的建议是重新开始;这段代码构造不良,有很多错误。如果您想继续尝试修补它,我会在下面粘贴我的反馈:
您的代码存在很多问题。我抓到了其中一些,但可能会有更多。
使用以下行将OR
AND
附加到$myquery
时,您的$query
和$query.=" AND ".$myquery;
条款之间没有分开:
id=1 OR id=2...
您应该将不同的部分包装在括号中。不要将查询的ID部分写为id IN (1,2...)
,而是使用foreach($savemyval as $arr){
$myquery.= '`id` = '.$arr.' OR ';
}
$myquery = rtrim($myquery, " OR ");
替换:
$myquery = "`id` IN (".implode(",",$savemyval).")";
使用:
$min_bedroom = $max_bedrooms = '';
稍后你有这一行:
$min_bedrooms
我认为你的意思是复数$myquery
。
稍后您将$query
添加到if($proptpe){
if($myquery != ''){
$query.=" AND ".$myquery; // append $myquery here
}
}
if($min_bedrooms != "" && $max_bedrooms != ""){
if($myquery != ''){
$query.=" AND ".$myquery; // do the same here??
}
}
两次。我不确定原因:
AND bedroom BETWEEN $min_bedrooms and $max_bedrooms
我认为你的意思是if($query==FALSE){
echo mysqli_error($connect);
die;
}
。
后来你写道:
false
我不明白为什么它会等于$query
?此时if(mysqli_query($connect,$query)===false) die(mysqli_error($connect));
只是一个字符串;你从未执行过查询。你是说这个吗?
eg:
------------------------
| Program | Module |
------------------------
| I | 1,2,3 |
------------------------
| II | 2, 3 |
------------------------
| III | 1,3 |
------------------------
无论如何这只是一种品味。我的建议。重新开始。