PHP 如何使用数据库数据制作下拉列表

PHP How to make a dropdown with database data

所以我有这个 database 并且它有一个名为 selectedDates 的列。该列中有一行值为

2018-08-22
2018-08-15
2018-08-20

请记住,这是 3 组日期,但在一行中。如何使用这三个值制作 select tag/dropdown。这可能吗?如果需要更多信息,请告诉我,我会进行编辑。

下面是我的代码,用于让它在一列但不同的行中执行下拉选项。比如

 Column 1
Row 1 -  Dog
Row 2 - Cat
Row 3 - Mouse

我需要它像

Column 1 
Row 1 - Dog,Cat,Mouse 

然后将下拉选项设置为 dog cat mouse

下面第 1 列的示例代码,3 个不同的行

 <?php
$con = new mysqli('localhost', 'root', '', 'races');

if($con->connect_errno) {
// error reporting here
}

$result = $con->query("SHOW TABLES");

if($result->num_rows > 0) {
echo '<select id="myTable" onchange="myFunction()">';
while($row = $result->fetch_array(MYSQLI_NUM)) {
    echo '<option value="Test" name="SelectedDate">' . $row[0] . '</option>';
}
echo '</select>';
} ?>

编辑回复评论 示例数据库

Id | Info | SelectedDates 
1    hi    2018-18,2018-19 
2    hi    2018-20,2018-21 

在您提供的代码中,在我的示例中它只会创建一个带有 id 1 的下拉列表,但是如果我有另一行像 id 2,我可以将 $row[0] 更改为 $row[1] 以具有我的下拉菜单显示第 2 行 selected dates?

你说你必须将所有日期都放在同一列中,为什么?

这不是对数据库的误解吗?如果一个值需要多行,你应该有一个 table 和 "id | selectedDate" 这样你所说的问题就不会发生。

如果一定要继续这样,你应该试着看看这个:https://secure.php.net/manual/fr/function.explode.php

希望对您有所帮助。

  • 如果您想在不显式检查 connect_errno 属性 的情况下检查连接,您可以简单地检查 false $con 值。
  • 您应该指定要从结果集中访问的确切列。如果您只定位一行,则只查询那一行。
  • 作为更简短的语法,您可以删除 > 0 并检查非假 $result->num_rows 值。
  • 如果你想通过索引识别结果集列,你可以使用$result->fetch_row()(同样是更短的语法)
  • myTable 是不适合您的 <select> 标签的 id 值 -- 因为它不是 "table"。我无法推荐更好的,因为我不知道你的更大形式结构是什么。
  • <option> 标签不带 name 属性,该属性在父 <select> 标签中。
  • 将静态 value 属性值设置为 Test 将导致所有选项提交相同的值:Test(显然这没有意义)。事实上,除非你需要 reformatted/modify 日期值,否则根本不要写 value 属性;仅依靠选项的文本来包含值。

未经测试的建议:(假设您只处理一行数据)

if (!$con = new mysqli('localhost', 'root', '', 'races')) {
    // connection error
} elseif (!$result = $con->query("SELECT selectedDates FROM `your_table` WHERE id = " . (int)$id)) {
    // query syntax error
} elseif (!$row = $result->fetch_row()) {
    // possible logic error, no row found
} else {
    echo '<select id="myTable" name="SelectedDate" onchange="myFunction()">';
    foreach (explode(",", $row[0]) as $date) {
        echo "<option>$date</option>";
    }
    echo "</select>";
}