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 関数内の変数を見ると、空白になっていますか? このコードは別のプロジェクトで動作していましたが、ここで動作しない理由がわかりません。

どんな助けでも大歓迎です。

4

2 に答える 2

2

個人的には、参照による変数は使用しません。参照による変数は、他の言語よりもはるかに少ないためです。このため、参照によるパラメーター宣言は厄介な問題を引き起こす傾向があります。

そこで、論理値とエラー メッセージを返す次のメソッドを記述します。

/**
*
* 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()はリストを分割する言語構造であることに注意してください。ここでドキュメントを見つけてください。

FORM要素のPOSTメソッド

$_POSTPHP に値を渡すには、フォームを次のように読む必要があることに注意してください。

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

忘れないでください: 要素のmethod属性formは必須です!

于 2012-09-01T21:17:32.353 に答える
0

元の問題に戻ると、私はそれを機能させました。スコープの問題だったようです。関数は、関数宣言 (この場合は ValidateLogin()) を含むファイルをインクルードする Switch ブロック内で宣言されました。関数は Switch ブロックの外で呼び出されていました。関数宣言を移動すると、機能しました。

関係なく関数を実行したが、パラメーターを渡さなかっただけで、すべて空白だったのは奇妙だと思います。Eclipse/XDebug を使用してコードをステップ実行したところ、パラメーターが表示され、関数にステップインすると消えてしまいました。

なぜこれが起こるのか、誰かが私に教えてくれるでしょうか?関数を呼び出すのに、パラメーターを渡さないのはなぜですか。

于 2012-09-02T19:22:50.677 に答える