PHP:空间问题

PHP:空间问题,php,Php,(提出一个新问题,而不是在我的另一个问题中提出两个“问题”) 我正在为我的用户制作一个PM系统 在收件人字段中键入全名。当你提交时,我想确保它是他发送给的正确用户 我有一个空间问题。如果我只在收件人字段中输入一个空格,它将返回表中我的“你指的是谁?”中的所有用户名。我如何防止这种情况发生,而不运行其为空或仅包含空格的查询?(好办法) 这是我的密码: $mot = mysql_real_escape_string($_POST['mottagare']); list($firstname, $la

(提出一个新问题,而不是在我的另一个问题中提出两个“问题”)

我正在为我的用户制作一个PM系统

在收件人字段中键入全名。当你提交时,我想确保它是他发送给的正确用户

我有一个空间问题。如果我只在收件人字段中输入一个空格,它将返回表中我的“你指的是谁?”中的所有用户名。我如何防止这种情况发生,而不运行其为空或仅包含空格的查询?(好办法)

这是我的密码:

$mot = mysql_real_escape_string($_POST['mottagare']);
list($firstname, $lastname) = array_map('ucfirst', explode(' ', $mot, 2));
$qur = mysql_query("
 SELECT id, firstname, lastname, 
 (firstname = '$firstname' AND lastname = '$lastname') AS full FROM users 
 WHERE (firstname = '$firstname' AND lastname='$lastname') 
 OR (firstname LIKE '$firstname%' AND lastname LIKE '$lastname%')
 OR firstname LIKE '$firstname%' OR lastname LIKE '$firstname%'
 ORDER BY (firstname = '$firstname' AND lastname='$lastname') DESC");

 if(mysql_num_rows($qur) == 1){

 $get = mysql_fetch_array($qur);
    if($get["full"] == 1){
    echo $get["id"];
    }else{
     echo "Did you mean: ".$get["firstname"]." ".$get["lastname"]." ?";
    }
 }elseif(mysql_num_rows($qur) > 1){
    while($get = mysql_fetch_array($qur)) {
       $name[] = $get["firstname"]." ".$get["lastname"];
   }

   if(count($name) > 1) {
       echo 'Who did you mean?<br>';
   } else {
       echo 'Did you mean: ';
   }
   echo implode('<br>', $name);

 } 
$mot=mysql\u real\u escape\u字符串($\u POST['mottagare']);
列表($firstname,$lastname)=数组映射('ucfirst',explode('',$mot,2));
$qur=mysql\u查询(“
选择id、firstname、lastname、,
(firstname='$firstname'和lastname='$lastname')作为来自用户的完整名称
其中(firstname='$firstname'和lastname='$lastname')
或(firstname如“$firstname%”和lastname如“$lastname%”)
或类似于“$firstname%”的名字或类似于“$firstname%”的姓氏
订单编号(firstname='$firstname'和lastname='$lastname')DESC);
if(mysql_num_rows($qur)==1){
$get=mysql\u fetch\u数组($qur);
如果($get[“full”]==1){
echo$get[“id”];
}否则{
echo“你的意思是:“.$get[“firstname”]。$get[“lastname”]。”;
}
}elseif(mysql的行数($qur)>1){
而($get=mysql\u fetch\u数组($qur)){
$name[]=$get[“firstname”]。“$get[“lastname”];
}
如果(计数($name)>1){
echo“你指的是谁?”;
}否则{
echo“你是说:”;
}
回声内爆(“
”,$name); }
在执行查询之前,只需检查
$firstname
是否为
'

在执行查询之前,只需检查
$firstname
是否为
'

在脚本的第一行之后添加类似的内容:

$mot = trim($mot);
if(strlen($mot) < 1)
    return;
$mot=修剪($mot);
如果(斯特伦($mot)<1)
返回;

trim
将删除所有前导空格和尾随空格,接下来的几行检查是否没有输入任何空格,如果没有,则返回。

在脚本的第一行之后添加如下内容:

$mot = trim($mot);
if(strlen($mot) < 1)
    return;
$mot=修剪($mot);
如果(斯特伦($mot)<1)
返回;

trim
将删除所有前导空格和尾随空格,下一行检查是否没有输入任何空格,如果没有,则返回。

如果
trim($firstname)
为空,则不要在SQL查询中放入类似“$firstname%”的
内容

如果
trim($firstname)
为空,则不要在SQL查询中放入类似“$firstname%”的
内容

使用该函数去除所有空白,然后检查字符串的长度,如果它没有至少一个字符,则不执行搜索

if (strlen(trim($name)) > 0) {
   // perform search here
}
使用函数去除所有空白,然后检查字符串的长度,如果它没有至少一个字符,则不执行搜索

if (strlen(trim($name)) > 0) {
   // perform search here
}

首先可以使用trim()函数删除所有空格。 完成后,您可以使用empty()函数检查字符串是否为空,该函数检查变量是否为NULL或空字符串(“”)。
如果($string=='')
您可以首先使用trim()函数删除所有空格,那么它至少比放置
更优雅。
完成后,您可以使用empty()函数检查字符串是否为空,该函数检查变量是否为NULL或空字符串(“”)。


至少它比放一个
if($string=='')更优雅

这个答案让我想起了。。。谁将负责
'
?@delnan:调用
explode()
会发生错误,因为它不能覆盖所有情况。考虑到拆分与修剪相比所产生的开销,使用explode()函数对作业来说是错误的。。。谁将负责
'
?@delnan:调用
explode()
会发生错误,因为它不能覆盖所有情况。考虑到拆分与修剪相比所产生的开销,使用explode()函数对作业来说是错误的。检查字符串长度是最好的方法,在运行任何命令之前,3是一个很好的数字。您还需要在其中进行修剪,以确保不只是空间。3是一个很好的数字,但对于搜索一个小列表,您可能希望将其保留为1,这完全取决于数据。像这样提前返回可能会使您很难了解这么大的代码块中发生了什么。的确,最好将其余代码放在else语句中。这完全取决于这是在函数中完成的还是在函数本身完成的,以及其余代码的布局方式。这就是我为什么这么说的原因。我真的不明白你的网络是指什么,但我没有一个小的用户列表,但确定大。那么这不好吗?检查字符串长度是最好的方法,在运行任何命令之前,3是一个很好的数字。您还需要在其中进行修剪,以确保不只是一个空格。3是一个很好的数字,但对于搜索一个小列表,您可能希望将其保留为1,这完全取决于数据。像这样提前返回可能会使您很难了解这么大的代码块中发生了什么。的确,最好将其余代码放在else语句中。这完全取决于这是在函数中完成的还是在函数本身完成的,以及其余代码的布局方式。这就是我为什么这么说的原因。我真的不明白你的网络是指什么,但我没有一个小的用户列表,但确定大。那么这很糟糕吗?你的查询会很慢你的查询会很慢slowI不会拒绝投票,但是如果它是空的,最好不要执行搜索,因为它会保存对数据库的点击。@Soviut:搜索是在两个变量上进行的。一个变量为空并不意味着另一个为空。当然,如果既没有firstname也没有lastname,则不应该在