2015-12-14 88 views
-2

我使用html,jquery,css和php創建了一個表單。 我定義了會話['級別'],每個級別,會話['級別']的值將加1,然後包括下一頁。 但是,我遇到了一個問題。 如果我刷新頁面會話['級別']值保持不變,當我再次點擊「new_form」按鈕跳過級別。 我想要做的是,如果用戶刷新頁面,它將保持在他的水平,而不是返回到index.php,並且將不可能跳過級別。 我該怎麼做? 我很感激你的幫助。謝謝!會話值不重置

<?php 
    session_start(); 
?> 
<html> 
    <head> 
    </head> 
    <body> 
    <!--The form is here..--> 
    <?php 
     if (!array_key_exists('level', $_SESSION)) { 
      $_SESSION['level'] = 1; 
      if(isset($_POST['submit'])) { 
       include ('page2.php');  
      } 
     } elseif ($_SESSION['level'] == 1) { 
      $_SESSION['level'] = 2; 
      if (isset($_POST['submit'])) {  
       include ('page3.php');  
      } 
     }elseif ($_SESSION['level'] == 2) { 
      $_SESSION['level'] = 3; 
      if (isset($_POST['submit'])) {   
       include ('page4.php'); 
      } 
     } elseif ($_SESSION['level'] == 3) { 
     $_SESSION['level'] = 4; 
     if (isset($_POST['submit'])) { 
      include ('page5.php'); 
     } 
    } 
    ?> 

    <footer> 
    <form action="index.php" method="post"> 
     <input type="button" name="new_form" class="btn btn-primary btn-new" onclick="show();" /><br> 
     <input type="button" class="btn btn-default btn-new" /> 
    </form> 
    </div> 

    <img src="footer.png"> 

    </footer> 
    </div> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-form-validator/2.2.8/jquery.form-validator.min.js"></script> 
    <script> $.validate(); </script> 
    <script> 
    function show() { 
    $('#if-1-1').fadeIn(800); 
    } 
    </script> 

    </body> 
</html> 
+0

你的代碼只是假設頁面的任何負載都是「轉到下一頁」操作。所以任何更新都會前進。您需要指示頁面加載是如何發生的,只有在明確請求下一頁時纔會前進。例如'

+0

Marc BI希望URL在所有級別都是index.php,因爲我使用包括而不是鏈接到按鈕到下一頁 – eliron

回答

0

問題是,當您刷新頁面時,SESSION值未保存。您可以在表單中添加隱藏字段,然後重置級別值,但請記住隱藏字段可能被劫持。

<?php 
    $level = 1; 
    if (array_key_exists('level', $_SESSION)) $level = $SESSION['level']; 
?> 
<input type="hidden" name="level" value="<?php echo $level;?>"/> 

在PHP代碼忘了$SESSION['level']

if (!isset($_POST['level'])) { 
     //error 
} 
else { 
    $Savedlevel = $_POST['level']; 
    //etc 
} 

編輯:我明白你的意思知道,最好的辦法是使用以前的解決方案,你可以enconde防止劫持水平,但如果你想要一個快速的解決方案,使用這個代碼。它是一個醜陋的補丁,但它應該做的伎倆。

<?php 
    if (!array_key_exists('level', $_SESSION)) { 
     $_SESSION['level'] = 1; 
     if(isset($_POST['submit'])) { 
      include ('page2.php');  
     } 
    } else{ 
     if (!isset($_POST) && $SESSION['level'] > 1) { 
      $SESSION['level'] = $SESSION['level'] - 1; 
     } 

     if ($_SESSION['level'] == 1) { 
      $_SESSION['level'] = 2; 
      if (isset($_POST['submit'])) {  
       include ('page3.php');  
      } 
     }elseif ($_SESSION['level'] == 2) { 
      $_SESSION['level'] = 3; 
      if (isset($_POST['submit'])) {   
       include ('page4.php'); 
      } 
     } elseif ($_SESSION['level'] == 3) { 
      $_SESSION['level'] = 4; 
      if (isset($_POST['submit'])) { 
       include ('page5.php'); 
      } 
     } 
    } 
?> 

但是你應該進行其他檢查,看看字段是否正確,他們應該通過關卡。

+0

謝謝第一。我之前使用過這個,但我注意到,正如你所說,它可以被黑客入侵,這就是爲什麼我沒有使用隱藏輸入 – eliron

+0

我用其他解決方案編輯 – Gonzalo

+0

但是,如果用戶刷新頁面,它將他返回到開始.. – eliron