从mysql_fetch_array查询创建表单

时间:2011-02-25 16:48:06

标签: php mysql forms fetch

我在MySQL数据库中有一个名为'location'的字段 - 它只提供北,南,东,西。

我已使用此代码仅获得4个截然不同的结果:

$query_form = "SELECT DISTINCT location FROM hotel ORDER BY location ASC";
$result_form = mysqli_query($dbc, $query_form) or die('die query error');
$row_form = mysql_fetch_array($result_form, MYSQLI_NUM);

我想使用此查询的四个结果填充表格,以便:

<option value='1'>North</option>
<option value='2'>South</option>
<option value='3'>East</option>
<option value='4'>West</option>

我用过这个:

foreach ($row_form['location'] as $k => $v) {
    echo '<option value="' . $k . '">' . $v . '</option>\n';
    }

但是我担心我的方法不起作用 - 遗憾的是,我是一个菜鸟,无法弄清楚出了什么问题!

由于

2 个答案:

答案 0 :(得分:2)

mysql_fetch_array只会(引用手册,强调我的)

  

获取结果行作为   关联数组,数字数组或   两个

所以,你必须多次调用这个函数 - 实际上,每行一次(所以,这里,4次)


这通常是通过循环完成的,在获得结果时循环。
在您的情况下,您可能希望使用如下所示的内容:

$lineCounter = 1;
while ($row = mysql_fetch_array($result_form, MYSQL_ASSOC)) {
    // Use your row, here.
    // For instance : $row['location']
    // And you can use the $lineCounter variable, to keep track of the current line number.
    $lineCounter++;
}

注意:

  • 我使用MYSQL_ASSOC来获取每行的关联数组:我认为这样更容易。
  • while循环的正文中,您可以使用按列名索引的$row关联数组。


作为旁注,当在某些HTML代码中注入数据(例如字符串)时,您应该正确地转义输出,以避免HTML注入。

有关解决方案,请参阅htmlspecialchars函数。

答案 1 :(得分:0)

MYSQLI_NUM实际上返回带有数字索引的字段。根据您的要求,我相信,它不会真正有助于<option value="x">..

[查看此链接,了解MYSQLI_NUM实际上做了什么:MYSQLI_NUM是什么意思和做什么?

现在,在您的代码中,您需要修改如下:

$i=1;
while ($row_form=mysql_fetch_array($result_form, MYSQLI_NUM)) {
    echo '<option value="' . $i . '">' . $row_form['location'] . '</option>\n';
    $i++;
}

编辑:正如这里的另一个答案所指出的,你真的需要一个循环结构来从数据库中检索每一行。一个mysql_fetch_array(..)只会给你一行。您需要循环迭代,直到函数返回有效行。

检查该功能的工作原理:http://php.net/manual/en/function.mysql-fetch-array.php