2014-11-22 38 views
2

所以我很忙這個系統來改變你的密碼,當密碼被改變時,一個綠色的方框出現,並顯示'你的密碼已被改變'。注意:使用Foreach時數組到字符串的轉換

出現錯誤時,出現一個紅色框,顯示錯誤信息,例如: 「您當前的密碼不正確」或「您的新密碼與驗證密碼不一致」。

所以,當有一個post請求,我count錯誤,如果有更多的則0,返回的錯誤是這樣的:

public function nieuwpw($username, $currentpass, $newpass, $newpassconf) 
{ 
    $this->errors[] = array(); 
    $this->succes[] = array(); 
    $query = $this->db->conn->prepare('SELECT pass FROM ht_users WHERE naam = ?'); 
    $query->bind_param('s', $username); 
    $query->execute(); 
    $query->bind_result($dbpass); 
    $query->store_result(); 
    while ($query->fetch()) { 
     if (password_verify($currentpass, $dbpass)) 
     { 
      if ($newpass === $newpassconf) 
      { 
       $newpasshash = password_hash($newpass, PASSWORD_DEFAULT); 
       $stmt = $this->db->conn->prepare('UPDATE ht_users SET pass = ? WHERE naam = ?'); 
       $stmt->bind_param('ss', $newpasshash, $username); 
       $stmt->execute(); 
       $stmt->close(); 
      } 
       else 
      { 
       $this->errors[] = 'Whoops, je 2 nieuwe wachtwoorden zijn niet gelijk.'; 
      } 
     } 
      else 
     { 
      $this->errors[] = 'Whoops, je huidige wachtwoord klopt niet!'; 
     } 
    } 
    if (count($this->errors) > 0) 
    { 
     return $this->errors; 
    } 
    $this->succes[] = 'Je wachtwoord is met success gewijzigd!'; 
    return $this->succes; 
    $query->close(); 
} 

}

,這是我用它來修改密碼的功能。以下是我如何「迴響」的錯誤:

 <?php //24 
//25 
if(isset($users->succes))//26 
{//27 
    if (count($users->succes) > 0) //28 
    {//29 
     foreach ($users->succes as $succes) {//30 
        $content = '<div id="message_succes" style="background-color:#00B200; width:100%; height:30px;"><p style="color:#fff; font-family:Ubuntu; padding:5px;">' . $succes. '</p></div>';//31 
    echo $content;//32 
//33 
      } //34 
    }//35 
}//36 
if(isset($users->errors))//37 
{//38 
    if (count($users->errors) > 0) //39 
    {//40 
     foreach ($users->errors as $errors) {//41 
        $content = '<div id="message_succes" style="background-color:#ff0033; width:100%; height:30px;"><p style="color:#fff; font-family:Ubuntu; padding:5px;">' . $errors. '</p></div>';//42 
    echo $content;//43 
//44 
      } //45 
    }//46 
}//47 
//48 
?> //49 

而且還在,甚至儘管我只能隨聲附和錯誤或成功的消息,如果有更多的則1,我得到這些錯誤:

Notice: Array to string conversion in C:\xampp\htdocs\pages\page16.php on line 31 


Notice: Array to string conversion in C:\xampp\htdocs\pages\page16.php on line 42 

在第二個代碼塊中,我對行進行了編號,以便您可以看到哪些行會拋出錯誤。

當做var_dump,我得到下面的輸出:

array(2) { [0]=> array(0) { } [1]=> string(41) "Whoops, je huidige wachtwoord klopt niet!" }

而且,我覺得很奇怪的是,它顯示紅色的錯誤框兩次,連壽沒有任何成功消息,它也顯示了綠色框...

我希望這將被視爲一個完整的問題,有人可以幫助我解決這個問題。謝謝。

回答

1

我認爲錯誤的原因是您發佈的第一個代碼塊的3線和4:

$this->errors[] = array(); 
$this->succes[] = array(); 

嘗試改變這些線路分爲:

$this->errors = array(); 
$this->succes = array(); 

在你的代碼創建一個數組並立即將該數組的第一個元素設置爲數組。你可以看到在你發佈的var_dump上:

array(2){[0] => array(0){} [1] => string(41)「哎呀,je huidige wachtwoord klopt niet!」 }

稍後,當您循環遍歷$ errors或$ succes數組時,循環的第一次迭代將返回您設置爲$ errors或$ succes數組的第一個元素的數組。然後你試着迴應這個數組,php會告訴你正在迴應一個數組。

我的建議修補程序是否正常工作,您是否看到代碼爲什麼會中斷?

PS:

  1. 儘量保持所有的代碼在英語,所以它更容易對非講荷蘭語的人理解你的代碼。
  2. 以下字符串是用荷蘭語寫的:'w wachtwoord遇到成功gewijzigd!'。在荷蘭語中,'成功'是用'1'寫成的,所以它應該是''w wachtwoord會遇到成功!'。

祝你好運!

1

你有沒有試過像這樣使用它?

$this->errors = array(); 
$this->succes = array(); 

,如果任何錯誤

foreach ($users as $user) { 
     if(isset($user->succes)) 
     { 
      $content = '<div id="message_succes" style="background-color:#00B200; width:100%; height:30px;"><p style="color:#fff; font-family:Ubuntu; padding:5px;">' .$user->succes. '</p></div>'; 
      echo $content; 

     } 
     if(isset($user->errors)) 
     { 
      $content = '<div id="message_succes" style="background-color:#ff0033; width:100%; height:30px;"><p style="color:#fff; font-family:Ubuntu; padding:5px;">' . $user->errors. '</p></div>'; 
      echo $content; 

     } 
    } 

評論...

相關問題