2011-05-10 6 views
1

PHP와 양식에 대해서는 약간의 멍청한 생각이지만 설명하기 위해 최선을 다할 것입니다.PHP 양식을 제출 한 후 포함합니다.

내가하려는 것은 콘텐츠 컨테이너에 포함 된 일련의 양식을 만드는 것입니다. 사용자는 양식 # 1을 채운 후 '제출'을 클릭하고 양식 # 2를 채우는 등 계속 진행합니다. 각 양식의 데이터는 다음 양식으로 보내지고 숨겨진 필드에 저장되고 양식 3이 완료되면 데이터가 모두 MYSQL 데이터베이스에 삽입됩니다.

이 모든 것은 지금까지 정상적으로 작동합니다. 내가 겪고있는 문제는 제출 단추가 의도 한대로 작동하지 않는다는 것입니다. 내가 상상 한 것은 사용자가 'blah.com/recruit.php?p=form1'로 이동하여 양식 # 1을 작성한 다음 제출 버튼을 클릭하면 'blah.com/recruit.php?p= form2 '등.

<form id="form" action="recruit.php?p=form2" method="post"> 

이것은 작동하지 않지만 이유는 알 수 없습니다. 나는 인터넷을 둘러 보았고 유사한 문제를 논의하는 몇 가지 포럼 주제를 찾았지만 그 중 누구도 실제로 솔루션에 대한 세부 사항이나이 접근 방식이 작동하지 않는 이유에 대해 자세히 설명하지 않습니다.

아무에게도 설명 할 수 있습니까? 내가 잘못하고 있습니다. 나는 그것이 바보 같다고 느낀다. 그러나 나는 그것에 나의 손가락을 댈 수 없다.

많은 감사,

Splatgore

+4

우리가 당신의 코드를 보지 않는 한 그것에 손가락을 대는 것은 어렵습니다. –

+0

'$ _POST' 만 확인한다면 @Kyle이 뭔가있을 것 같아요. 컬렉션을 사용하면 쿼리 문자열의 일부로 제출하기 때문에'$ _POST [ 'p']'를 얻을 수 없습니다 (따라서'$ _GET [ 'p']') 할 필요가 있습니다 – stealthyninja

답변

0

일부 작업 예제 코드는 당신이 달성하기 위해 노력하고 생각해야 할 일 :

<?php 

$p = intval($_GET['p']); 

if ($p == 0) 
{ 
    $p = 1; // default to first form 
} 

if (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST') 
{ 
    // get/set all forms values here since subsequent forms will be 
    // posting the previous forms' data via hidden fields 
    $first_name = $_POST['first_name']; 
    $last_name = $_POST['last_name']; 
    $tel_number = $_POST['tel_number']; 

    if ($p == 3) 
    { 
     // all forms done, insert to MySQL here 
    } 

    if ($p == 2) 
    { 
     // form 2's validation 

     $p = 3; // set so that the form that follows will now show the 
       // third form 
    } 

    if ($p == 1) 
    { 
     // form 1's validation 

     $p = 2; // set so that the form that follows will now show the 
       // second form 
    } 

} 
?> 
<form id="form" action="recruit.php?p=<?php echo $p; ?>" method="post"> 
    <h2>Form #<?php echo $p; ?></h2> 
    <?php 
    if ($p == 1) 
    { 
    ?> 
    <!-- form 1's fields // --> 
    <p><label for="first_name">First Name:</label> 
    <input type="text" name="first_name" id="first_name" size="40" value="<?php echo $first_name; ?>" /></p> 

    <p><label for="last_name">Last Name:</label> 
    <input type="text" name="last_name" id="last_name" size="40" value="<?php echo $last_name; ?>" /></p> 
    <?php 
    } 

    if ($p == 2) 
    { 
    ?> 
    <!-- form 2's fields // --> 
    <p><label for="tel_number">Tel Number:</label> 
    <input type="text" name="tel_number" id="tel_number" size="25" value="<?php echo $tel_number; ?>" /></p> 

    <p><input type="hidden" name="first_name" value="<?php echo $first_name; ?>" /> 
    <input type="hidden" name="last_name" value="<?php echo $last_name; ?>" /></p> 
    <?php 
    } 

    if ($p == 3) 
    { 
    ?> 
    <!-- form 3's fields // --> 
    <div> 
     <input type="hidden" name="first_name" value="<?php echo $first_name; ?>" /> 
     <input type="hidden" name="last_name" value="<?php echo $last_name; ?>" /> 
     <input type="hidden" name="tel_number" value="<?php echo $tel_number; ?>" /> 
    </div> 
    <?php 
    } 
    ?> 

    <p><input type="submit" value="Submit"></p> 
</form> 
+0

당신의 도움. 이것은 내가 염두에두고 있던 것의 일종이며 많은 머리가 긁힌 후에 내가 잘못 가고있는 것을 볼 수있게 도와주었습니다. 나는 이것을 가지고 놀고 그것이 어떻게되는지 보게 될 것이다. 나는 지금 내가해야 할 일에 대해 훨씬 더 명확한 생각을 가지고있다. :) – Splatgore

+0

나는이 솔루션에 대해 한 가지 질문을한다. 사용자가 세 번째로 제출 버튼을 클릭하면 세 번째 페이지가 반복된다. 나는 그것이 왜 그것을하는지 알 수 있지만 그것을 고치는 방법을 알 수는 없다. 이견있는 사람? – Splatgore

+0

@Splatgore : 최종 양식을 제출 한 후 유효성 검사 조건을 통과하고 데이터가 데이터베이스에 성공적으로 삽입되면 사용자를 _thank you_ 페이지로 리디렉션 할 수 있습니다. – stealthyninja

0

그것은 어떻게 든 당신이 중첩 된 형태를 보인다. HTML에서는 불가능합니다.

당신이 접근하는 경우, 항상 같은 PHP 스크립트로 연결되는 동일한 제출 버튼을 사용하십시오. PHP 스크립트에서 숨겨진 필드가 이미 얼마나 멀리 있는지 확인하도록 설정되어 있는지 확인합니다.

더 나은 방법 IMO는 세션 var에 데이터를 저장하고 항상 다른 양식 페이지로 연결하기가 어려울 수 있습니다.

관련 문제