2011-07-26 9 views
2

로 다시 리디렉션 나는 다음과 같은 필드에 오류가 발생하는지 확인합니다 다음 코드가 : 사용자가 리디렉션되면 오류가 발생 된 경우입력 오류 - 등록 페이지 표시 오류 메시지

//Input Validations 
if($user_name == '') { 
    $errmsg_arr[] = 'Username missing'; 
    $errflag = true; 
} 
if($user_password == '') { 
    $errmsg_arr[] = 'Username Password missing'; 
    $errflag = true; 
} 
if($insp_name == '') { 
    $errmsg_arr[] = 'Inspector Name missing'; 
    $errflag = true; 
} 
if($insp_email == '') { 
    $errmsg_arr[] = 'Inspector Email missing'; 
    $errflag = true; 
} 
if($confirm_password == '') { 
    $errmsg_arr[] = 'Confirm Password missing'; 
    $errflag = true; 
}  

if ($user_password != $confirm_password) { 
     $errmsg_arr[] = 'The password which you have entered do not match'; 
    $errflag = true; 
    } 

$result = mysql_query("SELECT * FROM members WHERE `email` = '$insp_email' or `login` = '$user_name' LIMIT 1"); 
$exist = mysql_fetch_row($result); 
    if ($exist !==false) { 
     $errmsg_arr[] = 'That email is already registered.'; 
     $errflag = true; 
     } 

//If there are input validations, redirect back to the registration form 
if($errflag) { 
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
    session_write_close(); 
    header("location: accountinfo.php"); 
    exit(); 
} 

을 등록 페이지로 돌아 가면 오류 메시지가 표시되지 않습니다. 따라서 사용자는 등록 페이지로 리디렉션 된 이유를 알 수 없습니다. 등록 페이지로 다시 연결되면 문제가 무엇인지 나타내는 오류 메시지가 표시됩니다. 전의. 사용자 이름이 누락되었거나 이메일이 이미 등록되었습니다. 등록 페이지로 다시 리디렉션되는 오류와 관련된 오류 메시지를 표시하려고합니다.

답변

5

가장 일반적인 방법은 flash messages입니다. 아이디어는 session을 사용하여 플래시 메시지를 저장하는 것입니다.

// 등록 페이지 코드 :

... 
$_SESSION['flash_message'] = 'An error has occurred on the previous page! You\'ve broken something!'; 
... 

메시지가 현재 세션에 존재하는 경우, 당신은 내용이고 (그래서 우리는 그것이 "한 번"메시지를 확신하는) 삭제 보여 리디렉션 후 :

if (!empty($_SESSION['flash_message'])) { 
    // let's show our message to a user 
    echo $_SESSION['flash_message']; 
    // and don't forget to erase it from session 
    unset($_SESSION['flash_message']); 
} 

내가 예를 들어,이 목적을 위해 자신의 클래스를 작성하는 제안 :

FlashMessage::set('error', 'the error message itself'); 
FlashMessage::get('error'); // will perform the unset 
// or 
FlashMessage::render('template', 'error'); // would render error template and show error message immediatelly if exists... etc. 
+0

제안한 코드를 추가했지만 메시지를 표시하지 않습니다. – Jason

+0

아마도 세션이 꺼져 있습니까? – Nemoden

+0

아니요, 세션이 시작되었습니다.여기 내 등록 페이지 양식에 대한 코드입니다 : \t으로 session_start은(); \t 경우 (array_key_exists ('flash_message', $ _SESSION)) { \t //의 사용자에게 우리의 메시지를 표시 할 수 \t // 세션 \t 해제 ($ _ SESSION [ 'flash_message'에서 삭제하는 것을 잊지 마세요 ])); } 그리고 내 코드 교체 : $ _SESSION을 [ 'ERRMSG_ARR'] = $ errmsg_arr; 코드와 : $ _SESSION은 [ 'flash_message'] = '오류 prevoius 페이지에서 발생한다! 당신은 무언가를 망 쳤어! '; – Jason

0

accountinfo.php에 error_message 또는 error_messages GET 매개 변수를 추가하십시오. 난 당신이 한 번에 모두 표시 할 경우 결정해야하므로, 하나 이상의 오류가있을 수 있습니다

header("location: accountinfo.php?error_message=$some_message"); 

: 오류가있는 경우에

다음, 리디렉션합니다.

또 다른 해결책은 session에서 오류 목록을 저장하는 것입니다 :

$_SESSION['registration_errors'] = $errmsg_arr; 

은 또한 코드가 SQL injection에 취약 있습니다.

+1

'OP'의 경우 : query_string에'error_message'를 추가하는 경로는 위험 할 수 있습니다. ['maximum URL length'] (http://www.boutell.com/newfaq/misc/urllength.html)를 초과하지 않을 것이라는 확신이있는 경우에만 사용하십시오. 나 자신,이 문제에 여러 번 부딪쳤다. 사용자가 긴 텍스트를 제출하고 프로그램이이 텍스트에 오류가 있음을 깨닫고'? errormsg = LOOONG_TEXT'로 사용자를 돌려 보냈습니다. 정확히 사용자가 잘못 쓰는 것을 보여주기 위해 하이라이트로이 텍스트를 인용하고 싶었습니다. 따라서, 만약 당신이이 길로 가면 신중해야합니다. – Nemoden

0
print "You have input errors. These are:"; 
print "<BR><UL>"; 
for ($i=0; $i<sizeof($errmsg_arr); $i++) 
{ 
    print "<LI>$errmsg_arr[$i]"; 
} 

코드 아래에 삽입하면 누락 된 필드가 표시됩니다.

관련 문제