循环中的PHP POST select框未按正确顺序显示值
我有一个复选框和一个选择下拉列表来选择一个晚餐课程,循环显示4个房间。当我选择多个房间时,我会得到以下输出,例如: 大象房 三道菜 两道菜 和 狮子房 三道菜 两道菜 但我想要这个输出: 如果我为大象房选择了两道菜,我想要: 大象房 两道菜 和 如果我为Lion Room选择了三道菜,我想要: 狮子房 三道菜 我尝试过通过使用foreach循环,以多种方式修改foreach循环。我还不是循环方面的专家,循环中的循环 HTML循环中的PHP POST select框未按正确顺序显示值,php,html,wordpress,loops,post,Php,Html,Wordpress,Loops,Post,我有一个复选框和一个选择下拉列表来选择一个晚餐课程,循环显示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;
}
}
}
}
}
}