我现在有这个:
if(isset($_POST["search"]) && !empty($_POST["search"])) {
$full_name = mysql_real_escape_string($_POST["search"]);
$sex = mysql_real_escape_string($_POST["sex"]);
list($firstname, $lastname) = array_map('ucfirst', explode(' ', $full_name));
$query = "SELECT firstname, lastname, id, user_name, sex, last_access, bostadsort FROM users WHERE (firstname LIKE '$firstname' OR lastname LIKE '$lastname') AND sex = '$sex'";
$result1 = mysql_query($query) or die(mysql_error());
$count = mysql_num_rows($result1);
while($get = mysql_fetch_array ($result1)){
echo $get["firstname"] . " " .$get["lastname"]."<br>";
}
}
这是我的搜索查询。现在,该表单称为“搜索全名”。您键入,然后它拆分为$ firstname,$ lastname。
效果很好,没问题。
虽然如果你只输入一个用户的LASTNAME,因为也许你不记得用户的名字,那么这段代码会将它作为名字,因为所有的空格都是名字(list()行),然后把它放进去在$ firstname中没有任何结果,因为没有姓氏的名字。
我该如何解决这个问题?如果你按名字搜索它也可以正常使用全名,但不仅仅是姓氏。任何智能解决方案?
答案 0 :(得分:2)
如果我理解正确,这是最简单的解决方案:
list($firstname, $lastname) = array_map('ucfirst', explode(' ', $full_name, 2));
if (!$lastname) $lastname = $firstname;
编辑:为爆炸线添加了限制。
答案 1 :(得分:2)
您可以构建一系列条件:
史密斯变成了:
SELECT * FROM table WHERE (firstname='smith' OR lastname='smith') ....
约翰史密斯成了:
SELECT * FROM table WHERE (firstname='john' OR lastname='john' OR firstname='smith' OR lastname='smith') ....
如果这不符合您的喜好,那么您可以分解搜索字词,这样您就可以单独输入名字和姓氏。
答案 2 :(得分:1)
搜索两个(或更多)列表项,因为名称可能包含空格并查找唯一结果。
$arr_name= explode(' ', $full_name);
foreach($arr_name as $name){
$query = "SELECT firstname, lastname, id, user_name, sex, last_access, bostadsort FROM users WHERE (firstname LIKE '$name' OR lastname LIKE '$name') AND sex = '$sex'";
$result1 = mysql_query($query) or die(mysql_error());
...
}
答案 3 :(得分:1)
if (!empty($_POST["search"])) {
$name = mysql_real_escape_string($_POST["search"]);
$sex = mysql_real_escape_string($_POST["sex"]);
$query = "SELECT firstname, lastname, id, user_name, sex, last_access, bostadsort
FROM users
WHERE (firstname = '$name'
OR lastname = '$name'
OR CONCAT(firstname, lastname) = '$name'
OR CONCAT(lastname, firstname) = '$name')
AND sex = '$sex'";
$result1 = mysql_query($query) or die(mysql_error());
$count = mysql_num_rows($result1);
while ($get = mysql_fetch_array($result1)){
echo $get["firstname"] . " " . $get["lastname"] . "<br>";
}
}
我只是检查搜索输入是第一个名字,姓氏,名字和姓氏,还是姓氏和名字。
PS:这个版本的另一个好处是它会找到像Milhouse van Houten
这样的名字。您的原始版本(以及许多此处提议的版本)无法处理此案例。他们会寻找Milhouse
和van
。
PPS:您可能为数据库选择了*_ci
归类。因此字符串比较将不区分大小写:您不需要ucfirst
。