【问题标题】:How to store Session variables over more than 2 pages?如何将会话变量存储在 2 个以上的页面上?
【发布时间】:2017-11-09 19:07:06
【问题描述】:

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

问题 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'] . ")";

【问题讨论】:

    标签: php html forms session


    【解决方案1】:

    您所做的是正确的,我们可以使用这样的会话。但是这样做并不是一个好习惯。更好地在同一页面中创建表单。在页面加载时显示第一页并隐藏其他页面(不显示)。而不是第一个使用普通按钮的提交按钮,并在单击时给出一个 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>
    

    【讨论】:

      【解决方案2】:

      没有会话不是好主意 你可以用当前页面表单数据更新每个页面的数据库,我的意思是用当前页面表单数据更新数据库并将成功作为发布方法传递到下一页

      【讨论】:

        【解决方案3】:

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

        如果不是,那为什么要使用,提交?当第 2 页和第 3 页在隐藏的 div 块中有表单时,您可以很好地在 div 中显示此表单。代替提交,您可以有一个按钮,例如带有标签“下一步”,单击时您可以隐藏当前 div 并显示 div(当前在第 2 页)等等。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-31
          • 1970-01-01
          • 1970-01-01
          • 2022-08-10
          • 2016-07-02
          • 1970-01-01
          • 2015-05-14
          • 1970-01-01
          相关资源
          最近更新 更多