2011-09-01 4 views
5

나는 html 양식을 포함하는 PHP 스크립트를 개발 중이다."header()"PHP 함수가 전역 변수를 설정 해제합니까?

모든 필드가 올바른 방법으로 작성하는 경우 스크립트가 오류 신호와 get 메소드와에 예 오류 변수를 설정 헤더 기능과 같은 페이지로 다시 리디렉션됩니다 :

header("Location: registration_page.php?error_empty=yes"); 

내 스크립트는 오류가있는 필드를 강조 표시하는 오류 처리 부분을 가지고 있지만 올바르게 채워진 필드의 값을 유지하려고합니다.

How can I keep a value in a text input after a submit occurs?

을하지만 문제는 페이지가 다시 열립니다 때 양식이 이전 값을 포함 할 것입니다 :

나는이 다른 질문에서 발견 나는이 기능을 구현하고있다.

내 질문은 : 헤더 함수가 $ _REQUEST 배열의 전역 변수를 설정 해제하는지 아는 사람이 있습니까?

그리고 어떤 솔루션을 채택 할 수 있습니까? 세션일지도 모릅니다.

미리 감사드립니다.

Matteo!

답변

8

$_COOKIES가 유지되지만 클라이언트가 새 페이지로 이동하면 $_POST & $_GET이 삭제됩니다. 보관해야 할 경우 리디렉션을 호출하기 전에 먼저 $_SESSION에 저장해야합니다.

session_start(); 
$_SESSION['last_post'] = $_POST; 
header("Location: http://example.com"); 
exit(); 

// On the redirected page, use the stored POST values and unset them in $_SESSION 
session_start(); 
if (empty($_POST) && isset($_SESSION['last_post'])) { 
    $post = $_SESSION['last_post']; 
    unset($_SESSION['last_post']); 
} 
else $post = $_POST; 
+0

을 삭제해야합니까? 필드가 모두 성공적으로 채워 졌을 때? – Matteo

+1

@Matteo'session_destroy()'는 스크립트 실행이 완료되면 암묵적으로 호출됩니다. 스크립트가 완료되기 전에 세션을 닫아야하는 이유가 없으면 호출하지 않아도됩니다. 'session_destroy()'_는 세션 변수를 제거하지 않습니다. 난 그냥 세션에서 현재 스크립트의 연결을 끊습니다. –

+0

@Matteo 위의 추가 내용은'$ _SESSION'을 사용하여 저장된 포스트를 해제 한 것을 보았습니다. –

3

헤더 함수가 $ _REQUEST 배열의 전역 변수를 설정 해제하는지 알 수 있습니까?

아니요. 쿠키 ($_COOKIE)는 그대로 유지됩니다. 분명히

$_GET 당신이 리디렉션에 뭐든지 포함됩니다 (예 : $_GET['error_empty'] = 'yes') and $ _POST`은 비어있을 것입니다 당신이 게시되지 않기 때문에

을 그래서 $_REQUEST$_COOKIE의 조합과 새로운 $_GET 매개 변수를 사용하면 될 것입니다. 설정합니다. 당신은 아마 어쨌든 $_REQUEST를 사용해서는 안


를. 당신이 당신의 요청 매개 변수가 될 것으로 기대 위치를 정확히 지정 ...

2

그것은하지 않지만 새로운 요청을합니다. 새로운 요청은 이전 데이터를 모두 가지고 있지는 않은 새로운 $_REQUEST을 의미합니다. $_COOKIE은 여전히 ​​존재하지만 $_GET$_POST$_REQUEST에 반영 될 새로운 의미가됩니다. ($_FILES도 비어있을 것이고`$ _REQUEST '에없는 동안 다른 사용자 제공 값이 재설정 될 것이다).

양식을 복원하려는 경우, 당신은 헤더에있는 URL에있는 모든 변수를 넣어, 또는 $_SESSION 또는 setcookie을 사용하고 $_GET, $_SESSION 또는 $_COOKIES에서 복원 중 하나를해야합니다.

+0

그래서 이전 값은 더 이상 액세스 할 수 없습니다 그건 사용하는 경우 명령 은 <$ _REQUEST [ '사용자 이름'] 에코 PHP?;> 왜? 결과가 비어있을 것인가? – Matteo

+0

'$ _REQUEST'에서'$ _FILES'가 오래 전에 삭제되었습니다. – NullUserException

+1

맞습니다. '$ _REQUEST'는 브라우저의 입력에 의존하기 때문에 브라우저가 새로운 요청을하면'$ _REQUEST'가 비게됩니다. – cwallenpoole

관련 문제