【问题标题】:Dynamic PHP Dropdown Menu for Countries国家动态 PHP 下拉菜单
【发布时间】:2012-05-06 20:36:00
【问题描述】:

好的,我有一个名为 Country 的表,它看起来像这样:

---------------------------
|Country      |    Code   |
---------------------------
|Afganastan   |     AF    |
|ÅLAND ISLANDS|     AX    |
|  etc.       |     etc.  |
---------------------------

我想做的是创建一个动态菜单,用户可以在其中选择一个国家/地区,并将其本身存储为一个值,我可以在用户点击提交后调用它。

我确实在这里尝试了一些东西,但我不确定它在做什么,因为我对 PHP 和 HTML 还很陌生,以至于我只是输入一些东西来看看会发生什么。

无论如何,我真的被困住了,我尝试使用谷歌和这个网站中的搜索功能,但没有发现对我有用...

我试过的代码是这样的:

<select>
    <?php
        $result = mysql_query('SELECT Country FROM Countries');

        echo '<select name="country">';

        while ($row = mysql_fetch_array($result))
        {
           echo '<option value="'.$row['id'].'">'.$row['name'].'</option>';
        }

        echo '</select>';
    ?>

   </select>

结果应该看起来像一个下拉菜单,其中包含数据库中的国家/地区列表。但这不起作用,只是在下拉菜单中显示:

.$row['name']

这与我想要的完全不同,因为那甚至不是一个国家。当我删除那部分代码时,用户没有选项可供选择,菜单是空的。

编辑 到目前为止,我的代码仍然无法正常工作:

<select name = 'country'>
    <?php

    include ("account.php");
    include ("connect.php");

        $result = mysql_query('SELECT Code , Country FROM Countries');
        while ($row = mysql_fetch_array($result))
            {?>

            <option value="<?php echo $row['Code']?>"><?php echo $row['Country']?></option>

            <?php}

    ?>

   </select>

include ("account.php");include ("connect.php"); 行允许我连接到我的数据库。

【问题讨论】:

  • var_dump($result)?还有,为什么你有两个&lt;select&gt;
  • 你确定表中有记录吗?代码是完美的,它不能产生任何错误
  • 我的数据库有 200 多个不同的国家和国家表中的代码。我自己从一个文本文件中导入了它们。

标签: php mysql html database drop-down-menu


【解决方案1】:

你的代码应该是这样的

$host = "localhost";
$user = "root";
$pass = "yourpassword";
$db   = "databasename";

// This part sets up the connection to the 
// database (so you don't need to reopen the connection
// again on the same page).
$ms = @mysql_connect($host, $user, $pass);
if ( !$ms )
{
echo "Error connecting to database.\n";
}

// Then you need to make sure the database you want
// is selected.
@mysql_select_db($db);


<form method = "POST" action = "abc.php">
<select name = 'country'>
<?php
$result = mysql_query('SELECT id , name FROM Countries');
while ($row = mysql_fetch_array($result))
    {?>
       <option value="<?php echo $row['id']?>"><?php echo $row['name']?></option>
    <?php}
?>
<input type = "submit" value = "Submit">
</form>

现在在 php 中使用这个

echo '<pre>';
print_r($_POST);

你会看到用户选择了什么。检查你的设置可能有问题。

【讨论】:

  • 问题是我的下拉菜单中没有任何内容供用户选择。我如何从数据库中放入东西供用户选择?
  • 是的,我这样做了,但没有任何改变。我仍然得到一个空的下拉菜单。
  • 选择代码,国家/地区;在循环 $row['Code'] 和 $row['Country'] 中。这些都是必须的
【解决方案2】:

你的单引号和双引号把你搞砸了:

echo '<option value="'.$row['id'].'">'.$row['name'].'</option>';

应该是:

echo "<option value=\"" . $row['id'] . "\">" . $row['name'] . "</option>";

