2011-01-24 4 views
5

동일한 페이지에서 양식을 처리하는 방법과 별도의 프로세스 페이지를 사용하는 방법. 지금은 가입, 의견 제출 등을 위해 데이터를 검증 한 다음 제출하여 home.php로 되돌아가는 두 번째 페이지를 사용합니다. 제출할 때 두 번째 페이지를 사용하는 대신 페이지 자체가 확인되도록하려면 어떻게해야합니까?같은 페이지 처리

+1

두 번째 페이지를 포함하지 않는 이유는 무엇입니까? –

+3

그 종류의 지저분한 일, 당신은 생각하지 않아? 같은 페이지에 있으면 깔끔하게 보입니다. – AAA

답변

11

양식을 PHP 자체에 제출하고 양식 처리를 위해 $_POST 변수를 확인하십시오. 이 방법은 오류를 설정하고 이전에 사용자가 이전에 제출 한 정보 (예 : 제출물을 잃지 않음)로 양식을 다시로드 할 수 있으므로 오류 검사에 매우 유용합니다.

"제출"버튼을 클릭하면 정보가 동일한 페이지에 POST되어 맨 위에 PHP 코드가 실행됩니다. 수표를 기반으로 오류가 발생하면 오류가 표시되고 사용자가 필드에 입력 한 정보가 포함 된 양식이 사용자에게 다시로드됩니다. 오류가 발생하지 않으면 양식 대신 확인 페이지가 표시됩니다.

<?php 
//Form submitted 
if(isset($_POST['submit'])) { 
    //Error checking 
    if(!$_POST['yourname']) { 
    $error['yourname'] = "<p>Please supply your name.</p>\n"; 
    } 
    if(!$_POST['address']) { 
    $error['address'] = "<p>Please supply your address.</p>\n"; 
    } 

    //No errors, process 
    if(!is_array($error)) { 
    //Process your form 

    //Display confirmation page 
    echo "<p>Thank you for your submission.</p>\n"; 

    //Require or include any page footer you might have 
    //here as well so the style of your page isn't broken. 
    //Then exit the script. 
    exit; 
    } 
} 
?> 

<form method="post" action="<?=$_SERVER['PHP_SELF']?>"> 
    <?=$error['yourname']?> 
    <p><label for="yourname">Your Name:</label><input type="text" id="yourname" name="yourname" value="<?=($_POST['yourname'] ? htmlentities($_POST['yourname']) : '')?>" /></p> 
    <?=$error['address']?> 
    <p><label for="address">Your Address:</label><input type="text" id="address" name="address" value="<?=($_POST['address'] ? htmlentities($_POST['address']) : '')?>" /></p> 
    <p><input type="submit" name="submit" value="Submit" /></p> 
</form> 
+0

마이클에게 감사드립니다. 내가 찾는 것 뿐이야. 그러나 제출해 주셔서 감사하다는 말 대신 페이지에서 새 정보를로드 할 수 있도록 해당 페이지를 새로 고칠 수 있습니까? 이 시점에서 프로그래밍 게임에 익숙하지 않은 Ajax를 할 수는 없습니다! – AAA

+0

데이터를 가져 오기 전에 양식을 처리하면 (제안 된대로) 새 데이터가 자동으로 고려됩니다. – Jonas

+2

@AAA 귀하의 질문을 이해할 수 없습니다. 위의 방법은 90 %의 양식에서 사용하는 정확한 모델이며 @NeqO가 제공 한 것의 확장 된 예입니다. 페이지를 "새로 고침"한다는 측면에서 무엇을 달성하려고합니까? –

6

가장 쉬운 구조는 $_POST 배열

if(isset($_POST['myVarInTheForm'])) { 
    // Process the form 
} 

// do the regular job 
1

당신이 페이지의 코드 내부 POST 요청이 있다면 확인 후 데이터를 확인하실 수 있습니다 비어 있지 여부를 감지하는 것입니다. GET 요청 인 경우 - 양식 만 표시하십시오.

GET 요청을 통해 제공되는 다른 페이지에 성공적인 양식 제출 결과를 표시하는 것이 좋습니다. 즉, 성공한 양식 POST에는 성공 페이지로 리디렉션하여 응답해야합니다.

+1

왜 이것을 좋은 과정으로 추천합니까? – diagonalbatman

+0

POST에 대한 응답으로 일반 페이지를 표시하면 페이지 새로 고침시 데이터가 다시 보내지기 때문입니다. 대부분의 브라우저는 그것에 대해 사용자에게 경고 할 것이고, 대부분의 사용자는이 경고와 혼동 될 것입니다. Opera와 마찬가지로 일부 사용자는 모든 POST 데이터를 자동으로 다시 보냅니다. 어쨌든, 그것은 아마도 원하는 행동이 아닐 것입니다. 그래서 요청이 성공적으로 완료되면 결과 페이지로 리디렉션하는 것이 좋습니다. POST가 끝난 직후에 유효성 검사 결과를 표시하는 것은 좋지만 데이터에 문제가있는 경우 사용자에게 입력 내용을 수정하도록 요청하는 것이 좋습니다. –

+0

:-) 내가 물었던 유일한 이유는 배우고있을 때 특정 의견이 왜 만들어 지는지 이해하는 것이 도움이되기 때문입니다. – diagonalbatman

1

물론 AJAX 요청을 조사하여 처리기 스크립트를 비동기 적으로 호출 한 다음 업데이트하여 보내는 페이지를 성공 메시지로 업데이트 할 수 있습니다. 이렇게하면 '동일한 페이지 처리'즉 페이지를 새로 고침 할 필요가 없다는 인상을줍니다.

그러나 실제로 달성하려는 효과에 따라 다릅니다.

+0

감사합니다. Andy. Ajax 구현 시도. 내 머리를 아프게 할 수 없었어. – AAA

+0

좋은 온라인 리소스가 많습니다. http://net.tutsplus.com이 좋습니다. 많은 도움이되는 비디오 연습 자료가 있습니다. – diagonalbatman

0

@Michael Irigoyen : 그것은 잘 작동하지만 첫번째 RN /로드, 그것은 보여줍니다

"공지 사항 : 정의되지 않은 변수 : 오류가 C에 : \ XAMPP \ htdocs를 \ same_page.php 라인 28 "

이 통지서를 어떻게 처리합니까?

지금 알려주세요 : "오류를 억제하기 위해 @ 등을 사용했습니다 ..." "매력처럼 작동합니다!" "이제 내 코드에서 해보겠습니다 ..."

0

감사 메시지를 저장하고 세션 변수를 사용하여 새로 고침했습니다. 그래서 당신을 감사

if(isset($_SESSION['message'])){ 
    echo $_SESSION['message']; 
    unset($_SESSION['message']; 
} 

이 페이지를 새로 고침해야하며 메시지를 표시하고이 페이지를 새로 고침하면 다음 세션 변수가 비어 있습니다 :

if(!is_array($error)){ 
    $_SESSION['message'] = 'Thank You!'; 
    header('Location: yourpage.php'); 
    exit(); 
} 

다음 폼의 상단에 이것을 사용 표시되지 않습니다. 이를 플래시 메시지라고합니다.

관련 문제