【问题标题】:Adding variables based on user selection根据用户选择添加变量
【发布时间】:2014-11-21 18:31:48
【问题描述】:

我为一家餐厅网站创建了一个预订页面,并提供了一份用于预订晚餐的表格。它包含一个下拉框,允许用户选择将在他们的聚会中用餐的人数。它还包含一个单选按钮,允许用户选择是否希望坐在 VIP 区。

一旦表单验证成功,用户将被发送到一个确认页面,他们输入的预订详细信息将显示给他们。

派对中的每个人都应额外支付 5 英镑的预订费,如果他们希望坐在 VIP 区,则需额外支付 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);
}
?>

目前没有回显计算,任何人都可以更正我的代码,以便我了解我做错了什么吗?谢谢

【问题讨论】:

标签: php forms addition


【解决方案1】:

您有几个问题可能会导致计算被回显。

首先,改变

<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);

【讨论】:

    【解决方案2】:

    我认为我们需要查看应用程序的“用户被发送到确认页面”部分,但如果您验证然后将用户重定向到新页面,则 $_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

    【讨论】:

    • 这似乎有效,但总成本不正确,也许您的计算中有错误? :( 例如,如果我放了 1 人 (5 英镑) 并且是 vip (5 英镑),则显示 30 英镑的总费用
    • 实际上很奇怪,它现在似乎可以工作了?不知道为什么我第一次得到的价格不正确
    • 酷,很高兴你成功了!您看到的差异可能是因为事先在 SESSION 中的数据,因为会话是 PHP 尝试成为有状态的。也请尽管@AdamMacDonald 关于强化您的帖子参数所说的话。永远不要相信用户输入的数据!
    • 刚刚注意到它仍然会为 vip 添加 5,即使它已被检查为否,有没有办法解决这个问题?非常感谢您的所有反馈,我真的很感激。我会考虑你告诉我的
    • 没问题。因此,当您有机会时,请查看 php.net 上的函数 isset() - 了解 isset、empty 和 is_null 等将是您必须一直处理的事情。如果设置了变量并且不为空,则 isset() 将返回 true - 因此,如果它为空,它仍将解析为 true。在您的三元运算符中尝试 (isset($_SESSION['vip'] ) && $_SESSION['vip'] == 1))。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 2016-03-02
    • 2014-10-31
    相关资源
    最近更新 更多