【问题标题】:Database query info to dropdown menu数据库查询信息到下拉菜单
【发布时间】:2013-10-05 21:07:49
【问题描述】:

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


?>

【问题讨论】:

    标签: php sql database postgresql drop-down-menu


    【解决方案1】:

    看来你可以替换

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

    我能看到的唯一错误是选项的 value 属性周围没有引号。不过,我不明白您希望通过将隐藏输入与选项交错来实现什么。从你的$a, $b, $c 模板来看,也许你真正想要的是:

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

    【讨论】:

    • 哇,你一针见血。 $code[$numRow] 的想法是将其作为选项的值插入。我确实需要使用原始代码,但我摆脱了隐藏的输入并将选项行更改为: '';它工作得很好。谢谢。
    • @Bill 我不明白你为什么要构建数组$code$country_name。你不能用我上一个答案中的循环替换它吗?
    • 你是对的。我刚试了一下,它奏效了。我还是 php 和 postgresql 的新手。我没有意识到从查询中筛选数据是如此容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多