循环遍历php中的复选框

时间:2012-06-29 19:14:07

标签: php forms checkbox foreach while-loop

我有一个动态页面,可以从Mysql获取一定数量的房间结果,然后将它们作为复选框回显到表单中。由于我在每个结果中没有特定数字,因此我不确定要检查多少个复选框。无论如何,这里是表单中的示例代码:

$rr = 1;
while($ro = mysql_fetch_array($getRooms)){
    $roomName = $ro['HotelRoom'];
    ?>
    <input type="checkbox" name="room<?php echo $rr ?>" value="<?php echo $roomName ?>" /><?php echo $roomName ?>
    <?php
    $rr++;
    }

现在,当我提交表单时,我尝试使用一个函数来获得结果,但我什么都没收到。这是我接收数据的功能:

//Get all rooms
    $nn = 1;
    $retn = '';
    function roomGroup(){
    foreach ($_POST['room'.$nn] as $key => $value) {
        $retn .= $value.",";
        }
    $nn++;
    return $retn;
    }
$rooms = roomGroup();

我从$ rooms变量中得不到任何东西。我也试过这个函数:

    $nn = 1;
    $retn = '';
    function roomGroup(){
    while(isset($_POST['room'.$nn]))
    {
    $roomsn = $_POST['room'.$nn];
    $retn .= $roomsn.",";
    $nn++;
    }
    return $retn;
    }

对我所做错的任何帮助都会非常感激!!!

4 个答案:

答案 0 :(得分:3)

你可以循环$ _POST数组:

$rooms = "";
$first = true;

foreach($_POST as $key => $value) {
    if(strlen($key) >= 4 && substr($key,0,4) == "room") {
        if($first) {
            $rooms .= $value;
            $first = false;
        }
        else 
            $rooms .= ",".$value;
    }
}

答案 1 :(得分:1)

你正在努力做到这一点。 =)

您可以通过在输入元素名称的末尾添加括号来使用HTML为您创建数组。

while($ro = mysql_fetch_array($getRooms)){    
    $roomName = $ro['HotelRoom'];     
    echo '<input type="checkbox" name="room[]" value="'.$roomName.'" />'.$roomName.'<br />';    
} 

现在,在逻辑方面,您可以访问该阵列。房间复选框将作为POST变量中的数组传递。你需要检查以确保你通过至少一些房间。如果您通过了房间,请执行以下操作:

implode( ", ", $_POST['rooms'] );

此外,如果对您来说更方便,您还可以将name =“room []”改为name =“room ['。$ ro ['HotelRoom']。']”如果所有的HotelRoom都是唯一的。然后,您可以将值设置为酒店房间的ID。然后,你可以做一个foreach循环而不是在逻辑方面进行内爆,而不是像你正在做的那样仍然拥有键值对。

foreach($ _POST ['room'] as $ hotelRoom =&gt; $ roomId){

答案 2 :(得分:0)

您似乎遇到了variables' scopes的问题。 $ retn在函数的内部和内部定义,但是如果你想从函数内部访问外部函数,你必须使用$GLOBALS数组:

$GLOBALS['retn'] .= $roomsn.",";

而不是:

$retn .= $roomsn.",";

或者,实际上更好。仅使用局部变量(在这种情况下,全局变量不是很好)。

答案 3 :(得分:0)

如果你打算这样做(草率,艰苦),你就是这样做的:

function roomGroup() {
  $retn = '';
  foreach($_POST as $key => $value) {
    if (strstr($key,"room") !== false) {
      $retn .= $value.",";
    }
  }
  return $retn;
}