2014-11-05 60 views
0

對於我正在爲一個班級工作的購物車應用程序,我必須在每個步驟中顯示信息。我的問題是我只能從上一步顯示信息。對於第1步,從收音機中選擇一個項目。然後,它被保存,像這樣:

 function processStep1() { 
      //Implemented sessions 
      $_SESSION["items"] = $_POST["items"]; 
      displayStep2(); 
     } 

第二步要求的數量,然後驗證它,就像這樣:

 function processStep2() { 
      //Implemented sessions 
      $_SESSION["quantity"] = $_POST["quantity"]; 
      if (preg_match('/^\d+$/',$_POST["quantity"])) { 
      displayStep3(); 
      } else { 
      echo "ERROR: Quantity entered was invalid. Please try again."; 
      displayStep1(); 
      } 
     } 

(順便說一句,我似乎無法得到這個剛剛刷新當前步驟(這將是displayStep2)當輸入不是一個整數,因爲我每次嘗試時都會得到一個錯誤。如果任何人有答案,爲什麼會這樣,這也是有幫助的。)

但是,然後在窗體的步驟3上,我嘗試運行以下行:

  <p>You have selected <?php echo $_POST["quantity"] ?> units of the <?php echo $_POST["items"] ?>.<p> 

每次發生錯誤都會響應。我已經嘗試了相同輸出的各種配置,並確定它總是會解析$ _POST [「quantity」],但從不會解析$ _POST [「items」]。我需要它來做到這一點。

+0

你是否用'session_start()'開始了你的會話?這必須在讀取或寫入會話數據的每個腳本的頂部完成。接下來,一定要讀取存儲在會話中的數據,而不是$ _POST變量:'<?php echo $ _SESSION ['quantity']?> units ... <?php echo $ _SESSION ['items']?> ...' – 2014-11-05 19:54:36

+0

在這裏脫離主題咆哮:不要使用正則表達式來檢查數值是否爲數值,而是使用本地函數(http://php.net/manual/en/function.is-numeric.php) – DarkBee 2014-11-05 20:05:19

回答

2

您的第三個表單不會「看到」$ _POST ['items'],因爲它沒有被提交到該表單。您將其存儲在會話中。在第三個表格上開始一個新的會話並請求$ _SESSION ['items']。

步驟1

<form name="step1" method="post" action="whateverPageContaintsProcessStep1.php"> 
    <input type="radio" name="items" value="item1">Item 1 
    <input type="radio" name="items" value="item2">Item 2 
</form> 

當我們提出我們的形式將被髮送$ _ POST數據將是我們選擇,我們選擇了單選按鈕的值。

步驟2

<form name="step2" method="post" action="whateverPageContaintsProcessStep2.php"> 
    <input type="number" name="quantity" value="0" /> 
</form> 

當我們提交Form 2上$ _ POST數據將包含一個名爲數量文本框的值,然而,由於這種形式不包含前面的單選按鈕這個值將不會被髮送到服務器,因此我們將無法在'whateverPageContaintsProcessStep2.php'中訪問它。

+0

一個令人震驚的簡單而有效的答案。很明顯,我在PHP上很糟糕。儘管如此,它的效果很好,所以謝謝! – user3530169 2014-11-05 20:04:08

+0

更新了頁面之間數據發送的示例。 – Seunhaab 2014-11-05 20:08:28