循环中的PHP POST select框未按正确顺序显示值

循环中的PHP POST select框未按正确顺序显示值,php,html,wordpress,loops,post,Php,Html,Wordpress,Loops,Post,我有一个复选框和一个选择下拉列表来选择一个晚餐课程,循环显示4个房间。当我选择多个房间时,我会得到以下输出,例如: 大象房 三道菜 两道菜 和 狮子房 三道菜 两道菜 但我想要这个输出: 如果我为大象房选择了两道菜,我想要: 大象房 两道菜 和 如果我为Lion Room选择了三道菜,我想要: 狮子房 三道菜 我尝试过通过使用foreach循环,以多种方式修改foreach循环。我还不是循环方面的专家,循环中的循环 HTML 挑选 奇怪的是,您将循环表单,并且在每个表单中只包含一个文本输入和一

我有一个复选框和一个选择下拉列表来选择一个晚餐课程,循环显示4个房间。当我选择多个房间时,我会得到以下输出,例如:

大象房

三道菜

两道菜

和 狮子房

三道菜

两道菜

但我想要这个输出: 如果我为大象房选择了两道菜,我想要:

大象房

两道菜

和 如果我为Lion Room选择了三道菜,我想要:

狮子房

三道菜

我尝试过通过使用foreach循环,以多种方式修改foreach循环。我还不是循环方面的专家,循环中的循环

HTML


挑选

奇怪的是,您将循环表单,并且在每个表单中只包含一个文本输入和一个选择菜单-似乎更有意义的是,您将使用单个表单,然后循环输入元素,如下所示:

<!-- can leave the ID for the form as it is outside the loop -->
<form name="book-room-form" id="contactForm" method="post">

    <?php while ( have_posts() ) : the_post(); ?>

    <!--- to segregate the looped form elements -->
    <fieldset>

        <div>
            <label class="form-check-label selected-label" for="room-selected">Select</label>
            <!-- remove id attribute from input -->
            <input type="checkbox" class="form-check-input" name="room-selected[]" value="<?php $room_name; ?>">
        </div>

        <select name="dinner-select[]" required>
          <option value="0" selected>Select Dinner Course
          <option value="120">Two Course Dinner
          <option value="200">Three Course Dinner
        </select>

    </fieldset>

    <?php endwhile;?>

    <!-- a single "submit" button rather than however many were generated by the loop -->
    <button name="submit-request" type="submit" class="btn btn-primary">Submit</button>

</form>

挑选

您不能重复循环中的
id
属性~
id=“contactForm”
id=“contactForm”
。表单不需要id,所以可以删除它。@RamRaider感谢您指出,我只是在没有id的情况下尝试了它,但结果仍然是相同的,对问题没有影响,我同意。谢谢,但它给出了相同的输出,我对它进行了很多修改,并根据您给我的内容尝试了不同的方法。但是,switch语句不起作用,它返回一个空白输出,但当我在中插入原始if语句时,它就起作用了,只是两个晚餐课程仍在列表中。关于如何操作循环,您还有其他建议吗?
if(isset($_POST['submit-request']))
{

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

    $roomoption = isset($room_selected) ? $room_selected : false;
    if ($roomoption) {
        foreach ($room_selected as $room){
            if($room){
                echo $room . '<br/>';

                $dinneroption = isset($dinnerSelect) ? $dinnerSelect : false;

                if ($dinneroption) {
                    foreach ($dinnerSelect as $dinn){
                        if($dinn >= 200){
                            echo 'three course <br/>';
                        }
                        elseif($dinn == 120) {
                            echo 'two course <br/>';
                        }
                    }
                }
            }
        }
    }
}
<!-- can leave the ID for the form as it is outside the loop -->
<form name="book-room-form" id="contactForm" method="post">

    <?php while ( have_posts() ) : the_post(); ?>

    <!--- to segregate the looped form elements -->
    <fieldset>

        <div>
            <label class="form-check-label selected-label" for="room-selected">Select</label>
            <!-- remove id attribute from input -->
            <input type="checkbox" class="form-check-input" name="room-selected[]" value="<?php $room_name; ?>">
        </div>

        <select name="dinner-select[]" required>
          <option value="0" selected>Select Dinner Course
          <option value="120">Two Course Dinner
          <option value="200">Three Course Dinner
        </select>

    </fieldset>

    <?php endwhile;?>

    <!-- a single "submit" button rather than however many were generated by the loop -->
    <button name="submit-request" type="submit" class="btn btn-primary">Submit</button>

</form>
if( $_SERVER['REQUEST_METHOD']=='POST' && isset( $_POST['submit-request'], $_POST['room-selected'], $_POST['people-select'], $_POST['dinner-select'] ) ){

    $room_selected = filter_input( INPUT_POST, 'room-selected', FILTER_SANITIZE_STRING );
    $numPeople = filter_input( INPUT_POST, 'people-select', FILTER_SANITIZE_NUMBER_INT );
    $dinnerSelect = filter_input( INPUT_POST, 'dinner-select', FILTER_SANITIZE_NUMBER_INT );

    if( $room_selected & $numPeople & $dinnerSelect ){
        foreach( $room_selected as $room ){

            if( $room ){

                echo $room . '<br/>';

                foreach( $dinnerSelect as $value ){
                    switch( intval( $value ) ){
                        case 120:echo 'two course <br/>';break;
                        case 200:echo 'three course <br/>';break;
                    }
                }
            }
        }
    }
}