2014-10-29 56 views
3

我正在建立一个使用PHP的网站,我需要验证用户输入的名称是否正确。由于JavaScript是客户端,我不能完全依靠这一点,所以这里是我的服务器端功能,以验证用户名:验证用户名时出现PHP错误

function validate_name($name) { 
    $name = trim($name); // only for the purpose of debugging <---- edited comment 
    echo $name; 
    if (strlen($name) <= 1) { 
     return "small"; 
    } else if (has_numbers($name)) { 
     return "numbers"; 
    } else { 
     return true; 
    } 
} 

在此之后,因此我检查输入和显示结果:

function final_check() { 
    if (validate_name($_POST["first_name"]) == "small") { 
     echo "<span class='error'>Your first name cannot be empty</span>"; 
     return false; 
    } else if (validate_name($_POST["first_name"]) == "numbers") { 
     echo "<span class='error'>Numbers are not allowed in your first name</span>"; 
     return false; 
    } 
    return true; 
} 

当我在first_name字段中什么都没输入时,我得到空的错误信息;当我输入数字时,我收到数字错误消息。但是,当我输入一个有效的名称时,它会给我提供名称为空的错误消息。

这里的POST数据:

Array 
(
    [email] => [email protected] 
    [first_name] => qwe 
    [last_name] => wqe 
    [password] => qwe 
    [re_password] => qwe 
    [gender] => Male 
) 

输出:

Your first name cannot be empty 

任何想法,我做错了什么?在过去的一个小时里,我一直难以解决这个问题,但我一直无法找到解决方案。

+1

那么,是什么'回声$名称;'返回 – 2014-10-29 09:54:41

+0

@RenePot我把'回声$ name'有用于调试的目的。删除该部分后,错误仍然存​​在。 – 2014-10-29 09:56:11

+1

我明白了。只是想知道什么是回声 – 2014-10-29 09:56:36

回答

8
Array 
(
    [email] => [email protected] 
    [first_name] => qwe 
    [last_name] => wqe 
    [password] => qwe 
    [re_password] => qwe 
    [gender] => Male 
) 

// FIRST_NAME长度= 3

function validate_name($name) { 
    $name = trim($name); 
    echo $name; 
    if (strlen($name) <= 1) { 
     return "small"; 
    } else if (has_numbers($name)) { 
     return "numbers"; 
    } else { 
     return true;  // satisfy this case return true 
    } 
} 

和这里它变得像

function final_check() { 
    if (validate_name($_POST["first_name"]) == "small") { // if(1 == 'small') 
     echo "<span class='error'>Your first name cannot be empty</span>"; 
     return false; 
    } else if (validate_name($_POST["first_name"]) == "numbers") { 
     echo "<span class='error'>Numbers are not allowed in your first name</span>"; 
     return false; 
    } 
    return true; 
} 

如果(1 == '小')其一个字符串布尔比较这总是返回真实。

请检查this page in the manual了解问题。

+3

所以,为了解决这个问题,应该使用'==='而不是'==' – 2014-10-29 09:58:36

+0

STUPID STUPID愚蠢愚蠢!太愚蠢了,该死!我习惯了Python,忘记了三重平等,谢谢一吨,它的工作! :) – 2014-10-29 09:59:46

+2

是的! ===可以使用:) – Naincy 2014-10-29 10:01:53

1

尝试

if (validate_name($_POST["first_name"]) == "small" && !validate_name($_POST["first_name"])) { 
    echo "<span class='error'>Your first name cannot be empty</span>"; 
    return false; 
} else if (validate_name($_POST["first_name"]) == "numbers" && validate_name($_POST["first_name"])) { 
    echo "<span class='error'>Numbers are not allowed in your first name</span>"; 
    return false; 
} 

true == 'small'也将返回true

===尝试将严格匹配值

if (validate_name($_POST["first_name"]) === "small") { 
    echo "<span class='error'>Your first name cannot be empty</span>"; 
    return false; 
} else if (validate_name($_POST["first_name"]) === "numbers"=) { 
    echo "<span class='error'>Numbers are not allowed in your first name</span>"; 
    return false; 
} 
1

你的逻辑是正确的,但是,由于其他问题指出, ,具有布尔比较的字符串将返回true。

为了解决这个问题,你应该使用===代替==,所有应罚款

1

我的建议在这里修改validate_name功能,这样它会只有一个返回类型,因为它目前可以返回要么是string要么是boolean,这不是一个好的做法。

举例来说,你可以这样做:

function validate_name($name) { 
    $name = trim($name); 
    echo $name; 
    if (strlen($name) <= 1) { 
     return "small"; 
    } else if (has_numbers($name)) { 
     return "numbers"; 
    } else { 
     return "ok"; // or return ""; or whatever string you want. 
    } 
} 

而且优化代码,提高可读性,你可以改变你final_check功能,这样会有用中间variabe只需调用validate_name

function final_check() { 
    $valid = validate_name($_POST["first_name"]); 
    if ($valid == "small") { 
     echo "<span class='error'>Your first name cannot be empty</span>"; 
     return false; 
    } else if ($valid == "numbers") { 
     echo "<span class='error'>Numbers are not allowed in your first name</span>"; 
     return false; 
    } 
    return true; 
} 
-1

我想你只有final_check改变()函数

function final_check() { 
if(validate_name($_POST["first_name"])){ 
return true; 
}else{ 
    if (validate_name($_POST["first_name"]) == "small") { 
     echo "<span class='error'>Your first name cannot be empty</span>"; 
     return false; 
    } else if (validate_name($_POST["first_name"]) == "numbers") { 
     echo "<span class='error'>Numbers are not allowed in your first name</span>"; 
     return false; 
    } 
    } 
}