数据库查询信息到下拉菜单


Database query info to dropdown menu

我正在从数据库查询中获取信息并将其添加到下拉菜单表单(放置在表中)。 查询位于从窗体中调用的单独函数中。 它将数据库中的信息添加到表上的正确位置,但不在下拉菜单中。 我使用变量 $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>";

?>

似乎你可以替换

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>";
}