【问题标题】:PHP calculation from html form从 html 表单进行 PHP 计算
【发布时间】:2015-01-20 14:36:45
【问题描述】:

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

派对中的每个人都应额外支付 5 英镑的预订费,如果他们希望坐在 VIP 区,则需额外支付 5 英镑。一旦表单验证成功,用户将被发送到一个确认页面,他们输入的预订详细信息将显示给他们。

目前我的网站的确认页面上有一个计算,它正确计算了聚会规模的费用,但我的问题是,即使 VIP 区域选择为“否”,它仍然会增加 5 英镑的费用如果用户选择了“是”。

这是我的预订页面上的相关 html 代码:

<?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><br><br> £
<?php
     if (isset($_SESSION['party']) && is_numeric($_SESSION['party'])) {
         $party = (int)$_SESSION['party'];
         $vip = isset($_SESSION['vip']) ? 5 : 0;
         echo (($party * 5) + $vip);
     }
?>

如果用户选择“是”,有谁知道我如何启用计算,只为贵宾区座位添加额外的 5 英镑?我是网络语言的新手,因此将不胜感激。谢谢!

【问题讨论】:

  • 您可以通过添加一个从 1 到 10 的循环“for”来改进您的代码,以使您的

标签: php variables session addition


【解决方案1】:

您的三元语句目前仅检查是否设置了$_SESSION['vip']。问题是无论用户选择什么(“是”或“否”)都会设置它,因为在您设置会话变量的部分,如果$_POST['vip'] 不为空,则条件语句会设置会话变量。

尝试检查它是否等于“是”,如下所示:

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

【讨论】:

    【解决方案2】:

    无需使用会话使您的代码复杂化。只需使用 $_POST :

    <?php
    
    $options =  array(
        1 => '1 Person (+£5)',
        2 => '2 Person (+£10)',
        3 => '3 Person (+£15)',
        ...
        10 => '1 Person (+£50)',
    );
    ?>
    ...
    
    <select name="party" id="party">
        <option value="-1">Please select</option>
        <?php
            foreach ($options as $persons => $text) {
                $selected = isset($_POST['party'] && $_POST['party'] == $persons) ? ' selected' : '';
                echo '<option value="'.$persons.'".'.$selected.'>'.$text.'</option>';
            }
        ?>
    </select>
    ...
    Yes <input type="radio" value="1" name="vip" id="vip_yes" <?php if (isset($_POST['vip']) && $_POST['vip'] == 1) { echo 'checked' } ?> />
    No <input type="radio" value="0" name="vip" id="vip_no" <?php if (isset($_POST['vip']) && $_POST['vip'] == 0) { echo 'checked' } ?> />
    
    
    ...
    <?php 
        if (isset($_POST['party']) && is_numeric($_POST['party']) ) {
            $price = $_POST['party'] * 5;
            if (isset($_POST['vip']) && $_POST['vip'] == 1) $price += 5;
        }else{
            //-- no post    
            $price = 0;
        }
    
        if ($price == 0) {
            echo 'Please select your options..';
        }else{
            echo 'Your price is £' . $price;
        }
    ?>
    

    【讨论】:

    • 感谢您的反馈,有没有办法通过会话做到这一点?我之所以问,是因为我没有太多时间来更改我的代码,而且除了这个计算之外,我的一切都正常工作:(
    【解决方案3】:

    您需要重新计算并为成为 VIP 的成本添加一个变量。像

    if ($vip  =='Yes'){$vip_cost = +5)}else{$vip_cost=0}
    

    然后加上每个人的成本,加上$vip_cost

    【讨论】:

    • 你能给我一个更好的例子吗?我是 php 新手,这对我来说很难理解,抱歉
    【解决方案4】:
    <?php
    $form = '<form action="'.$_SERVER['PHP_SELF'].'" method="post">
    <select name="party" id="party" >
        <option value="">--Select People--</option>      
        <option value="1">1 People (+£5)</option>        
        <option value="2">2 People (+£10)</option>       
        <option value="3">3 People (+£15)</option>       
        <option value="4">4 People (+£20)</option>       
        <option value="5">5 People (+£25)</option>       
        <option value="6">6 People (+£30)</option>       
        <option value="7">7 People (+£35)</option>       
        <option value="8">8 People (+£40)</option>       
        <option value="9">9 People (+£45)</option> 
        <option value="10">10People (+£50)</option>
    </select><br /><br />
    
    <strong> VIP area* : </strong> <br><br>
    Yes (+£5) <input type="radio" name="vip" value="Yes">
    No <input type="radio" name="vip" value="No"><br /><br />
    
    <input type="submit" value="Submit" name="submit" />';
    
    
    if (isset($_POST['submit'])){
    if (isset($_POST['party'])){
        $cost =  ($_POST['party'] *5); 
        if ($_POST['vip']  =='Yes'){$vip_cost = 5; $vip_text='with vip';}else{$vip_cost=0; $vip_text='';}
    $total = ($cost+$vip_cost);
    $display = 'Your reservation for '.$_POST['paty'].' '.$vip_text.' will cost '.$total; 
    }
        else{
     $display = 'Please Select How Many People<br />'.$form;}
    
    }else{
    
    $display=$form;
    }
    
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
    </head>
    
    <body>
    <?php echo $display;?>
    </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      相关资源
      最近更新 更多