2012-01-26 79 views
0

我想创建2个下拉菜单。一个用于显示建筑物列表,然后当用户从列表中选择建筑物时,它将显示该建筑物中的房间列表。我在php中得到一个未定义的错误

问题是我在我的代码中有错误。下面是代码:

 $sql="SELECT Building, Room FROM Room WHERE Building = '".$building."'"; 

     $sqlresult = mysql_query($sql); 

     $sqldataArray = array(); 

     while($sqlrow = mysql_fetch_array($sqlresult)) 
    { 
     $sqldataArray[$sqlrow['Building']]; 
     $sqldataArray[$sqlrow['Building']]['Rooms'][$sqlrow['Room']]; 
    } 


     $buildingHTML = ""; 
     $buildingHTML .= '<select name="buildings" id="buildingssDrop">'.PHP_EOL; 
     $buildingHTML .= '<option value="">Please Select</option>'.PHP_EOL; 

    foreach ($sqldataArray as $building => $buildingData) {  

      $buildingHTML .= "<option value='".$building."'>" . $building . "</option>".PHP_EOL;   

      } 
      $buildingHTML .= '</select>'; 


     $roomHTML = ""; 
     $roomHTML .= '<select name="rooms" id="roomsDrop">'.PHP_EOL; 
     $roomHTML .= '<option value="">Please Select</option>'.PHP_EOL;  
      foreach ($buildingData['Rooms'] as $roomId => $roomData) {   

      $roomHTML .= "<option value='".$roomId."'>" . $roomId . "</option>".PHP_EOL;   
    } 

      $roomHTML .= '</select>'; 

我得到的错误是这样的:

未定义的变量:buildingData在/web/stud/u0867587/Mobile_app/create_session.php线372

这是代码行的错误是:

$buildingHTML .= "<option value='".$building"'>" . $building . "</option>".PHP_EOL; 

有谁知道如何解决这个错误。我相信这是因为它不在其他foreach循环中,但是如果我将它放入,那么是否会影响下拉菜单的显示?

+0

你确定这是正确的吗?我没有在该行中看到任何'$ buildingData'。 – entropid 2012-01-26 22:54:18

+0

你对数组中的'Rooms'元素有正面评价吗? print_r($ buildingData)来检查它的内容。 – Alfabravo 2012-01-26 22:54:33

+1

错误发生在下一个foreach行,他试图访问声明之前的foreach范围之外的'$ buildingData'。 – Tim 2012-01-26 22:58:16

回答

0

不能完全确定你想要得到的最终输出的东西 - 有几个逻辑问题与您的代码

看看这个小重写 - 这将产生一个<选择>建筑物和<选择>在你的第一个建筑物的所有房间。

<?php 

$sqlresult = mysql_query($sql); 

$buildings = array(); // easier if you don't use generic names for data 

while($sqlrow = mysql_fetch_array($sqlresult)) 
{ 
    // you need to initialise your building array cells 
    if (!isset($buildings[$sqlrow['Building']])) { 
     $buildings[$sqlrow['Building']] = array('Rooms' => array()); 
    } 

    // you can add the room to the building 'Rooms' array 
    $buildings[$sqlrow['Building']]['Rooms'][] = $sqlrow['Room']]); 
} 


$buildingHTML = ""; 
$buildingHTML .= '<select name="buildings" id="buildingssDrop">'.PHP_EOL; 
$buildingHTML .= '<option value="">Please Select</option>'.PHP_EOL; 

foreach ($buildings as $building => $buildingData) {  
    $buildingHTML .= "<option value='".$building."'>" . $building . "</option>".PHP_EOL;   
} 
$buildingHTML .= '</select>'; 

$roomHTML = ""; 
$roomHTML .= '<select name="rooms" id="roomsDrop">'.PHP_EOL; 
$roomHTML .= '<option value="">Please Select</option>'.PHP_EOL;  
foreach ($buildings['Building Number 1']['Rooms'] as $roomId => $roomData) {   
    $roomHTML .= "<option value='".$roomId."'>" . $roomId . "</option>".PHP_EOL;   
} 

$roomHTML .= '</select>'; 
+0

嗨,我得到这个错误: 注意:未定义的索引:房间在/web/stud/u0867587/Mobile_app/create_session.php行374这是代码:'foreach($ buildings [0] ['Rooms' ]作为$ roomId => $ roomData)'。我的最终输出是“建筑物”下拉菜单,它应显示来自数据库表的建筑物,它是'Canalside West'和'Canalside East',然后对于房间文本框,它将是空的,直到用户选择了建筑,当用户选择一个建筑物,那么它应该显示属于建筑物的房间列表,在第一个下拉菜单中选择。 – user1163005 2012-01-27 00:21:25

+0

我猜问题是你没有建筑物[0]没有设置 - 因为你创建了一个建筑物的阵列,所以建筑物的名称必须以建筑物的名称为主,所以试试$ buildings ['Canalside West']。要根据建筑物选项来改变房间列表,需要更多 - 也许应该是在不同的问题问。 – HorusKol 2012-01-27 00:51:55

+0

好吧,非常感谢你的帮助:) – user1163005 2012-01-27 01:02:32

0

你没有定义任何变量:

$sqldataArray[$sqlrow['Building']]; 
    $sqldataArray[$sqlrow['Building']]['Rooms'][$sqlrow['Room']]; 

应该是这样的:

$sqldataArray[$sqlrow['Building']] = "Value"; 
    $sqldataArray[$sqlrow['Building']]['Rooms'][$sqlrow['Room']] = "Definition"; 
+1

嗯,你不能'$ sqldataArray [$ sqlrow ['Building']] ['Rooms'] [$ sqlrow ['Room']]'因为'sqldataArray [$ sqlrow ['Building']]'是**字符串** – Neal 2012-01-26 22:55:35

+0

可以这样定义变量:\t'$ sqldataArray [$ sqlrow ['Building']] = $ sqlrow ['Building']; \t $ sqldataArray [$ sqlrow ['Building']] ['Rooms'] [$ sqlrow ['Room']] = $ sqlrow ['Room'];' – user1163005 2012-01-26 23:07:14

+0

你知道我应该如何布置foreach循环在正确的地方没有搞乱下拉菜单? – user1163005 2012-01-26 23:13:50

1

你有几个问题。

  1. 这些生产线没有做任何事情:

    • $sqlrow['Building']];
    • $sqldataArray[$sqlrow['Building']]['Rooms'][$sqlrow['Room']];
  2. 你试图后引用$buildingDataforeach定义它已关闭。当您的下一个foreach循环尝试使用它时,它是null,因为您不在前面的foreach的范围内。 这是导致你的错误信息。

你应该考虑更高级别的看看你的应用程序逻辑和决定它应该如何与伪先进行布局。

(编辑:SO不会让你把代码块中列出为什么?!?)

+0

可以这样定义变量:\t'$ sqldataArray [$ sqlrow ['Building']] = $ sqlrow ['Building']; \t $ sqldataArray [$ sqlrow ['Building']] ['Rooms'] [$ sqlrow ['Room']] = $ sqlrow ['Room'];' – user1163005 2012-01-26 23:11:25

+0

您知道我应该如何布置foreach循环在正确的地方没有搞乱下拉菜单? – user1163005 2012-01-26 23:13:18

相关问题