如何将Session变量存储在2页以上?

时间:2017-11-09 10:39:14

标签: php html forms session

我有一个多页表单,我希望将所有表单插入保存在一个会话中,我可以在我的数据库中的上一个formpage中单击提交按钮后保存它们。

问题1: 我是否已将每个表单变量保存到这样的会话变量中? 我的意思是,我必须将当前页面上的最后一页的变量存储在示例中吗?这有用还是有可能更容易存储它们?

第1页:

<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>form1</title>
</head>
<body>
<form method="post" action="form2.php">
    <p><input type="text" name="sname"> Name</p>
    <p><input type="text" name="semail_address"> Email</p>
    <p><input type="submit" value="form 2"></p>
</form>
</body>
</html>

第2页:

session_start();

$_SESSION['name'] = $_POST['sname'];
$_SESSION['email_address'] = $_POST['semail_address'];
?>
<form method="post" action="form3.php">
   <p><input type="radio" value="Free" checked="checked"name="smembership_type">Free</p>
   <p><input type="radio" name="smembership_type" value="Normal">Normal</p>
   <p><input type="radio" name="smembership_type" value="Deluxe">Deluxe</p>
   <p><input type="checkbox" name="sterms_and_conditions">I agreee</p>
   <input type="submit" value="Form 3"></p>
</form>
</body>
</html>

第3页:

<?php
 session_start();
 $_SESSION['membership_type'] = $_POST['smembership_type'];
 $_SESSION['terms_and_conditions'] = $_POST['sterms_and_conditions'];
 ?> 

...

问题2: 然后我如何将它们保存到数据库中?语法是对的吗?

$query = "INSERT into subscriptions(name,email_address,membership_type,terms_and_conditions,name_on_card, credit_card_number, credit_card_expiration_date)".
    "VALUES(" . $_SESSION['name'] . ", 
            " . $_SESSION['email_address'] . ",
            " . $_SESSION['membership_type'] . ",
            " . $_SESSION['terms_and_conditions'] . ",
            " . $_SESSION['name_on_card'] . ",
            " . $_SESSION['credit_card_number'] . ",
            " . $_SESSION['credit_card_expiration_date'] . ")";

3 个答案:

答案 0 :(得分:0)

你所做的是正确的,我们可以使用这样的会议。但这不是一个好的做法。更好地在同一页面中创建表单。在页面加载时显示第一页并隐藏其他页面(显示无)。而不是第一个中的提交按钮使用普通按钮并在点击时给出jquery以显示按钮单击时的第二个表单。尝试此代码。

       <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>form1</title>
        <style>
         #secondForm{
           display:none;
         }
        </style> 
<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>     
         <script>
         function display(formName){
             if(formName=='first'){
                $('#firstForm').css("display","block");
                $('#secondForm').css("display","none");
             }else{
                $('#firstForm').css("display","none");
                $('#secondForm').css("display","block");                 
             }
         }
         </script>
        </head>
        <body>
        <form method="post" action="">
            <div id="firstForm">
            <p><input type="text" name="sname"> Name</p>
            <p><input type="text" name="semail_address"> Email</p>
            <p><input type="button" value="Next" onclick="display('second')"></p>
    </div>
            <div id="secondForm">
            <p><input type="text" name="sname"> Name</p>
            <p><input type="text" name="semail_address"> Email</p>
            <p><input type="button" value="Previous" onclick="display('first')"></p>
            <p><input type="submit" value="Save"></p>
    </div>
        </form>
        <?php 
        if($_POST){
            //save code sql
        }
        ?>
        </body>
        </html>

答案 1 :(得分:-1)

没有会话不是好主意 你可以用当前页面表格数据为每个页面更新数据库,这意味着用当前页面表格数据更新数据库,并将成功作为post方法传递给下一页

答案 2 :(得分:-2)

如果您使用提交按钮将信息发送到服务器进行验证或任何其他业务逻辑,以便您可以决定下一页加载,那么是。

如果没有,那么为什么要使用,提交?你可以很好地将这个表格放在div中,当第2页和第2页为用户显示时。 3在隐藏的div块中有表单。而不是提交你可以有一个按钮,比如标签“下一步”,点击你可以隐藏当前的div并显示div(目前在第2页),依此类推。

通过这种方式,您可以避免多次访问服务器,也无需在会话中管理那么多变量。如果您根据第一个表单数据做出任何决定,并且该决定只能在服务器端处理,那么这是最好的方法。