0

我有一个动态页面,它从 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

4 回答 4

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;
    }
}
于 2012-06-29T19:23:03.147 回答
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 => $roomId){

于 2012-06-29T19:18:49.750 回答
0

您似乎遇到了变量范围的问题。$retn 在函数内部和外部都定义了,但是如果要从函数内部访问外部函数,则必须使用$GLOBALS数组:

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

代替:

$retn .= $roomsn.",";

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

于 2012-06-29T19:21:22.403 回答
0

如果您打算以(草率,艰难)的方式进行操作:

function roomGroup() {
  $retn = '';
  foreach($_POST as $key => $value) {
    if (strstr($key,"room") !== false) {
      $retn .= $value.",";
    }
  }
  return $retn;
}
于 2012-06-29T19:23:33.727 回答