Php 如何保持表单页面之间的会话变量?

Php 如何保持表单页面之间的会话变量?,php,jquery,html,forms,session,Php,Jquery,Html,Forms,Session,我正在写一个有3页的程序 在第1页,用户可以选择要购买的早餐产品的数量。选择数量后,用户点击“提交”按钮,如果用户未注册,则会转到第2页进行注册。如果用户已注册,它将引导他们进入第3页 但是,如果用户先进入第2页,但没有从第1页选择数量,则在用户注册并按提交后,会将用户重定向到第1页,然后在用户选择数量并点击第1页的提交后,用户将进入第3页 我正在努力维护页面之间的会话变量,因为其中两个页面的表单在用户返回该页面时会被覆盖 第1页: <?php session_start();

我正在写一个有3页的程序

在第1页,用户可以选择要购买的早餐产品的数量。选择数量后,用户点击“提交”按钮,如果用户未注册,则会转到第2页进行注册。如果用户已注册,它将引导他们进入第3页

但是,如果用户先进入第2页,但没有从第1页选择数量,则在用户注册并按提交后,会将用户重定向到第1页,然后在用户选择数量并点击第1页的提交后,用户将进入第3页

我正在努力维护页面之间的会话变量,因为其中两个页面的表单在用户返回该页面时会被覆盖

第1页:

<?php 
session_start();
    $_SESSION['name']= $_POST['name'];
    $_SESSION['email']= $_POST['email'];
    $platter_quantity = $_SESSION['platter_quantity'];
    $yogurt_quantity = $_SESSION['yogurt_quantity'];
    $waffles_quantity = $_SESSION['waffles_quantity'];
?>

<!DOCTYPE html>
<head>
    <title>Product Page</title>
    <link rel="stylesheet" type"text/css" href="settings.css">
</head>
<html>
<body>

<ul>
  <li><a class="active" href="product.php">Product</a></li>
  <li><a href="registration.php">Registration</a></li>
  <li><a href="invoice.php">Invoice</a></li>
  <li style="float:right"><a href="registration.php">Login</a></li>
</ul>

<?php
$action = '';
if (!empty($_SESSION['name']) or !empty($_SESSION['email'])) {
    $action = "invoice.php";
    }
else {
    $action = "registration.php";
    }
?>

<form action="<?php echo $action; ?>" method="post">
<div class="container">
    <img src="images/platter.jpg" alt="Breakfast Platter" style="float: left; width: 400px; height: 300px;";>
    <h1>Breakfast Platter</p>
    <p>The breakfast platter option comes with two fried eggs, four pancakes, and a bunch of bacon.</p>
    Quantity: <input type="number" name="platter_quantity" min="0">
    <p value="10.99" name="platter_price">Price: $10.99</p>
</div>

<div class="container">
    <img src="images/yogurt.jpg" alt="Yogurt Parfait" style="float: left; width: 400px; height: 300px;">
    <h1>Yogurt Parfait</p>
    <p>The yogurt parfait option comes with two cups of yogurt, oats, and a mixture of berries.</p>
    Quantity: <input type="number" name="yogurt_quantity" min="0">
    <p value="6.99" name="yogurt_price">Price: $6.99</p>
</div>

<div class="container">
    <img src="images/waffles.jpg" alt="Waffles" style="float: left; width: 400px; height: 300px;";>
    <h1>Waffles</p>
    <p>The waffles option comes with two buttermilk waffles with butter and syrup.</p>
    Quantity: <input type="number" name="waffles_quantity" min="0">
    <p value="$4.99" name="waffles_price">Price: $4.99</p>
</div>

<br>
    <button class="button" type="submit" name="submit">Submit</button>
</form>

</body>
</html>

产品页
注册页

发票页
你好欢迎
对于我来说,在不使用数据库的情况下,使用会话变量实现此功能的最佳方法是什么

我也尝试过这样做,但似乎不起作用:

<?php 
session_start();
    if (empty($_SESSION['name']) or empty($_SESSION['email'])) {
        $_SESSION['name'] = $POST_['name'];
        $_SESSION['email'] = $POST_['email'];
    }
    else {
        $name = $_SESSION['name'];
        $name = $_SESSION['email'];
    }

    if (empty($_SESSION['platter_quantity']) or empty($_SESSION['yogurt_quantity']) or ($_SESSION['waffles_quantity'])) {
        $_SESSION['platter_quantity'] = $POST_['platter_quantity'];
        $_SESSION['yogurt_quantity'] = $POST_['yogurt_quantity'];
        $_SESSION['waffles_quantity'] = $POST_['waffles_quantity'];
    }
    else {
        $platter_quantity = $_SESSION['platter_quantity'];
        $yogurt_quantity = $_SESSION['yogurt_quantity'];
        $waffles_quantity = $_SESSION['waffles_quantity'];
    }
?>

在插入$\u POST或$\u GET之前,必须先检查它们是否已设置($\u POST['variable']),您也可以在此处使用检查-检查$\u POST变量是否存在,如果存在,则使用它们,如果没有,则分配$\u会话变量。因此,在第3页,您将看到如下内容:

$name = $_SESSION['name'] = (isset($_POST['name']) ? $_POST['name'] : ((isset($_SESSION['name']) ? $_SESSION['name'] : '')));

其他变量也是如此。它所做的是检查$\u POST,如果设置了$\u会话变量,它将更新$\u会话变量,如果未设置,它将只使用现有的$\u会话变量更新$\u会话变量,如果既不存在$\u会话变量,它将变量
$name
$\u会话['name']
设置为空,然后,您可以在脚本的后面部分检查它(以及重定向等)

在覆盖之前检查它是否为空<代码>如果(空($\u会话['name']))$\u会话['name']=$\u POST['name']我尝试过这样做,但现在似乎根本没有保存会话变量。我是否能够创建一个空白页面来保存表单会话变量,然后将它们重定向到相应的页面?我想这将允许我分配会话变量,而不会覆盖它们。我会在每个页面上实现它吗?这也缺少一个括号,我不完全确定第一个语句应该在哪里结束,或者它是否只是一个大语句。对不起,我更新了代码,现在应该是正确的。这是一个很大的语句,只针对
$name
——它被称为三元运算符。是的,你可以在每一个你可以从表格中找到的页面上实现这个功能。在任何其他页面上,我都会假设
$\u会话
已经设置好了,不需要检查。如果客户希望将数量从第一页更改回0,则此代码不允许,只保留他们以前的会话变量。我没有想到这一点-删除了对
空的检查
-您可能需要进行更多检查,以查看数量是否设置为数字,但这可能没那么重要。
<?php 
session_start();
    if (empty($_SESSION['name']) or empty($_SESSION['email'])) {
        $_SESSION['name'] = $POST_['name'];
        $_SESSION['email'] = $POST_['email'];
    }
    else {
        $name = $_SESSION['name'];
        $name = $_SESSION['email'];
    }

    if (empty($_SESSION['platter_quantity']) or empty($_SESSION['yogurt_quantity']) or ($_SESSION['waffles_quantity'])) {
        $_SESSION['platter_quantity'] = $POST_['platter_quantity'];
        $_SESSION['yogurt_quantity'] = $POST_['yogurt_quantity'];
        $_SESSION['waffles_quantity'] = $POST_['waffles_quantity'];
    }
    else {
        $platter_quantity = $_SESSION['platter_quantity'];
        $yogurt_quantity = $_SESSION['yogurt_quantity'];
        $waffles_quantity = $_SESSION['waffles_quantity'];
    }
?>
$name = $_SESSION['name'] = (isset($_POST['name']) ? $_POST['name'] : ((isset($_SESSION['name']) ? $_SESSION['name'] : '')));