PHP цикл foreach отображает только выбранную опцию, если значение выбрано из верхнего порядка - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть 5 комнат в столе для гостевого дома, и пользователь должен проверить комнату или комнаты, которые он хочет забронировать, и выбрать варианты, которые он хочет иметь, такие как количество человек, вариант завтрака, вариант ужина и кровать вариант.

Чтобы объяснить, что происходит, позвольте мне привести несколько примеров:

Допустим, мы называем 5 комнат в порядке появления:

Элемент номер

Земля Комната

Водная комната

Воздушная комната

Пожарная комната

Допустим, я проверяю Элементную комнату и Земную комнату с любым из выпадающих значений, я получаю следующее, например:

Элемент номер

Количество человек: 1

Обеденный курс: 120

Завтрак: 70

Кровать: King

&&

Земля Комната

Количество человек: 2

Ужин Курс: 200

Завтрак: 70

Кровать: 2 односпальных

Выше приведено правильное значение.

Но теперь я выбираю только комнату Воды или любую другую комнату, которая отображается под комнатой Элемента:

Я получаю:

Водная комната (или любая, кроме Элементной комнаты)

Количество человек: 0

Обеденный курс: 0

Завтрак: 0

Кровать: выберите размер кровати

Если я выберу каждую комнату из комнаты Элементов вниз, я получу все значения правильно, но если я выберу комнату Элементов и затем Комнату Воздуха (не выбирая комнату Земли), то я получу это:

Элемент номер

Количество человек: 1

Обеденный курс: 120

Завтрак: 70

Кровать: Кинг

&&

Воздушная комната

Количество человек: 0

Обеденный курс: 0

Завтрак: 0

Кровать: выберите размер кровати

Как будто мой код будет зацикливаться только для каждого значения сверху вниз в порядке, а не для других выбранных значений между ними, но проверенные номера всегда правильные, но не выбранные параметры.

Вот мой HTML:

<form class="booking-form" name="book-room-form" action="" id="contactForm" method="post" novalidate>

<?php foreach ( $rooms as $room ) : ?>

<input type="checkbox" class="form-check-input" name="room-selected[]" value="<?php echo $room->post_title; ?>">

<select class="num-person select-update" id="<?php echo 'r-' . $room->ID; ?>" name="people-select[]" required>
  <option value="0" selected>Select Number of Persons</option>
  <option value="1">1 person R600</option>
  <option value="2">2 persons R800</option>
</select>

<select class="num-dinner select-update" id="<?php echo 'd-' . $room->ID; ?>" name="dinner-select[]">
    <option value="0" selected>Select Dinner Course</option>
    <option value="120">Two Course Dinner R120</option>
    <option value="200">Three Course Dinner R200</option>
</select>

<select class="num-bf select-update" id="<?php echo 'b-' . $room->ID; ?>" name="breakfast-select[]">
    <option value="0" selected>Select Breakfast Type</option>
    <option value="70">Basic Breakfast R70</option>
    <option value="120">Full Breakfast R120</option>
</select>

<select class="bed-select" name="bed-select[]">
    <option selected>Select Bed Size</option>
    <option value="King Bed">King Bed</option>
    <option value="2 Single Beds">2 Single Beds</option>
</select>



<?php endforeach; ?>

    <button name="submit-request" type="submit" class="btn btn-primary">Submit</button>
</form>

Вот мой код:

if(isset($_POST['submit-request'])) {

    $room_selected = $_POST['room-selected'];
    $numPeople = $_POST['people-select'];
    $dinnerSelect = $_POST['dinner-select'];
    $breakfastSelect = $_POST['breakfast-select'];
    $bedSelect = $_POST['bed-select'];

    $room = $room_selected;
    $num = $numPeople;
    $dinn = $dinnerSelect;
    $bf  = $breakfastSelect;
    $bed = $bedSelect;

    foreach ($room as $id => $key) {
    //$key returns the room name
      if($key) {
        $result[$key] = array(
            'num_person'  => $num[$id],
            'dinner' => $dinn[$id],
            'breakfast'    => $bf[$id],
            'bed_type' => $bed[$id],
        );
    }

    echo $key . '<br/>' . $num[$id] . '<br/>' . $dinn[$id] . '<br/>' . $bf[$id] . '<br/>' . $bed[$id] . '<br/>' ;

    }

}

1 Ответ

0 голосов
/ 08 апреля 2019

Это происходит, потому что только проверенные флажки будут передаваться через пост-запрос.Так, например, если ваша Элементная Комната и ваша Комната Земли проверены, вы получите:

$_POST[room-selected] => Array
        (
            [0] => Element Room
            [1] => Earth Room
        )

Но если вы выберете любую другую комнату, Массив все равно будет начинаться с индекса 0. ПоэтомуНапример, если вы просто выберете Водную комнату, вы получите:

$_POST[room-selected] => Array
        (
            [0] => Water Room
        )

Однако поля выбора всегда будут содержать массив, содержащий всю информацию, потому что всегда есть значение для передачи.Это означает, что первая проверенная комната всегда будет ссылаться на первый элемент ваших массивов выбора.

Вы можете работать со строковыми ключами для своей формы, чтобы избежать этого, например:

<input name="room-selected[<?php echo $room->post_title; ?>]" />

После этого вам придется изменить либо цикл foreach, либо массивы выбора имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...