2016-11-19 79 views
1

我在寫一個有3頁的程序。如何保持具有表單的頁面之間的會話變量?

在第1頁上,用戶可以選擇一定數量的他想要購買的早餐產品。選擇一個數量後,用戶點擊提交按鈕,如果用戶沒有註冊,他會讓他去註冊。如果用戶已經註冊,它將引導他們到第3頁。然而,如果用戶首先進入第2頁並且沒有從第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> 

第2頁:

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

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

<ul> 
    <li><a href="product.php">Product</a></li> 
    <li><a class="active" 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> 
<br> 

<?php 
$action = ''; 
if (!empty($_SESSION['platter_quantity']) or !empty($_SESSION['yogurt_quantity']) or !empty($_SESSION['waffles_quantity'])) { 
    $action = "invoice.php"; 
    } 
else { 
    $action = "product.php"; 
    } 
?> 

<form action="<?php echo $action; ?>" method="post"> 
    Name: <input type="text" name="name" pattern="[A-Za-z]" required><br><br> 
    E-mail: <input type="text" name="email" pattern="/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-][email protected][a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/" required><br><br> 
    <input type="submit"> 
</form> 
<br> 
<?php 
print_r($_SESSION); 
echo "<br>Platter: " . $_SESSION["platter_quantity"] . "<br>"; 
echo "Yogurt: " . $_SESSION["yogurt_quantity"] . "<br>"; 
echo "Waffles: " . $_SESSION["waffles_quantity"]; 
?> 
</body> 
</html> 

第3頁:

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

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

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

<h1>Hi! Welcome <?php echo $_SESSION['name']; ?>! </h1> 
<?php 
print_r($_SESSION); 
echo "<br>Platter: " . $platter_quantity . "<br>"; 
echo "Yogurt: " . $yogurt_quantity . "<br>"; 
echo "Waffles: " . $waffles_quantity; 
?> 
</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']; 
    } 
?> 
+0

也許檢查在覆蓋之前它是否爲空? 'if(empty($ _ SESSION ['name']))$ _SESSION ['name'] = $ _POST ['name'];' –

+0

我試過這樣做,它似乎並沒有保存會話變量現在。 – ChaCol

+0

我能否創建一個空白頁面來保存表單會話變量,然後將它們重定向到相應的頁面?我認爲這將允許我分配會話變量而不會覆蓋它們。 – ChaCol

回答

2

你永遠不插入$ _POST或$ _GET沒有它們是否設置isset($_POST['variable'])先檢查,你可以在這裏使用支票 - 檢查$ _POST變量是否存在,如果存在,則使用它們,如果不存在,則分配$ _SESSION變量。所以在第3頁上,你會看到類似的東西:

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

等等的其他變量。它所做的是檢查$ _POST,如果它被設置,它會更新$ _SESSION變量,如果沒有設置它,它會更新$ _SESSION變量和已有的$ _SESSION變量,如果沒有, t也存在,它將變量$name$_SESSION['name']設置爲空,然後可以在腳本中稍後檢查(以及重定向等)。

+0

我會在每一頁上實現這個嗎? – ChaCol

+0

這也缺少一個括號,我不完全確定第一個語句應該結束的位置,還是隻是一個大的語句。 – ChaCol

+0

對不起,我更新了代碼,現在應該是正確的。這是一個很大的聲明,只是'$ name' - 它被稱爲三元運算符。是的,你可以在你可以從表格到達的每一頁上實現這一點。在任何其他頁面上,我都會假設'$ _SESSION'已經被設置,並且不需要檢查。 – junkfoodjunkie

相關問題