我使用html,jquery,css和php创建了一个表单。 我定义了会话['级别'],每个级别,会话['级别']的值将加1,然后包括下一页。 但是,我碰到了一个问题。 如果我刷新页面会话['level']值保持不变,当我再次单击“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)
问题是当您刷新页面时,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
}
编辑:我知道你的观点,最好使用之前的解决方案,你可以调整级别以防止劫持,但如果你想要快速解决方案,请使用此代码。它是一个丑陋的补丁,但应该可以解决这个问题。
<?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');
}
}
}
?>
但是你应该做其他检查,看看这些字段是否正确并且它们应该通过该级别。