您可以在脚本周围使用单引号,但是当您跳出它来执行 $row['id']$row['name'] 时,您会遇到问题,因为它认为您正在跳回引用的代码......要么使用我上面的例子,以双引号开始/结束并转义需要显示的所有双引号,或转义$row[\'id\']$row[\'name\']中的单引号

应该能帮到你。

【讨论】:

  • 如果你的表格看起来和上面一模一样,那么没有你试图调用的idname 字段,只有CountryCode
【解决方案3】:

试试这个代码

 <?php
        $result = mysql_query('SELECT * FROM Countries');
?>
<select name="country">
<?php 

        while ($row = mysql_fetch_array($result))
        {
?>
<option value="<?php echo $row['id']; ?>"><?php echo $row['name']; ?></option>
<?php
        }
?>
</select>

【讨论】:

    【解决方案4】:

    首先,您的表格没有 id 列。尝试更改您的查询,例如

    SELECT Country, Code FROM Countries
    

    那么代码和html应该是这样的

    <?php
    
    $host = "localhost";
    $user = "user";  //username
    $pass = "pass";  //password
    $db   = "db";    //database
    
    $con = @mysql_connect($host, $user, $pass);
    if ( !$con )
    {
    echo "Error connecting to database.\n";
    }
    
    @mysql_select_db($db);
    ?>
    
    <select name="country">
    <option value="0" selected="selected">Choose..</option>
    <?php
    //echo '<select name = \'country\'>';
    
        $result = mysql_query('SELECT Country, Code FROM Countries');
    
        while ($row = mysql_fetch_array($result))
        {
           echo '<option value="'.$row['Code'].'">'.$row['Country'].'</option>';
        }
    
    ?>
    </select>
    

    【讨论】:

    • 抱歉,还是不行。请看看我的编辑,看看我到目前为止根据每个人的回答得到了什么。
    • 我的代码有什么错误你能写出来吗?我的意思是有错误还是什么都没有?
    • 我没有在您的代码中看到错误,只是没有看到我的下拉菜单中有任何内容。
    • 如果你有一个像 Parse error: syntax error, 这样的错误,那么你应该把这个
    【解决方案5】:
      <select>
        <?php
        $result = mysql_query('SELECT Country FROM Countries');
    
        echo '<select name="country">';
        $row = mysql_fetch_array($result)
        for ($i=0; $i<count($row ); $i++)
        {
           echo '<option value="'.$row[$i]['id'].'">'.$row[$i]['name'].'</option>';
        }
    
        echo '</select>';
    ?>
    

    下一页使用 print_r($_POST); 或 var_dump($_REQUEST);

    【讨论】:

      【解决方案6】:

      如果您使用mysql_fetch_array,您可以使用字段名称或它们选择的索引从获取的行中读取它们。您还可以使用sprintfprintf 函数将内容合并到一个字符串中,以帮助保持HTML 片段中没有合并值所需的引号。

      $result = mysql_query('SELECT Country, Code FROM Countries');
      while ($row = mysql_fetch_array($result)) {
         printf('<option value="%1$s">%2$s</option>',
                  $row['Code'], $row['Country']);
      }
      

      【讨论】:

        【解决方案7】:

        您的 SQL 语句仅从“Countries”表中选择了“Country”;因此,您无法使用 $row['id'] 和 $row['name']。
        改用这个:

            echo '<select name="country">';
        
            while ($row = mysql_fetch_array($result))
            {
               echo '<option value="'.$row['Code'].'">'.$row['Country'].'</option>';
            }
        
            echo '</select>';
        ?>
        

        这应该可以解决您的问题。

        【讨论】:

        • 它给了你什么?那应该行得通。就在 while 循环内,放入 var_dump($result);它给了你什么?
        • 好的;首先,您不应该将 2 个 select 语句相互包装;删除外部的 select 语句,运行我之前给你的代码('var_dump' 那个),然后让我知道它给你什么
        • 好的;我们正在取得进展。现在,试试这个。对于 select 语句本身,试试这个:select Country, Code from countries;让我知道这是否有效:它应该有效。
        • 这行得通吗?如果您在问题中发布的数据有效,它应该可以工作。如果它不起作用,请尝试使用 PHPMyAdmin 的 select 语句,看看它是否产生了您想要的结果。
        • 抱歉回复晚了,我在 PhpMyAdmin 中尝试过,它确实显示了数据,所以我将该语句复制到我的代码中,它对页面没有任何影响。
        【解决方案8】:

        我发现了我遇到的问题。第一个是页面中有一个额外的选择标签,第二个是该文件被保存为 html 页面而不是 php 文件。感谢所有帮助我解决这个问题的人!

        【讨论】:

          【解决方案9】:

          试试我的代码,我正在使用它,它确实有效...只需更改值...

          <?php
              include ('connect.php');
          
              $sql = "SELECT * FROM casestatusfile";
              $result = mysql_query($sql);
          
              echo "<select name = 'txtCaseStatus'/>";
              echo "<option value = ''>--- Select ---</option>";
              $casestatus = $_POST['txtCaseStatus'];
              $selected = 'selected = "selected" ';
              while ($row = mysql_fetch_array($result)) {
              echo "<option " .($row['CASESTATUSCODE'] == $casestatus? $selected:''). "value='". $row['CASESTATUSCODE'] ."'>" . $row['CASESTATUS'] ."</option>";
              }
              echo "</select>";
              ?>
          

          我确定这是有效的,因为这是我正在使用的......

          【讨论】:

            猜你喜欢
            • 2011-10-13
            • 1970-01-01
            • 1970-01-01
            • 2017-03-09
            • 2010-11-17
            • 2017-12-17
            • 1970-01-01
            • 2015-06-10
            • 2012-01-20
            相关资源
            最近更新 更多