2014-11-21 1 views
0

Я создал страницу бронирования для веб-сайта ресторана с формой, чтобы забронировать заказ на обед. Он содержит раскрывающийся список, который позволяет пользователю выбирать количество людей, которые будут обедать на своей вечеринке. Он также содержит переключатель, позволяющий пользователю выбирать, хотите ли они сидеть в 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); 
} 
?> 

В настоящее время вычисления не вторит, что кто-нибудь сможет исправить мой код, чтобы я мог понять, что я сделал неправильно? Спасибо

+0

Является ли «Total is:» эхом? – dan08

+0

@ dan08 Нет, это не – Oscar

+0

Я думал, что мой ответ не помогло? http://stackoverflow.com/questions/27050838/adding-two-variables-php/27050899#27050899 – robbmj

ответ

0

Я думаю, что мы 'нужно видеть, что пользователь отправляется на страницу подтверждения страницы, но если вы проверяете и затем перенаправляете пользователя на новую страницу, глобальный $ _POST будет пустым. Похоже, вы нажимаете POST в ЗАСЕДАНИЕ, поэтому, возможно, что-то вроде этого, вместо:

<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 фунтов стерлингов) и да на vip (£ 5), общая стоимость 30 фунтов стерлингов отображается – Oscar

+0

На самом деле, как ни странно, похоже, что сейчас работает? Не знаю, почему я впервые получил неправильную цену – Oscar

+0

Cool , рад, что вы его работаете! Разница, которую вы видите, может быть из-за данных, которые были внутри SESSION заранее, так как сеанс является попыткой PHP быть в состоянии ожидания. Также, пожалуйста, дайте некоторое представление о том, что @AdamMacDonald должно было сказать относительно упростить ваши параметры сообщений Никогда не доверяйте введенным данным пользователя! – gadhra

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