在 HTML Select 标签中使用数据库输出 PHP
Using database output in HTML Select Tag with PHP
我在 wordpress 网站上完美运行了以下内容。
<?php
global $wpdb;
$results = $wpdb->get_results( "SELECT post_title FROM wp_posts WHERE post_type = 'show' AND post_status = 'publish' ORDER BY post_title ASC" );
$options = array();
foreach ($results as $result) {
$options[$result->post_title] = $result->post_title;
}
echo '<select class="field" name="djshow">';
foreach ($options as $key => $value) {
echo "<option value='$key'" . ( $_GET['show'] == $value ? " selected='selected'" : "" ) . ">$value</option>";
}
'</select>';
?>
它从 wp_posts 中搜索 post_title 的每个实例,其中 post_type 是 show 而 post_status 是 public。然后它对其进行排序并将其输出到数组,然后使用每个匹配的 post_title 的列表填充 Select 标记。
目前它输出 post_title 到选项值和名称字段....
我想做的是 select 原始查询中的另一个字段 ID 来填充选项值,而 post_title 填充名称。
因此 select 在 html 中呈现时会读取类似这样的内容:
<option value="15">Post Title 1</option>
<option value="18">Post Title 2</option>
<option value="23">Post Title 3</option>
etc...
我认为我需要使用的正确查询是这个(但如果我错了请纠正我)
$results = $wpdb->get_results( "SELECT post_title,ID FROM wp_posts WHERE post_type = 'show' AND post_status = 'publish' ORDER BY post_title ASC" );
但这就是我有限的知识让我失望的地方...
如何将 ID 的输出分配给选项值,将 post_title 的输出分配给 select 标签?
当您查询多个值时,您可以使用逗号分隔它们。
在你的代码中
post_title AND ID
应该是
post_title, ID
您的 return 值在 $results 中,您的 foreach 可能是
foreach ($results as $result) {
echo "<option value='$result->ID'" . ( $_GET['show'] == $result->ID ? " selected='selected'" : "" ) . ">$result->post_title</option>";
}
不确定您的 $_GET 是否持有 post_title 或 ID
将 SQL 更改为包括 post_title
和 ID
之后,您实际上只需要修复这部分:
foreach ($results as $result) {
$options[$result->post_title] = $result->post_title;
}
现在应该是:
foreach ($results as $result) {
$options[$result->ID] = $result->post_title;
}
因为在接下来的 foreach
中,您在 $key
中的内容来自您放在括号中的内容,而 $value
来自作业的右侧。
我在 wordpress 网站上完美运行了以下内容。
<?php
global $wpdb;
$results = $wpdb->get_results( "SELECT post_title FROM wp_posts WHERE post_type = 'show' AND post_status = 'publish' ORDER BY post_title ASC" );
$options = array();
foreach ($results as $result) {
$options[$result->post_title] = $result->post_title;
}
echo '<select class="field" name="djshow">';
foreach ($options as $key => $value) {
echo "<option value='$key'" . ( $_GET['show'] == $value ? " selected='selected'" : "" ) . ">$value</option>";
}
'</select>';
?>
它从 wp_posts 中搜索 post_title 的每个实例,其中 post_type 是 show 而 post_status 是 public。然后它对其进行排序并将其输出到数组,然后使用每个匹配的 post_title 的列表填充 Select 标记。
目前它输出 post_title 到选项值和名称字段....
我想做的是 select 原始查询中的另一个字段 ID 来填充选项值,而 post_title 填充名称。
因此 select 在 html 中呈现时会读取类似这样的内容:
<option value="15">Post Title 1</option>
<option value="18">Post Title 2</option>
<option value="23">Post Title 3</option>
etc...
我认为我需要使用的正确查询是这个(但如果我错了请纠正我)
$results = $wpdb->get_results( "SELECT post_title,ID FROM wp_posts WHERE post_type = 'show' AND post_status = 'publish' ORDER BY post_title ASC" );
但这就是我有限的知识让我失望的地方...
如何将 ID 的输出分配给选项值,将 post_title 的输出分配给 select 标签?
当您查询多个值时,您可以使用逗号分隔它们。 在你的代码中
post_title AND ID
应该是
post_title, ID
您的 return 值在 $results 中,您的 foreach 可能是
foreach ($results as $result) {
echo "<option value='$result->ID'" . ( $_GET['show'] == $result->ID ? " selected='selected'" : "" ) . ">$result->post_title</option>";
}
不确定您的 $_GET 是否持有 post_title 或 ID
将 SQL 更改为包括 post_title
和 ID
之后,您实际上只需要修复这部分:
foreach ($results as $result) {
$options[$result->post_title] = $result->post_title;
}
现在应该是:
foreach ($results as $result) {
$options[$result->ID] = $result->post_title;
}
因为在接下来的 foreach
中,您在 $key
中的内容来自您放在括号中的内容,而 $value
来自作业的右侧。