Jquery通过AJAX捕获字段输入和POST到.php。这些字段是'密码'和' confirmmpassword'
PHP将使用$ _POST ['密码']和$ _POST [' confirmmpassword']作为参数调用对象的方法
该方法具有以下检查:
} else if ($password !== $confirmPassword){
$response = 'Passwords do not match';
return $response;
}
无视我输入的内容,总是"密码与#34;不匹配。
我将值打印到error_log()只是为了安全起见,它们是相同的,即不会发生修改。
有没有人知道这种行为是什么?
UPD 1
我做了一些测试,似乎!==检查工作正常BEFORE变量作为参数传递给对象的方法。但是,在我将这些值作为参数传递给一个类(通过' require'添加到页面)后,发生了一些可怕的事情......
UPD 2
以下是完整代码:
a)Jquery
var signupRegister = function(){
var username = $('#signup-username').val();
var email = $('#signup-email').val();
var password = $('#signup-password').val();
var confirmPassword = $('#signup-confirmpassword').val();
console.log(password);
console.log(confirmPassword);
var data = {action:'signup', username:username, email:email, password:password, confirmPassword:confirmPassword};
$.ajax({
url: 'php/ajaxhandler.php',
dataType: 'json',
type: 'post',
data: data,
success: function(response){
console.log(response.msg);
}
});
};
b)Ajax处理程序(注意注释掉的代码可以工作!)
if(isset($_POST['action']) && $_POST['action'] === 'signup'){ //REQUEST 1: validate client input and add player to DB
$player = new Player();
$db = new Database();
/*
if($_POST['password'] !== $_POST['confirmPassword']){
$json['msg'] = 'mismatch';
echo json_encode($json);
} else {
$json['msg'] = 'match';
echo json_encode($json);
}
*/
$result = $player -> validateAndSignup($db, $_POST['username'], $_POST['email'], $_POST['password'], $_POST['confirmPassword']);
if ($result){
$json['msg'] = $result;
echo json_encode($json);
} else {
error_log('Error in $player -> validateAndSignup()');
}
c)Player类的实际方法
public function validateAndSignup($db, $username, $email, $password, $confirmPassword){
error_log($password);
error_log($confirmPassword);
if($username === "" || $email == "" || $password = "" || $confirmPassword === ""){
$response = 'Username, email or password missing';
return $response;
} else if (strcmp($password, $confirmPassword) !== 0){
$response = 'Passwords do not match';
return $response;
} else if(preg_match("/[^A-Za-z0-9]/", $username)){
$response = 'Invalid characters in username';
return $response;
}
}
答案 0 :(得分:2)
添加完整代码后,问题很明显:
在这一行
if($username === "" || $email == "" || $password = "" || $confirmPassword === ""){
您将$password
设置为""
。
检查$confirmedPassword
的空字符串不匹配。
<强>加成:强>
使用isset()
检查字符串是否为空而不是===
。 (Explanation here)
答案 1 :(得分:1)
不应该直接检查字符串,而是可以使用strcmp()
来比较两个字符串。 strcmp()
是二进制安全的。
strcmp("StackOverflow", "StackOverflow")
将返回0
,因为字符串相等。
strcmp("stackoverflow", "StackOverflow")
将返回<0
;如果第二个参数更大,则返回>0
。
在你的情况下,你会想要做这样的事情:
if(strcmp($password, $confirmedPassword) === 0) {
echo "Password are equal!";
}