[英]PHP foreach loop only display selected option if a value is selected from top order
我在一個賓館的桌子上有5個房間,用戶必須檢查他們想要預訂的房間或房間,並選擇他們希望擁有的選項,例如人數,早餐選項,晚餐選項和床位選項。
為了解釋出了什么問題,讓我舉幾個例子:
假設我們按照出現順序打電話給5個房間:
元素間
地球室
水室
空氣室
消防室
假設我使用任何下拉值檢查元素房間和地球房間,我得到以下內容:
元素間
人數:1
晚餐課程:120
早餐:70
床:國王
&&
地球室
人數:2
晚餐課程:200
早餐:70
床:2張單人床
以上確實給出了正確的輸出。
但現在我只選擇水房或在Element房間下面顯示的任何其他房間:
我明白了:
水房(或元素房間除外)
人數:0
晚餐課程:0
早餐:0
床:選擇床的尺寸
如果我從Element房間中選擇每個房間,我會正確地獲得所有值,但如果我選擇Element房間然后選擇Air room(不選擇Earth room),那么我得到:
元素間
人數: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/>' ;
}
}
發生這種情況,因為只有經過檢查的復選框才會通過Post-Request傳輸。 因此,例如,如果您的元素室和地球室被選中,您將獲得:
$_POST[room-selected] => Array
(
[0] => Element Room
[1] => Earth Room
)
但是如果您選擇任何其他房間,數組仍然會以索引0開頭。所以按照您的示例,如果您只選擇水室,您將獲得:
$_POST[room-selected] => Array
(
[0] => Water Room
)
但是,選擇字段將始終為您提供包含所有信息的數組,因為始終存在要傳輸的值。 這意味着第一個被檢查的房間將始終引用Select-Arrays的第一個元素。
您可以使用表單的字符串鍵來避免這種情況,例如:
<input name="room-selected[<?php echo $room->post_title; ?>]" />
之后您將不得不更改foreach-Loop或Select-Name-Arrays。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.