所以这是我的问题。我有一个关于数据库名称'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>
未返回任何错误。该脚本可以尝试在浏览器中加载下拉框,并且几乎可以在那里切断。所以我留下了一个空的下拉框,并且没有任何前面的元素,应该显示(提交按钮等)。
在我的业余观察中,它看起来很混乱,我被困在这几个小时。在这个网站上给我的第一个问题,让我知道我需要添加的其他信息。
答案 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']; ?>"
;
(带单引号或双引号)