2014-11-21 67 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);