2016-11-19 28 views
0

將相同的值視爲不同,Jquery通過AJAX捕獲字段輸入和POST到.php。這些字段是「密碼」和「confirmpassword」通過!==

PHP會調用對象與$ _ POST [「密碼」]和$ _ POST方法[「confirmpassword」]作爲參數

的方法有以下檢查其中包括:

} else if ($password !== $confirmPassword){ 
     $response = 'Passwords do not match'; 
     return $response; 

     } 

不管我輸入的迴應是總是「密碼不匹配」。

我將error_log()的值打印在安全的一面,它們是相同的,即不會發生任何修改。

有沒有人知道這是什麼行爲?

UPD 1

我做了一些更多的測試,它似乎是!== BEFORE變量作爲參數傳遞給對象的方法檢查工作正常。然而,當我通過這些值作爲參數傳遞給一類什麼可怕的事情發生了......

UPD 2

這裏(通過「需要」的頁面添加的)是全碼:

一)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()'); 
    } 

三)播放器類

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

有問題,你寫了$ _POST ['密碼']但在你的代碼中,我注意到你使用的是$密碼。你是否初始化'$ password'變量 – georoot

+0

@ georoot我直接使用$ _POST []作爲參數 – Vadimster

+0

在閱讀你的編輯之後我得到了這個。我猜你正在改變require腳本中的變量數據。你可以在這裏發佈腳本嗎?同時粘貼前後需要的變量轉儲 – georoot

回答

2

加入您的完整代碼後的問題是清楚的:

在這一行

if($username === "" || $email == "" || $password = "" || $confirmPassword === ""){ 

您正在設置$password""

根據$confirmedPassword檢查空字符串不匹配。

獎勵: 使用isset()檢查一個字符串是空的,而不是===。 (Explanation here

+0

OMG我現在感到非常尷尬:$ thanx a million!need to sleep and take some rest ... – Vadimster

1

直接檢查字符串的實際方法不應該做的事,而是您可以使用strcmp()來比較兩個字符串。 strcmp()是二進制安全的。

  1. strcmp("StackOverflow", "StackOverflow")將返回0作爲字符串相等。

  2. strcmp("stackoverflow", "StackOverflow")如果第一個參數小於第二個參數將返回<0如果第二個參數較大則返回>0

你的情況,你會想要做這樣的事情:

if(strcmp($password, $confirmedPassword) === 0) { 
    echo "Password are equal!"; 
} 
+0

不幸的是,這不起作用:(我認爲它們作爲參數發送時值發生了變化。沒有其他代碼在路上觸及它們。 – Vadimster

+0

@Vadimster然後我會檢查是否有空格附加或前綴,或任何其他字符會混淆這個 – Empty2k12

+0

我已經添加了代碼來說明這是處理值的唯一代碼。其他代碼,因爲這是我迄今爲止所做的所有事情。 – Vadimster