2017-02-23 65 views
0

对不起,我的英文很弱.... 如何从数据库SQL中搜索多个值因此,有任何值。 我可以搜索名称& &家人在一起,但 我想,当用户搜索姓名及家庭正确留空返回结果 我怎么能如果您想寻找写这篇搜索多个值如果存在

if (isset($_POST['searchname']) || isset($_POST['searchfamily'])) { 
    $sql = "select * from myinfo WHERE name='{$_POST['searchname']}' && family='{$_POST['searchfamily']}' ORDER BY id DESC"; 
} 
else { 
    $sql = "select * from myinfo ORDER BY id DESC"; 
} 
+3

,你尝试过什么? – Option

+0

'像'%jones%'之类的名字或'%jones%'之类的家庭' – MonkeyZeus

+0

您可以[SQL注入](http://php.net/manual/en/security.database.sql-injection。 PHP),并且应该真正使用[Prepared Statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)而不是串联你的查询。特别是因为你没有逃避用户输入! –

回答

0

都那么你需要改变你也是。而在查询更改&&and

if (isset($_POST['searchname']) && isset($_POST['searchfamily'])) { 

$sql = "select * from myinfo WHERE `name`='{$_POST['searchname']}' AND family='{$_POST['searchfamily']}' ORDER BY id DESC"; 
    } 
else { 

$sql = "select * from myinfo ORDER BY id DESC"; 

} 

编辑

根据您的评论试试这个:

if (isset($_POST['searchname']) || isset($_POST['searchfamily'])) { 
    $where=""; 
    if(isset($_POST['searchname'])) 
    $where=" WHERE `name`='{$_POST['searchname']}'"; 
    if(isset($_POST['searchfamily'])) 
    { 
    if($where=="") 
     $where=" WHERE family='{$_POST['searchfamily']}'"; 
    else 
     $where=" AND family='{$_POST['searchfamily']}'"; 
    } 
    $sql = "select * from myinfo $where ORDER BY id DESC"; 
} 
else { 

    $sql = "select * from myinfo ORDER BY id DESC"; 

} 
+0

你错过了一个重要的部分;-)'name =' – Option

+0

是的编辑它谢谢。 :) –

+0

我想如果搜索名称或搜索家庭或两者....工作正常...这只鳕鱼当进入纳玛和家人在一起,但我只搜索名称这不工作 – Toprex

0

你的3个主要问题在这里..

第一个是WHERE name=现在.. name已被mysql使用,因此您不应该使用但是它。如果你使用它运行它,就像这样:

WHERE `name`= 

你应该总是反引号的数据库表和列,使生活在长途更容易。

您使用&&的第二个问题是,它应该是AND

第三个是你不应该把你的变量直接进入你的查询为你敞开的SQL注入。

现在我对你使用$mysqli为您的变量但是假设运行,这可能需要调整,以适应您使用的是正确的变量:哪里是你的代码

if (isset($_POST['searchname']) || isset($_POST['searchfamily'])) { 

    $searchName = $_POST['searchname']; 
    $family = $_POST['searchfamily']; 

    $sql = $mysqli->prepare("select * from `myinfo` WHERE `name` = ? OR `family`= ? ORDER BY `id` DESC"); 
    $sql->execute([$searchName, $family]); 
} else { 

    $sql = $mysqli->prepare("select * from `myinfo` ORDER BY `id` DESC"); 
    $sql->execute(); 

} 
+0

它确实与我的代码无关。只有当双方输入最后名字和名字时,这才是真实的...... – Toprex

+0

你在问什么是错的..我们指出了什么是错的,然后你争辩它呢?为什么问一开始呢? – Option

+0

我想如果搜索名称或搜索家庭或两者....工作正常 – Toprex