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>";
}
所以我有这个 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>";
}