【问题标题】:PHP post how to get values of options inside a foreach loop to display the selected valuePHP发布如何在foreach循环中获取选项值以显示所选值
【发布时间】:2019-04-08 09:27:55
【问题描述】:

我在宾馆的桌子上有 5 个房间,用户必须检查他们想要预订的一个或多个房间,并选择他们希望拥有的选项,例如人数、早餐选项、晚餐选项和床位选项。

假设我们按照出现的顺序来称呼这 5 个房间:

元素房

地球房间

水房

空气室

消防室

如果我按从上到下的顺序选择房间(如 Element 到 Fire 房间),我会得到选项结果,但如果我选择介于两者之间的任何房间,我会得到 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 html post foreach


    【解决方案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 时使用 $key。

    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,但名称确实显示
    • 是不是像这样'people-select[$id]'把id输入到字段名变量中后
    • 在名称属性中输入这些值后,下拉值绝对没有结果,只有我检查过的房间名称
    • 好吧,我刚刚意识到你的 room_selected 你使用 post_name 的值作为值。我将在上面修改我的答案。
    • 谢谢,我试过了,结果一样。问题可能出在我发布结果的 foreach 循环中吗?我已经做了三天了,我不明白,我不确定我是否循环不正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2022-01-13
    • 2022-11-23
    相关资源
    最近更新 更多