2012-01-26 80 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

相關問題