Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于html表单的PHP计算_Php_Variables_Session_Addition - Fatal编程技术网

基于html表单的PHP计算

基于html表单的PHP计算,php,variables,session,addition,Php,Variables,Session,Addition,我为一家餐厅网站创建了一个预订页面,并提供了预订晚餐的表单。它包含一个下拉框,允许用户选择参加聚会的人数。它还包含一个单选按钮,允许用户选择是否希望在VIP区就座(是/否) 参加派对的每个人都应额外支付5英镑的订票费,如果他们希望在贵宾区就座,将额外收取5英镑。表单验证成功后,用户将被发送到确认页面,在该页面中,他们输入的预订详细信息将显示给他们 目前,我的网站的确认页面上有一个计算结果,它正确地计算了聚会规模成本,但我的问题是,即使VIP区域选择为“否”,它仍然会增加5英镑的费用,就好像用户选

我为一家餐厅网站创建了一个预订页面,并提供了预订晚餐的表单。它包含一个下拉框,允许用户选择参加聚会的人数。它还包含一个单选按钮,允许用户选择是否希望在VIP区就座(是/否)

参加派对的每个人都应额外支付5英镑的订票费,如果他们希望在贵宾区就座,将额外收取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">

...
选择聚会规模*:


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

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

然后加上每个人的费用,再加上$vip_费用,就没有必要用会话来复杂化代码了。只需使用$\u帖子:

<?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;
    }
?>

...
请选择
...
是/>
...

无标题文件

您的三元语句当前仅检查是否设置了
$\u会话['vip']
。问题在于,无论用户选择什么(“是”或“否”),都会设置会话变量,因为在设置会话变量的部分,如果
$\u 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);
     }
?>
总预订成本:


您可以通过添加一个从1到10的循环“for”来改进代码,使您的s;)谢谢你的反馈,有什么方法可以通过会话来做到这一点吗?我之所以这么问,是因为我没有太多时间来修改代码,而且除了这一次计算之外,我的一切都正常工作:(你能给我一个更好的例子吗?我是php新手,这对我来说很难理解。对不起
<?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>
<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);
     }
?>