搜索查询在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';
}
}
?>