2011-09-03 7 views
6

체크 박스 폼이있는 html 페이지가 있습니다. 이 폼은 PHP 스크립트를 가리키는 액션을 가지고 있습니다. PHP 스크립트는 POST 변수를 잘 수집하지만, 일단 실행되면 www.example/script.php으로 이동하기 때문에 빈 화면이 분명히 표시됩니다.PHP 리다이렉트, POST 유지

POST를 그대로 유지하면서 양식 제출 정보를 얻기 위해 PHP를 다른 URL로 이동 시키려면 어떻게해야합니까?

header() 및 metaredirect는 데이터를 수집하지 않고 데이터를 수집하지 않습니다. 어떻게 데이터를 POST로 수집 한 다음 PHP 스크립트가 해당 동작으로 첨부 된 다른 폼의 다른 html 페이지로 자동 이동합니까?

내가 혼란스러운 방식으로 이것을 말하면 고마워하고 미안.

+1

세션 변수에 'POST'데이터를 넣습니다. –

+1

"echo"

...
"'라고 쓰겠습니다.하지만 더 좋은 방법이 있다면 궁금합니다. – JiminP

답변

5

$_SESSION에 변수를 저장 한 다음 양식의 마지막 부분이 완성 될 때 제출하거나 중간 페이지에 숨겨진 입력 값을 저장하여 최종 페이지에 제출하도록 할 수 있습니다.

+0

당신이 말하는 것을보고 세션을 시도 할 수는 있지만, 일단 script.php가 실행되면 다른 페이지로 어떻게 이동합니까? 단지 빈 페이지를 표시합니다 ... 다른 html 페이지로 이동하여 사용자가 더 많은 양식을 작성할 수 있도록하려면 어떻게해야합니까? 감사! – Redirect42

+0

그 페이지에서 바로 다음 양식을 표시하지 않으시겠습니까? 정말로 사용자를 리디렉션하고 싶다면'header ('Location : www.mysite.com/nextpage.php'); ' –

+0

'을 실행하여 다음 양식 페이지로 '다음'제출 버튼 링크를 만들 수 있고 어떻게 든 모든 것을 가질 수 있습니까? 폼 정보를 POST로 넣을 수 있습니까? 나도 같은 HTML 페이지에서 PHP를 사용하도록 요구하겠습니까? 아니면 여전히 자신의 파일에서 사용할 수 있습니까? – Redirect42

2

나는이 코드가 거의 항상 작동한다는 것을 발견했다. (사용자 정의 게시 데이터를 사용하여 전달하려는 경우와 클라이언트가 자바 스크립트를 지원하지 않는 경우는 제외).

이것은 POST 데이터를 전달하는 것으로 보이는 307 Temporary Redirect을 남용하거나 자체 제출 자바 스크립트 양식을 작성하여 수행됩니다.

이것은 해킹이지만 반드시 POST 데이터를 전달해야하는 경우에만 사용하십시오.

<?php 

function redirectNowWithPost($url, array $post_array = NULL) 
{ 
    if(is_null($post_array)) { //we want to forward our $_POST fields 
     header("Location: $url", TRUE, 307); 
    } elseif(! $post_array) { //we don't have any fields to forward 
     header("Location: $url", TRUE); 
    } else { //we have some to forward let's fake a custom post w/ javascript 
     ?> 
<form action="<?php echo htmlspecialchars($url); ?>" method="post"> 
<script type="text/javascript"> 
//this is a hack so that the submit function doesn't get overridden by a field called "submit" 
document.forms[0].___submit___ = document.forms[0].submit; 
</script> 
<?php print createHiddenFields($post_array); ?> 
</form> 
<script type="text/javascript"> 
document.forms[0].___submit___(); 
</script> 
     <?php 
    } 
    exit(); 
} 

function createHiddenFields($value, $name = NULL) 
{ 
    $output = ""; 
    if(is_array($value)) { 
     foreach($value as $key => $value) { 
      $output .= createHiddenFields($value, is_null($name) ? $key : $name."[$key]"); 
     } 
    } else { 
     $output .= sprintf("<input type=\"hidden\" name=\"%s\" value=\"%s\" />", 
      htmlspecialchars(stripslashes($name)), 
      htmlspecialchars(stripslashes($value)) 
     ); 
    } 
    return $output; 
}