我正在尝试使用php中的搜索框我的html表单有三个选项,如下面
我想如果用户按目的选择目的数据过滤器,如果类型然后按类型过滤,如果位置然后按位置过滤,如果他选择所有类别,那么它在位置类型中过滤目的如果不匹配显示(结果不是发现!)
我使用了这些php查询但未能获得
$res="SELECT * FROM test WHERE purpose like %$_Post['purpose']% AND type like %$_Post['type']% AND location like %$_Post['location']%";
while ($row = mysql_fetch_array($res))
{
echo $row['purpose']."</br>";
echo $row['type']."<br>";
echo $row['location'];
}
但是这个查询没有逐个过滤,如果我使用OR而不是AND,则显示所有选中,然后混合找到结果,但我想在目的地中输入目的
如果没有找到显示结果未找到
请写完整查询
感谢
答案 0 :(得分:1)
$_POST
而非$_Post
,案件很重要。您需要确保您的代码是安全的,不要在不转义的情况下使用值。
$purpose = mysqli_real_escape_string($dbc, $_POST['purpose' ]);
$type = mysqli_real_escape_string($dbc, $_POST['type' ]);
$location = mysqli_real_escape_string($dbc, $_POST['location']);
编辑:删除了我的查询,因为@ Martin是正确的,这个不是。
答案 1 :(得分:0)
$dbc = mysqli_connect('host', 'user', 'password', 'database') or die('Error connecting to MySQL server');
if (isset($_POST['purpose'])) $where.= " AND purpose LIKE %". mysqli_real_escape_string($dbc, $_POST['purpose'])."%";
if (isset($_POST['type'])) $where.= " AND type LIKE %". mysqli_real_escape_string($dbc, $_POST['type'])."%";
if (isset($_POST['location'])) $where.= " AND location LIKE %". mysqli_real_escape_string($dbc, $_POST['location'])."%";
$res="SELECT * FROM test
WHERE 1=1
". ($where? $where: "");
while ($row = mysql_fetch_array($res)) {
echo $row['purpose']."</br>";
echo $row['type']."<br>";
echo $row['location'];
}