2012-09-01 42 views
1

我只是重新回到PHP編程中,我似乎無法弄清楚這一點。變量未被傳遞到函數

我只是想寫一個簡單的登錄屏幕,但我似乎無法將變量傳遞給我的「登錄」功能。

所以這是我有一個叫後的網頁上的代碼...

$Email = $_POST["Email_Address"]; 
    $Password = $_POST["Password"]; 

    // check to see if the login is valid 
    $ValidLogin = ValidateLogin($Email, $Password, $ErrorMessage); 

我以前在一個單獨的聲明ValidateLogin包括在此代碼之前調用的文件。

function ValidateLogin($EmailAddress, $Password, &$ErrorMessage){ 

    $ErrorMessage = ""; 


} 

當我看看ValidateLogin函數中的變量時,它們是空白的嗎?我有這個代碼在另一個項目上工作,但不明白爲什麼它不在這裏工作。

任何幫助,將不勝感激。

+0

我在這裏沒有看到問題。請提供更多細節。 – SteAp

+1

你的問題有點不完整。考慮用更多的代碼和澄清來重新編寫它。現在不可能弄清楚你的問題,因爲你甚至沒有真正使用這個功能。 –

+1

請不要通過引用傳遞'$ errorMessage',而是'return'所有需要的信息。 – PeeHaa

回答

2

就個人而言,我不會使用參考變量 - ,因爲通過引用的方式,引用的內容遠少於其他語言的文本。由於這個事實,by-reference參數聲明往往會導致難看的問題。

在那裏,我會寫這個方法,它返回邏輯值和錯誤信息

/** 
* 
* Checks email-address and password vs. the list of all valid user credentials. 
* Returns an array, with two elements 
* [0] -> TRUE iff. credentials are valid 
* [1] -> An error-message, which may be posted to the result web-page 
* 
* @param string $EmailAddress - An email-address 
* @param string $Password - A password 
* @returns array - array(bool, string) 
*/ 
function ValidateLogin($EmailAddress, $Password){ 

    // Do whatever is possible to verify credentials 
    return array(TRUE, 'this is a message'); 

} 

你會使用這個方法是這樣的:

$Email = $_POST["Email_Address"]; 
$Password = $_POST["Password"]; 

// check to see if the login is valid 
list($ValidLogin, $errorMessage) = ValidateLogin($Email, $Password); 

注意list()是一種語言結構,它分割一個列表。找到documentation here。 FORM元素的

POST方法

請不是,那你的表格需要讀取這樣的傳遞值作爲$_POST到PHP:

<form action="theActualScriptname.php" method="post"> 
    ... form elements .. 
</form> 

不要忘記:的method屬性form元素是必不可少的!

+0

希望你不要介意我完全刪除了'ErrorMessage'。我認爲在驗證任何事情之前就已經有了它。如果您不同意,可以自由回滾。 :) – PeeHaa

+0

@PeeHaa謝謝!不用謝!當然,第三個參數是完全多餘的。 – SteAp

+0

實際上我發佈了這個問題後,我擺脫了By Ref Error Message。我知道這不是最好的做法,因爲新的要求,使得之前的項目能夠正常運行,並且我不想在當時重寫所有內容。 – Dlac

0

回到原來的問題,我確實得到它的工作。看起來這是一個範圍問題,該函數在一個Switch塊中聲明,其中包含函數聲明的文件(在這種情況下爲ValidateLogin())。該功能在開關組外部被調用。當我移動它的函數聲明它的工作。

我覺得奇怪,它運行的功能不管,但只是沒有通過參數,他們都是空白的。我使用Eclipse/XDebug瀏覽了代碼,我可以看到這些參數,只要進入函數就會消失。

也許有人可以啓發我爲什麼會發生這種情況?爲什麼它調用該函數,但不傳遞參數。

+0

好吧,我發現這個問題,它是Eclipse/XDebug。在某些情況下,它在傳遞給函數時不顯示參數值,但代碼實際上正在查看這些參數。 – Dlac

+0

請不要在評論中填寫答案,也不要用答案提出後續問題。澄清和其他問題放在問題主體中。 「您的答案」字段嚴格用於回答所給出的問題。評論是二等公民,如有更改,恕不另行通知。 –