我在Wordpress页面上有一个下拉列表,该页面使用MySQL查询将MySQL中的值填充到下拉列表中
这是我的Wordpress页面上的代码
<form method="POST" action="">
[wpse_233034_shortcode]
<br>
<input type="submit" name="submit">
[wpse_233036_shortcode]
</form>
用于生成动态MySQL查询的代码是[wpse_233034_shortcode],它是我在functions.php文件中定义的
add_shortcode('wpse_233034_shortcode', function(){
global $wpdb;
$results1 = $wpdb->get_results ("SELECT `Compound` FROM PNaphtha ORDER BY
`SrNo`");
echo '<td><select id="Compound" name="Compound">';
echo '<option value="">Select Compound</option>';
foreach ( $results1 as $result1 ) {
echo '<option>'.$result1->Compound.'</option>';
}
echo '</select></td>';
});
到目前为止,它似乎工作正常。当我下拉列表时,将从PNaphtha表中选择“化合物”的值并填充在屏幕上。
接下来我要从该下拉列表中将选定的值传递到另一个简码/ MySQL查询中,该查询将获取与该化合物相关的更多数据
到目前为止,这是我所能获得的,但是似乎无法将上述下拉列表中的值“拉”到下一个MySQL查询中
add_shortcode('wpse_233036_shortcode', function(){
global $wpdb;
$Compound = filter_input( INPUT_POST, 'Compound' );
$Compound = $Compound ? $Compound : 'acetone';
$query = $wpdb->prepare( "SELECT * FROM PNaphtha WHERE `Compound` = %s",
$Compound );
$myrows1 = $wpdb->get_results( $query, ARRAY_A );
ob_start();
foreach ( $myrows1 as $row1) {
echo "Compound: ".$row1['Compound'].", "."Formula: ".$row1['Formula'].",
"."Molecular Weight: ".$row1['MW']."<br>";
}
return ob_get_clean();
});
现在,简码'wpse_233036_shortcode'似乎正在“起作用”,因为始终在页面上查询并回显指定为'丙酮'的默认/静态值,甚至在我从下拉列表中选择任何值之前。这就是我在页面加载时得到的东西
Compound: acetone, Formula: C3H6O, Molecular Weight: 58.08
我想要的是像现在一样使用第一个MySQL查询填充下拉列表
"SELECT `Compound` FROM PNaphtha ORDER BY `SrNo`"
接下来,当我从该下拉列表中选择一个值时,而不是默认的“丙酮”时,所选值应传递给
"SELECT * FROM PNaphtha WHERE `Compound` = %s", $Compound
基于Sally的回答here,我可以使用静态/非SQL查询的下拉列表使它正常工作,如下所示
<form method="POST" action="">
<select name="C_Option">
<option value=""></option>
<option value="abietic acid">abietic acid</option>
<option value="acenaphthene">acenaphthene</option>
...
<option value="acetone">acetone</option>
</select>
<input type="Submit">
[wpse_233032_shortcode]
</form>
答案 0 :(得分:1)
问题是因为您的短码回调/函数(即wpse_233034_shortcode()
)不返回任何输出,尽管它确实echo
了预期的输出。
或更准确地说,将select
函数中的wpse_233034_shortcode()
字段输出到浏览器 之前,然后输出HTML表单。这意味着表单不没有select
字段,因此,当您提交表单时,键Compound
在超全局变量$_POST
中不可用。>
因此,请确保您的简码返回正确的输出,但是如果您需要在简码回调中echo
进行输出,请像在wpse_233036_shortcode()
函数中那样使用输出缓冲。
add_shortcode('wpse_233034_shortcode', function(){
global $wpdb;
$results1 = $wpdb->get_results ("SELECT `Compound` FROM PNaphtha ORDER BY `SrNo`");
ob_start(); // turn on output buffering
echo '<td><select id="Compound" name="Compound">';
echo '<option value="">Select Compound</option>';
foreach ( $results1 as $result1 ) {
echo '<option>'.$result1->Compound.'</option>';
}
echo '</select></td>';
return ob_get_clean(); // return the output
});
但是在可能的情况下,避免使用输出缓冲,而是将输出分配给变量,如下所示:
add_shortcode('wpse_233034_shortcode', function(){
global $wpdb;
$results1 = $wpdb->get_results ("SELECT `Compound` FROM PNaphtha ORDER BY `SrNo`");
$output = ''; // save the output to this variable
$output .= '<td><select id="Compound" name="Compound">';
$output .= '<option value="">Select Compound</option>';
foreach ( $results1 as $result1 ) {
$output .= '<option>'.$result1->Compound.'</option>';
}
$output .= '</select></td>';
return $output; // return the output
});