将MySQL数据调用到下拉列表中

时间:2013-07-13 09:25:26

标签: php javascript mysql

所以这是我的问题。我有一个关于数据库名称'countries'的表。它有两列:'countries'和'id'。我正在尝试从此表中获取数据并将其放入注册表单的下拉框中。这就是我所拥有的(为方便起见而简化):

$dbase_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

<form method="post" action="register.php" name="registerform">   
    <select id="country_list">
        <script type="text/javascript">
        var select = document.getElementById("country_list"); 
        <?php

            while($row = $dbase_connection->query("SELECT * FROM countries")->fetch_array()){
                ?>
                    var option = document.createElement("option");
                    option.textContent = <?php $row['country_name']; ?>;
                    option.value = <?php $row['id']; ?>;
                    select.appendChild(option);
                <?php
            }
        ?>
        </script>
    </select>
</form>

未返回任何错误。该脚本可以尝试在浏览器中加载下拉框,并且几乎可以在那里切断。所以我留下了一个空的下拉框,并且没有任何前面的元素,应该显示(提交按钮等)。

在我的业余观察中,它看起来很混乱,我被困在这几个小时。在这个网站上给我的第一个问题,让我知道我需要添加的其他信息。

4 个答案:

答案 0 :(得分:1)

PHP可以将文本(包括HTML)直接发送到您的页面中,因此您可以直接生成<option>列表。您的解决方案是,使用PHP发出的值在Javascript中创建元素是不必要的错误。

你对mysqli函数的使用是重复调用数据库,并且可能会重复返回第一行。

这是我的解决方案,为您的乐趣精简;)

<?php

$dbase_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$result = ($dbase_connection->query("SELECT * FROM countries") or die($dbase_connection->error);
?>
<form method="post" action="register.php" name="registerform">   
   <select id="country_list">

    <?php

        while($row = $result->fetch_array()){
            echo "<option value='".$row['id']."'>".$row['country_name']."</option>";
        }
    ?>
</select>
</form>

答案 1 :(得分:0)

我认为你遵循aufull模式。将查询用于Javascript是......

最好分开您的代码:

<强>配置-db.php中

$dbase_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
/*
 * Use this instead of $connect_error if you need to ensure
 * compatibility with PHP versions prior to 5.2.9 and 5.3.0.
 */
if (mysqli_connect_error()) {
    die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
}

<强> countries.php

require_once 'config-db.php';

// Never use *
// Read this article : http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/
// Why is not good to use * into SElECT 
$countries = array();
while($row = $dbase_connection->query("SELECT id,name FROM countries")->fetch_array()) {
$countries[] = $row;
}

<form method="post" action="register.php" name="registerform">   
    <select id="country_list">
        <?php
            foreach($countries as $country) {
               echo '<option value="' . $country['id'] . '">' . $country['name'] . '</option>'; 
            }
        ?>
    </select>
</form>

最后你避免使用Javascript和PHP。

答案 2 :(得分:0)

你为什么不这样做?

<form method="post" action="register.php" name="registerform">   
<select id="country_list">
    <?php

        while($row = $dbase_connection->query("SELECT * FROM countries")->fetch_array()){
            ?>
              <option value="<?php echo $row['id']; ?>"><?php echo $row['country_name']; ?></option>
            <?php
        }
    ?>
</select>
</form>

那应该有用

答案 3 :(得分:0)

你检查过你的Javascript控制台了吗?我注意到的一件事是你没有使用引号而且没有任何回应。 option.textContent = <?php $row['country_name']; ?>; ,内容应为:option.textContent = "<?php echo $row['country_name']; ?>";

(带单引​​号或双引号)