2014-09-06 6 views
0

여러 단계로 구성된 관리 양식이 있으며 앞뒤로 이동할 수 있습니다. 세션을 사용하기로 결정했습니다. 왜냐하면 누군가 앞뒤로 간다면 세션에서 저장되기 때문에 모든 변수를 전송하는 것에 대해 걱정할 필요가 없기 때문입니다.PHP 및 세션을 사용하는 다단계 양식

첫 번째 단계에서 사용할 수있는 세션이 있으면 삭제합니다. 누군가가 이전에 가입하고 다른 사람을 위해 다시 등록하려면 이전 입력이 모두 입력란에 표시되기 때문에 이렇게합니다. 그래서이 시작 페이지 step1.php입니다 : 다음

<?php isset($_SESSION))session_destroy(); ?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
     "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> ... </head> 
    <body> 
    <form action='step2.php' enctype="multipart/form-data" method='post'> 
    ... 
    </form> 
    </body> 
</html>  

, 나는 step2.php에서 $ _SESSION 배열의 모든 입력을 저장 : 누군가가 등록하고 켜져 있으면

<?php 
    $_SESSION['var1']=$_POST['var1'] 
    $_SESSION['var2']=$_POST['var2'] 
    ... 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
     "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> ... </head> 
    <body> 
    <form action='step3.php' enctype="multipart/form-data" method='post'> 
    ... 
    </form> 
    </body> 
</html> 

문제이며, step2.php 페이지를 열고 실수로 새 탭에서 step1.php를 열면 step1.php ($ _SESSION [ 'var1'], $ _ SESSION [ 'var2'], ..)의 저장된 변수가 모두 손실됩니다.

그런 일이 발생하지 않도록 할 수 있습니까?

답변

1

수신 한 입력란에 따라 항상 동일한 URL로 POST하고 다른 코드 분기를 실행하십시오.

+0

매우 좋습니다! 고맙습니다. – Adam

1

양식이 step2.php에 제출 된 후에 더 이상 존재하지 않는 세션 변수를 만듭니다. 그런 다음 step1.php에서 세션을 삭제하기 전에이 변수가 있는지 확인하십시오. 예를 들어

:

1 단계는 3 단계 IN

if (!isset($_SESSION["do_not_destroy"]) session_destroy(); 
$_SESSION["do_not_destroy"] = 1; 

:

unset($_SESSION["do_not_destroy"]); 
+1

솔루션을 제공해 주셔서 감사합니다. 하지만 모든 stepX.php 파일을 하나의 파일에 넣었습니다. 등록이 끝나면 단순히 세션을 삭제하면됩니다. – Adam

0

이 플러스 ... 기능하지 다시 세션 다단계 형태의 매우 간단한 예이고 어떻게,하지만 어쩌면 당신에게 몇 가지 아이디어를 제공합니다. 나중에 유효성 검사를 위해 JavaScript를 사용할 수 있습니다.

<?php 
// startup 
if (empty($_POST["f1"]) && empty($_POST["f2"]) && empty($_POST["f3"]) && empty($_SESSION["mode"])) { 
    $mode = 1; 
    $_SESSION["mode"] = 1; 
} 

// reset 
if (!empty($_POST["reset"])) { 
    $mode = 1; 
    $_SESSION["mode"] = 1; 
} 

// section A 
if ($_SESSION["mode"] == 1){ 
    if (!empty($_POST["f1"])) { 
     $mode = 2; // switch to next 
     $_SESSION["mode"] = 2; 
    }else{ 
     $mode = 1; // stay current step 
    } 
} 
// section B 
if ($_SESSION["mode"] == 2){ 
    if (!empty($_POST["f2"])) { 
     $mode = 3;// switch to next 
     $_SESSION["mode"] = 3; 
    }else{ 
     $mode = 2; // stay current step 
    } 
} 
// section C - last part 
if ($_SESSION["mode"] == 3){ 
     $mode = 3;// stay current step 
} 

?> 

<form action="" method="post"> 
<?php if($mode == 1) { ?> A: <input type="text" name="f1"><br> <?php } ?>   
<?php if($mode == 2) { ?> B: <input type="text" name="f2"><br> <?php } ?>   
<?php if($mode == 3) { ?> C: <input type="text" name="f3"><br> <?php } ?>  
<br><br> 
<input type="submit"> 
<input name="reset" type="submit" value="Reset"> 
</form>