0

所以这是我的问题。我有一个关于数据库名称“国家”的表。它有两列:“国家”和“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

4 回答 4

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>
于 2013-07-13T09:38:58.940 回答
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());
}

国家.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。

于 2013-07-13T09:38:54.917 回答
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>

那应该工作

于 2013-07-13T09:39:19.813 回答
0

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

(使用单引号或双引号)

于 2013-07-13T09:48:01.670 回答