搜索表单php / sql多输入

时间:2017-04-26 14:58:23

标签: php html sql forms search

我的搜索表单存在问题。它只有在我使用所有4个字段时才有效,但如果一个字段为空,则while循环会回显所有表的记录。

有人可以帮帮我吗?

这是我的搜索功能的PHP代码

<?php

if (isset($_POST['cerca'])){


    $cerca_tt = $_POST['tt_carrier'];
    $cerca_risorsa = $_POST['risorsa_cerca'];
    $cerca_team = $_POST['team_cerca'];
    $cerca_linea = $_POST['linea_cerca'];


    $sql_cerca = "SELECT * FROM normal WHERE 
                tt LIKE '%".$cerca_tt."%'
                OR risorsa LIKE '%".$cerca_risorsa."%' 
                OR team LIKE '%".$cerca_team."%' 
                OR linea LIKE '%".$cerca_linea."%'";

        if($sql_cerca) {

            $trovati = mysql_query($sql_cerca); ?>

2 个答案:

答案 0 :(得分:0)

如果POST为空,则变量为空,因此所有内容都匹配'%%'

例如,如果$ cerca_tt为空。您的查询将是

   "SELECT * FROM normal WHERE tt like '%%'"

匹配所有内容。

根据POST响应创建查询。

 $sel = "SELECT * from normal";

//您需要处理查询的WHERE部分。

 if (!empty($cerca_tt)){
     $sel .= " OR tt like '%".$cerca_tt."'";
 }

等.... ///

答案 1 :(得分:0)

如果你只提供一个搜索参数,其余的是空字符串,你用%包装,你就可以有效地搜索所有内容。您需要构建查询。例如(简单):

$sqlParts = [];

if(isset($_POST['tt_carrier'])) {
    $sqlParts[] = "tt LIKE '%".$cerca_tt."%'";
}
if(isset($_POST['risorsa_cerca'])) {
    $sqlParts[] = "risorsa LIKE '%".$cerca_risorsa."%'";
}
if(isset($_POST['team_cerca'])) {
    $sqlParts[] = "team LIKE '%".$cerca_team."%'";
}
if(isset($_POST['team_cerca'])) {
    $sqlParts[] = "linea LIKE '%".$linea_cerca."%'";
}

if(!empty($sqlParts)) {
    $sql = "SELECT * FROM normal WHERE " . implode(' OR ', $sqlParts);
}