2012-09-01 4 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'를 참조로 전달하지 말고 모든 정보를'반환 '하십시오. – PeeHaa

답변

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()을 그 목록을 나눕니다. documentation here을 찾으십시오. FORM 요소의

POST 방법

제발하지, 양식이이 PHP에 $_POST로 값을 전달처럼 읽을 필요가있다 :

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

은 잊지 마세요 :의 method 속성을 form 요소는 필수적입니다!

+0

'ErrorMessage' 파일을 완전히 삭제했으면 좋겠어요. 이미 유효성을 검사하기 전에 이미 가지고 있다고 생각하지 않습니다. 동의하지 않으면 롤백 할 수 있습니다. :) – PeeHaa

+0

@PeeHaa 감사합니다! 천만에요! 확실히 세 번째 매개 변수는 완전히 불필요합니다. – SteAp

+0

실제로 질문을 게시 한 후 By Ref Error Message를 제거했습니다. 나는 그것이 최선의 방법은 아니라는 것을 안다. 새로운 요구 사항 때문에 이전 프로젝트를 시작하고 실행하는 것은 빠른 수정의 일이었고, 나는 그 당시에 모든 것을 다시 쓰고 싶지 않았다. – Dlac

0

원래의 문제로 돌아가서, 나는 그것을 작동 시켰습니다. 그것은 범위 문제가있는 것 같아요, 함수는 스위치 블록 내에서 함수 선언 (이 경우 ValidateLogin()) 파일을 포함하는 내에서 선언되었습니다. 이 기능은 스위치 블록 외부에서 호출되었습니다. 함수 선언을 옮기면 함수가 작동했습니다.

필자는 이상하게도 관계없이 함수를 실행했지만 매개 변수를 전달하지 않았지만 모두 공백이었습니다. Eclipse/XDebug를 사용하여 코드를 밟았으며 매개 변수를 볼 수 있습니다. 일단 함수에 들어가면 사라집니다.

어째서 이런 일이 발생했는지 누군가가 알 수 있습니까? 왜 함수를 호출 하나 매개 변수를 전달하지 않습니다.

+0

좋아, 문제는 Eclipse/XDebug입니다. 경우에 따라 매개 변수 값이 함수로 전달 될 때 매개 변수 값이 표시되지 않지만 실제로 매개 변수 값이 표시됩니다. – Dlac

+0

의견에 답변을 묻지 말고 답변을 사용하여 후속 질문을하지 마십시오. 명확화 및 추가 질문은 질문 본문에 있습니다. "귀하의 답변"필드는 주어진 질문에 대한 귀하의 답변에 대한 것입니다. 의견은 추가 통보없이 삭제 될 수있는 2 급 시민입니다. –

관련 문제