Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
搜索查询在PHP中不起作用_Php_Mysql - Fatal编程技术网

搜索查询在PHP中不起作用

搜索查询在PHP中不起作用,php,mysql,Php,Mysql,当我使用空字段(字符串)搜索时,我的搜索查询不起作用,它返回所有结果 代码如下: if(isset($_GET['submit1'])) { $skills=trim($_GET['skillset']); $city=trim($_GET['city']); $state=trim($_GET['state']); $expinmonth=trim($_GET['expinmonth']); $result = mysqli_query($dbc,"s

当我使用空字段(字符串)搜索时,我的搜索查询不起作用,它返回所有结果

代码如下:

if(isset($_GET['submit1']))
{
    $skills=trim($_GET['skillset']);
    $city=trim($_GET['city']);
    $state=trim($_GET['state']);
    $expinmonth=trim($_GET['expinmonth']);

    $result = mysqli_query($dbc,"select * from seeker where (skillset like '%$skills%') or (city like '%$city%') or (state like '%$state%') or  (expinmonth like '%$expinmonth%')");          

    if(!mysqli_num_rows($result) == 0)
    {
        while($data = mysqli_fetch_array($result))
        { 
            echo .$data['fname'].' '.$data['lname']; 
        }
    }
    else 
    {
        echo 'No Results';
    }
}

试着这样做…只是在你的查询中做一点改变

if(isset($_GET['submit1']))
{
    $skills=trim($_GET['skillset']);
    $city=trim($_GET['city']);
    $state=trim($_GET['state']);
    $expinmonth=trim($_GET['expinmonth']);

    $result = mysqli_query($dbc,"select * from seeker where (skillset like '%$skills%' and skillset <> '') or (city like '%$city%' and city <> '') or (state like '%$state%' and state <> '') or  (expinmonth like '%$expinmonth%' and expinmonth <> '')");          

    if(!mysqli_num_rows($result) == 0)
    {
        while($data = mysqli_fetch_array($result))
        { 
            echo .$data['fname'].' '.$data['lname']; 
        }
    }
    else 
    {
        echo 'No Results';
    }
}
if(isset($\u GET['submit1']))
{
$skills=trim($_GET['skillset']);
$city=trim($_GET['city']);
$state=trim($_GET['state']);
$expinmonth=trim($_GET['expinmonth']);
$result=mysqli_query($dbc,“从搜索器中选择*”,其中(技能集,如“%$SKILKS%”和技能集“”)或(城市,如“%$city%”和城市“”),或(状态,如“%$state%”和状态“”),或(expinmonth,如“%$expinmonth%”和expinmonth“”);
如果(!mysqli_num_rows($result)==0)
{
而($data=mysqli\u fetch\u数组($result))
{ 
echo.$data['fname'].'.$data['lname'];
}
}
其他的
{
回应“没有结果”;
}
}

我怀疑您试图做的是在跳过字段时检查空白字段。在这种情况下:-

<?php

if(isset($_GET['submit1']))
{
    $skills = mysqli_real_escape_string($dbc, trim($_GET['skillset']));
    $city = mysqli_real_escape_string($dbc, trim($_GET['city']));
    $state = mysqli_real_escape_string($dbc, trim($_GET['state']));
    $expinmonth = mysqli_real_escape_string($dbc, trim($_GET['expinmonth']));

    $result = mysqli_query($dbc,"select * 
                                from seeker 
                                where ".(($skills == '' ) ? "skillset = ''" : "skillset like '%$skills%'")."
                                or ".(($city == '' ) ? "city = ''" : "city like '%$city%'" )."
                                or ".(($state == '' ) ? "state = ''" : "state like '%$state%'")."
                                or ".(($expinmonth == '' ) ? "expinmonth = ''" : "expinmonth like '%$expinmonth%'")." ");          

    if(!mysqli_num_rows($result) == 0)
    {
        while($data = mysqli_fetch_array($result))
        { 
            echo .$data['fname'].' '.$data['lname']; 
        }
    }
    else 
    {
        echo 'No Results';
    }
}

?>

您需要检查字段。如果是强制的,您需要警告用户,如果不是,您可以将通配符搜索作为空搜索。这不是强制性的,意味着为该列显示所有结果显示表
搜索者
中包含的一些样本数据,以及为
技能,
城市
尝试的查询提供了哪些参数,
state`和
expinmonth
如果有人跳过所有字段,则不会有结果,如果任何字段有数据,则结果应根据字段。您需要检查字符串是否为空:if(empty($\u GET['skillset']))等等。。如果其中一些输入是空的,只显示“无结果”消息您没有指定搜索应如何准确工作,当字段包含空字符串时,这是否意味着用户不关心它包含的内容,或者它应该与该
空字符串
完全匹配?检查需要以另一种方式进行(即检查
$skills、$city、$state或$expinmonth
是否为空字符串,而不是列内容本身,这是因为
如“%$someVar%”
如果
$someVar
为空字符串,则始终会返回true,因此这将导致
如“%%”
匹配我认为的任何字符串,因为变量t空字符串不应添加where条件,因为在大多数情况下,当搜索中未给出字段(空字符串)时,它意味着“我不关心该字段的内容”,因此我将重写例如
”(($skills='')“skillset=”:“skillset like“%$skills%”。”
($skills='')“?”skillset=skillset:“类似于“%$skills%”的skillset。”
这还需要使用
重写为另一个逻辑;但是这两种方法都只是假设,因为OP没有指定搜索逻辑在此情况下的工作方式case@DrCopyPaste-我不确定。完全有可能您的建议是正确的,但没有OP的更多细节,我们无法知道。如果LUE是不相关的,因此可能最容易将OR放入内联IFs第一个结果中,而只将“”放入第二个结果中(即-“.”($state!='')“或类似“%$state%”的状态:“).”,尽管这需要对第一个结果中的WHERE关键字进行一些微调。
<?php

if(isset($_GET['submit1']))
{
    $skills = mysqli_real_escape_string($dbc, trim($_GET['skillset']));
    $city = mysqli_real_escape_string($dbc, trim($_GET['city']));
    $state = mysqli_real_escape_string($dbc, trim($_GET['state']));
    $expinmonth = mysqli_real_escape_string($dbc, trim($_GET['expinmonth']));

    $result = mysqli_query($dbc,"select * 
                                from seeker 
                                where 1=2
                                ".(($skills != '' ) ? " OR skillset like '%$skills%'" : "")."
                                ".(($city != '' ) ? " OR city like '%$city%'" : "")."
                                ".(($state != '' ) ? " OR state like '%$state%'" : "")."
                                ".(($expinmonth != '' ) ? " OR expinmonth like '%$expinmonth%'" : "")." ");          

    if(!mysqli_num_rows($result) == 0)
    {
        while($data = mysqli_fetch_array($result))
        { 
            echo .$data['fname'].' '.$data['lname']; 
        }
    }
    else 
    {
        echo 'No Results';
    }
}

?>