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'] );

また、より便利な場合は、すべての HotelRoom が一意の場合、 name="room[]" を name="room['.$ro['HotelRoom'].']" にすることもできます。次に、値をホテルの部屋の ID に設定できます。次に、ロジック側で implode を実行する代わりに、キーと値のペアを保持するために行っていたように 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 に答える