Сообщение PHP о том, как получить значения параметров внутри цикла foreach для отображения выбранного значения

У меня есть 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/>' ;

    }

}

Я хочу иметь возможность выбирать любую комнату и отображать значения параметров

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
1 067
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы сказал, потому что вы не используете какие-либо ключи в своих массивах 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/>' ;

    }

}

Я сделал это. Проблема в том, что когда я выбираю первую комнату, все хорошо, если я выбираю первую комнату и вторую комнату, все хорошо и т. д. Но если я выбираю, например, первую комнату и четвертую комнату, выход первой комнаты правильный, но четвертая комната дает 0 по параметрам, но имя отображается

I Love Code 08.04.2019 11:48

Это после того, как идентификатор вводится в переменную имени поля, например, «люди-выбирают [$ id]»

ColinMD 08.04.2019 11:51

После ввода этих значений в атрибуты имени я не получаю абсолютно никаких результатов из раскрывающихся значений, только имена комнат, которые я проверил.

I Love Code 08.04.2019 11:56

Хорошо, я только что понял, что для вашего room_selected вы используете значение post_name в качестве значения. Я поправлю свой ответ выше.

ColinMD 08.04.2019 12:10

Спасибо, попробовал, результат тот же. Может ли проблема быть в моем цикле foreach, где я публикую результаты? Я занимаюсь этим уже три дня, и я не понимаю, я не уверен, что, может быть, я неправильно зацикливаюсь.

I Love Code 08.04.2019 12:10

Ваше последнее изменение возвращает пустые значения для раскрывающихся списков, но названия комнат по-прежнему отображаются.

I Love Code 08.04.2019 12:15

Да, извините, я заметил, что вы использовали другое поле для идентификатора в флажке. Я обновил свой ответ. Итак, теперь вы сохраняете результаты выбора в массиве, используя post_name в качестве ключа. Итак, $_POST['people-select']['Element Room']. Поэтому, когда мы зацикливаем $room-selected, нам нужно использовать переменную $key вместо $id.

ColinMD 08.04.2019 12:16

Это сработало! Большое спасибо! Я отмечу ваш ответ как правильный :) большое спасибо

I Love Code 08.04.2019 12:24

Нет проблем… добрался в итоге :)

ColinMD 08.04.2019 12:32

Другие вопросы по теме