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

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

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

Элементная комната

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

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

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

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

Я получаю опцию результатов, если я выбираю комнаты сверху вниз, такие как комнаты от Элемента до Огня, но я получаю 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 Ответ

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

Я бы сказал, потому что вы не используете ключи в своих массивах HTML-форм.Текущее решение немного хрупко, поэтому вам нужно либо быть более конкретным в именовании полей, либо включить ключ в массив.

<?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[<?php echo $room->post_title; ?>]" 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[<?php echo $room->post_title; ?>]">
    <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[<?php echo $room->post_title; ?>]">
    <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[<?php echo $room->post_title; ?>]">
    <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; ?>

Затем при запуске цикла вместо проверки $ id используйте $ключ.

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[$key],
            'dinner' => $dinn[$key],
            'breakfast'    => $bf[$key],
            'bed_type' => $bed[$key],
        );
    }

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

    }

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