2014-11-21 96 views
0

我爲餐館網站創建了一個預訂頁面,其中有一張表格用於預訂晚餐預訂。它包含一個下拉框,允許用戶選擇在聚會中用餐的人數。它還包含一個單選按鈕,允許用戶選擇是否希望在貴賓區就座。根據用戶選擇添加變量

表單驗證成功後,用戶將被髮送到確認頁面,在此處他們輸入的預訂詳細信息將顯示給他們。

參加聚會的每個人都需要額外支付5英鎊的預訂費,如果他們想要在貴賓區就座,他們將被收取額外的5英鎊。

我希望將這兩個因素加在一起,並在確認頁面上向用戶顯示預訂總費用,但我目前使用的代碼並未執行此操作。

這裏是我的預訂頁面上的相關代碼:

<?php 
session_start(); 
if (isset($_POST['submit'])) { 
    $_SESSION['party'] = $_POST['party']; 
} 

if (!empty($_POST['vip'])) 
    $_SESSION['vip'] = $_POST['vip']; 
?> 

... 

<strong>Select Party Size* :</strong> 
<br> 
<select name="party" id="party" value="<?php echo $party;?>"> 
<option value="">Please Select</option> 
<option <?php if (isset($party) && $party=="1") echo "selected";?> value="1">1 Person (+£5)</option> 
<option <?php if (isset($party) && $party=="2") echo "selected";?> value="2">2 People (+£10)</option> 
<option <?php if (isset($party) && $party=="3") echo "selected";?> value="3">3 People (+£15)</option> 
<option <?php if (isset($party) && $party=="4") echo "selected";?> value="4">4 People (+£20)</option> 
<option <?php if (isset($party) && $party=="5") echo "selected";?> value="5">5 People (+£25)</option> 
<option <?php if (isset($party) && $party=="6") echo "selected";?> value="6">6 People (+£30)</option> 
<option <?php if (isset($party) && $party=="7") echo "selected";?> value="7">7 People (+£35)</option> 
<option <?php if (isset($party) && $party=="8") echo "selected";?> value="8">8 People (+£40)</option> 
<option <?php if (isset($party) && $party=="9") echo "selected";?> value="9">9 People (+£45)</option> 
<option <?php if (isset($party) && $party=="10") echo "selected";?> value="10">10+ People (+£50)</option> 
</select> 

<strong> VIP area* : </strong> <br><br> 
Yes (+£5) <input type="radio" name="vip" <?php if (isset($vip) && $vip=="Yes") echo "checked";?> value="Yes"> 
<br><span id="vip" class="error"><?php echo $vipErr;?></span><br> 
No <input type="radio" name="vip" <?php if (isset($vip) && $vip=="No") echo "checked";?> value="No"> 

這是我的確認網頁上的相關代碼:

<b>Total Reservation Costs: </b> £ 
<?php 
if (isset($_POST['party']) && is_numeric($_POST['party'])) { 
    $party = (int)$_POST['party']; 
    $vip = isset($_POST['vip']) ? 5 : 0; 
    echo "Total is: " . (($party * 5) + $vip); 
} 
?> 

目前還沒有計算呼應,會有人能夠糾正我的代碼,所以我可以理解我做錯了什麼?謝謝

+0

是「Total is:」是否回顯? – dan08 2014-11-21 18:35:43

+0

@ dan08不,這不是 – Oscar 2014-11-21 18:43:42

+0

我以爲我的回答沒有幫助嗎? http://stackoverflow.com/questions/27050838/adding-two-variables-php/27050899#27050899 – robbmj 2014-11-23 00:13:39

回答

0

我想我們'需要看到「用戶被髮送到確認頁面」部分的應用程序,但是如果您驗證然後重定向用戶到一個新的頁面,$ _POST全局將是空的。看來你推到POST SESSION,所以也許這樣的事情,而不是:

<b>Total Reservation Costs: </b> £ 
<?php 
    if (isset($_SESSION['party']) && is_numeric($_SESSION['party'])) { 
     $party = (int)$_SESSION['party']; 
     $vip = isset($_SESSION['vip']) ? 5 : 0; 
     echo "Total is: " . (($party * 5) + $vip); 
    } 
?> 

而且,正如旁白 - 你可能不想推未驗證$ POST信息到$ SESSION您的應用程序的安全性。驗證$ POST信息,然後將其推入$ SESSION

+0

這似乎正在工作,但總成本回聲不是正確的,也許這是你的計算某處的錯誤? :(例如,如果我把1人(5英鎊)和是貴賓(5英鎊),顯示£30總成本 – Oscar 2014-11-21 18:47:05

+0

實際上很奇怪,似乎現在工作?不知道爲什麼我第一次得到一個不正確的價格 – Oscar 2014-11-21 18:49:26

+0

酷,很高興你的工作能夠發揮作用!你看到的差異可能是因爲之前的SESSION內部的數據,因爲這個會話是PHP試圖成爲有狀態的,也請給一些@AdamMacDonald關於什麼的意見強化你的帖子參數,永遠不要信任用戶輸入的數據! – gadhra 2014-11-21 19:11:26

3

你有幾個問題,可能有助於計算被回顯。

首先,改變

<select name="party" id="party" value="<?php echo $party;?>"> 

<select name="party" id="party"> 

,因爲你的價值是從選項列表來。

下,變化:

(isset($party) && $party=="1") 

(isset($_SESSION['party']) && $_SESSION['party']=="1") 

第三,你想要的方式來硬化你的帖子參數..這樣的事情也許:

$_SESSION['party'] = htmlentities($_POST['party'],ENT_QUOTES);