PHP calculation from html form

人盡茶涼 提交于 2019-12-10 10:52:13

问题


I have created a reservations page for a restaurant website, with a form present to book a dinner reservation. It contains a dropdown box which allows the user to select the amount of people who will be dining in their party. It also contains a radio button to allow the user to select if they wish to be seated in the VIP area (Yes/ No).

Each person in the party should cost an extra £5 towards their booking fee and if they wish to be seated in the VIP area, they will be charged an additional £5. Once the form validation is successful, the user will be sent to a confirmation page, where the reservation details they have entered, will be displayed to them.

Currently I have a calculation present on the confirmation page of my website, which correctly calculates the party size costs, but my issue is that even if VIP area selection is "No", it is still adding on the £5 fee as if the user has selected "Yes".

Here is the relevant html code on my reservations page:

<?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">

Here is the relevant calculation on the confirmation page:

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

Does anyone know how I can enable the calculation to only add the additional £5 for VIP area seating if the user has selected "Yes"? I am new to web languages so any help will be appreciated. Thank you!


回答1:


Your ternary statement is currently only checking if $_SESSION['vip'] is set. The problem is that it is set no matter what the user chooses ("yes" or "no") because in the part where you set the session variable, the conditional statement sets the session variable if $_POST['vip'] isn't empty.

Try checking if it's equal to "Yes" like this:

<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:


There is no need to complicate your code with sessions. Just use the $_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:


you need to redo the calculation and add a variable for the cost of being VIP. something like

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

then add the cost of each person and add the $vip_cost




回答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>


来源:https://stackoverflow.com/questions/27078470/php-calculation-from-html-form

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!