我有一个动态页面,可以从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;
}
对我所做错的任何帮助都会非常感激!!!
答案 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;
}