PHP奇怪的比较

PHP奇怪的比较,php,Php,我在注册表中有两个输入,一个是登录,一个是密码。调用AJAX后,我尝试验证这些数据,并使用以下函数: function test_input($data) { if( $data == $_POST["login"] && $data == "" ){ $GLOBALS["message"] .= "<p>Empty login.</p>"; return; } elseif( $data == $_POST["pwd"] &a

我在注册表中有两个输入,一个是登录,一个是密码。调用AJAX后,我尝试验证这些数据,并使用以下函数:

function test_input($data) {

if( $data == $_POST["login"] && $data == "" ){
    $GLOBALS["message"] .= "<p>Empty login.</p>";
    return;
    }

elseif( $data == $_POST["pwd"] && $data == "" ){
    $GLOBALS["message"] .= "<p>Empty password.</p>";
    return;
    }
echo 'Good job.';
}
当我用其中一个或两个写东西时,验证是可以的。为什么?

编辑-缺少代码:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $login = test_input($_POST["login"]);
  $pwd = test_input($_POST["pwd"]);
if($message!= ""){
    echo $message;
    }
  else{
    echo 'OK';
    }
}

也许重构它,比如:

function test_input($data, $field) {
    if( $field == "login" && $data == "" ){
        return "<p>Empty login.</p>";
    }
    elseif( $field == "pwd" && $data == "" ){
        return "<p>Empty password.</p>";
    }
    echo 'Good job.';
}

那么什么是
$data
?它的实际目的是什么?您如何调用
test\u input()
函数?您没有使用
test\u input($\u POST[“login”])调用它;测试输入($_POST[“pwd”])
是吗?if语句的开头应该有两个等号吗?@MarkBaker这样称呼不好?你写的那样称呼函数肯定是错误的谢谢!但是为什么我的代码是错误的呢?为什么我不能使用$\u POST['something']?因为在您的函数版本中,没有什么可以区分您传递的
$data
值是
$\u POST[“login”]
还是
$\u POST[“pwd”]
值,除非它们是正确的,并且不同。。。当你在这里检查不正确的值时,它们不匹配。拿起笔和纸(或调试器),逐行检查代码,查看值并计算出在函数的每个阶段执行的比较。。。在你有足够的经验在脑子里做之前,在纸上做会更容易
function test_input($data, $field) {
    if( $field == "login" && $data == "" ){
        return "<p>Empty login.</p>";
    }
    elseif( $field == "pwd" && $data == "" ){
        return "<p>Empty password.</p>";
    }
    echo 'Good job.';
}
$message = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $message .= test_input($_POST["login"], "login");
    $message .= test_input($_POST["pwd"], "pwd");
    if($message!= ""){
        echo $message;
    }
    else{
        echo 'OK';
    }
}