2013-10-05 25 views
1

我正在從數據庫查詢中獲取信息並將其添加到下拉菜單窗體(放置在表格中)。查詢是在一個單獨的函數中從表單中調用。它將數據庫中的信息添加到表格上的正確位置,但它不在下拉菜單中。我使用變量$ a,$ b和$ c來測試我的語法,並且它可以很好地處理這些變量。這是函數調用的問題嗎?有任何想法嗎?數據庫查詢信息下拉菜單

下面是代碼:

<?php 
function fill_dropdown(){ 
include("../secure/database.php");   
$conn = pg_connect(HOST." ".DBNAME." ".USERNAME." ".PASSWORD) 
or die('Could not connect: ' . pg_last_error()); //error if could not connect to database 

$query = "SELECT country_code, name FROM lab5.country ORDER BY name ASC"; 

$result = pg_query($query) or die("Unable to execute: " . pg_last_error($conn)); 

$numRow = 0; 
    //results are good so output them to HTML 
//echo "test<br />"; 
while ($line1 = pg_fetch_array($result, null, PGSQL_ASSOC)){ 
    $counter = 0; 
    //echo "test<br />"; 
    foreach ($line1 as $col_value){ // then add all data for attributes in succeeding columns 
     if($counter == 0){ 
      $code[$numRow] = $col_value;//array($numRow => $col_value); 
      echo "\t\t<input type=\"hidden\" name=\"code\" value=\"$code[$numRow]\" />"; 
      //echo $code[$numRow] . "<br />"; 
     } 
     elseif($counter == 1){ 
      $country_name[$numRow] = $col_value; 
      echo "<option value=$country_name[$numRow]>$country_name[$numRow]</option>"; 
      //echo $country_name[$numRow] . "<br />"; 
     } 
     $counter++; 
    } 
    $numRow++; 
} 
//echo "end test<br />"; 
} 




echo "<table border = \"1\">"; 
echo "<form method=\"POST\" action=\"exec.php\">";     //save and cancel buttons 
for($i=1; $i<5; $i++)  //building initial table 
{ 
echo "\t<tr>\n"; 
echo "\t\t<td>"; 
if($i == 1) 
    echo "Name"; 
elseif($i == 2) 
    echo "Country Code"; 
elseif($i == 3) 
    echo "District"; 
else 
    echo "Population"; 
echo "</td>\n"; 

echo "<td>\n"; 

if($i == 1){ 
    echo "<input type=\"text\" name=\"name\">"; 
} 
elseif($i == 2){ 
    echo "<select name=\"country_code\">";    //dropdown box 
    $c = 0; //these are just to show that this way works 
    $a = "IOT"; 
    $b = "test2"; 
    $numRow = 1; 
    echo "<option value=\"IOT\">British Indian Ocean Territory</option>"; 
    echo "<option value=$a>$b</option>"; 
    //echo "<option value=" . $country_name[$numRow] . ">" . $country_name[$numRow] . "</option>"; 
    fill_dropdown(); 
    //echo "<option value=\"Brunei\">Brunei</option>"; 
    echo "</select>"; 
} 
elseif($i == 3){ 
    echo "<input type=\"text\" name=\"district\">"; 
} 
else{ 
    echo "<input type=\"text\" name=\"population\">"; 
} 
} 
echo "</td>"; 
echo "</tr>"; 
echo "</table>";          
echo "\t\t<input type=\"submit\" value=\"Save\" name=\"save\" />";  
echo "<input type=\"button\" value=\"Cancel\" onclick=\"top.location.href='" . $_SERVER['HTTP_REFERER'] . "';\" />\n"; 
echo "</form>"; 


?> 

回答

2

這似乎可以更換

while ($line1 = pg_fetch_array($result, null, PGSQL_ASSOC)){ 
    $counter = 0; 
    //echo "test<br />"; 
    foreach ($line1 as $col_value){ // then add all data for attributes in succeeding columns 
     if($counter == 0){ 
      $code[$numRow] = $col_value;//array($numRow => $col_value); 
      echo "\t\t<input type=\"hidden\" name=\"code\" value=\"$code[$numRow]\" />"; 
      //echo $code[$numRow] . "<br />"; 
     } 
     elseif($counter == 1){ 
      $country_name[$numRow] = $col_value; 
      echo "<option value=$country_name[$numRow]>$country_name[$numRow]</option>"; 
      //echo $country_name[$numRow] . "<br />"; 
     } 
     $counter++; 
    } 
    $numRow++; 
} 

while ($row = pg_fetch_assoc($result)) { 
    // why do you want this line at all? 
    echo "\t\t<input type=\"hidden\" name=\"code\" value=\"$row[country_code]\"/>"; 
    echo "<option value=\"$row[name]\">$row[name]</option>"; 
} 

我唯一可以看到,是錯誤的,是不是有引用選項的值屬性。不過,我不明白你期望通過交錯隱藏輸入和選項來實現什麼。根據你的$a, $b, $c模板來判斷,也許你真正想要的是:

while ($row = pg_fetch_assoc($result)) { 
    echo "<option value=\"$row[country_code]\">$row[name]</option>"; 
} 
+0

哇,你撞到了頭上。 $ code [$ numRow]的想法是將其作爲選項的值插入。我確實需要使用原始代碼,但我擺脫了隱藏的輸入並將選項行更改爲: ''; 它完美的作品。謝謝。 – Bill

+0

@Bill我不明白你爲什麼建立數組'$ code'和'$ country_name'。難道你不能用我最後一個答案中的循環來替換它嗎? – Laurence

+0

你說得對。我只是試了一下,它的工作。我對php和postgresql仍然陌生。我沒有意識到從查詢中篩選數據很容易。 – Bill