2009-09-23 47 views
0

更新:我自己解決了這個問題,答案如下。繼續...

我有一個更新您的帳戶使用PHP和MySQL的表單。提交時,它將所有$ _POST變量分配給新的user()對象,然後在SQL中運行UPDATE查詢的用戶對象上執行update()方法。

表格顯然默認爲所有用戶的信息,除了密碼,我不預先填寫。除非他們想更改密碼,否則它是空白的。

如果我沒有采取任何措施解決此問題,則每個帳戶更新都會將該人的密碼重置爲「」,因爲該字段在提交時爲空。那會很糟糕。因此,要解決這個問題,我添加以下代碼:

if(empty($_POST['password']) || is_null($_POST['password']) || !isset($_POST['password']) || $_POST['password'] == "") { 
     $user->hashed_password = $edituser->hashed_password; 
    } else { 
     $password = $database->escape_value($_POST['password']); 
     $user->hashed_password = md5($password); 
    } 

基本上,如果$ _POST密碼值爲空,將密碼設置爲當前用戶的密碼($ edituser是提前創建的對象保存當前用戶信息如果需要)。相信我,我首先試着用if(empty()),因爲空應該工作,但它沒有,所以我加了null,isset,甚至是!==「」只是爲了安全起見。

不管我做什麼,密碼都被重置爲空白。爲什麼?

+0

empty()應該足夠了。打印'$ _POST ['password']'和'$ edituser-> hashed_pa​​ssword'的值來查看錯誤。 – Gleb 2009-09-23 23:04:13

回答

0

大,事實證明我只是一個白癡!

我的User類有一個屬性函數,它要求db字段名與要使用的對象屬性名相同。我的類屬性是$ password,我的db字段名稱是「hashed_pa​​ssword」 - 所以無論如何它都更新爲空白。

這是一個有趣的幾個小時!

+2

請編輯您的問題! – markus 2009-09-23 23:09:21

1

您是否打開了警告? !您可能需要isset($ _ POST [「密碼」])先在你的if語句

這使我受益匪淺調試這樣的東西:

error_reporting(E_ALL | E_STRICT); 
ini_set('display_errors','On'); 
2

即使該字段爲空,它仍將存在於$ _POST中。

$Password = trim(isset($_POST['Password']) ? $_POST['Password'] : ''); 

if($Password) 
{ 
    //validate password 
    //update password 
} 
相關問題