gpt4 book ai didi

php - 使用 MySQL 查询生成的下拉列表中的选定值不会传递给变量

转载 作者:行者123 更新时间:2023-11-29 09:53:09 25 4
gpt4 key购买 nike

我的 WordPress 页面上有一个下拉列表,它使用 MySQL 查询将 MySQL 中的值填充到下拉列表中

这是我的 WordPress 页面上的代码

<form method="POST" action="">
[wpse_233034_shortcode]
<br>
<input type="submit" name="submit">
[wpse_233036_shortcode]
</form>

用于生成动态MySQL查询的代码是我在functions.php文件中定义的[wpse_233034_shortcode]

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

enter image description here

我想要的是像现在一样使用第一个 MySQL 查询填充下拉列表

"SELECT `Compound` FROM PNaphtha ORDER BY `SrNo`"

接下来,当我从此下拉列表中选择一个值时,所选值应传递给

,而不是默认的“丙酮”
"SELECT * FROM PNaphtha WHERE `Compound` = %s", $Compound

我能够使用静态/非 SQL 查询下拉列表来使其工作,如下所示,基于 Sally 的回答 here

<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>

最佳答案

问题是因为您的短代码回调/函数(即 wpse_233034_shortcode())没有返回任何输出,尽管它确实回显预期输出。

或者更准确地说,wpse_233034_shortcode() 函数中的 select 字段在输出表单 HTML 之前被输出到浏览器。这意味着表单没有具有select字段,因此当您提交表单时,键Compound在超全局中不可用>$_POST

因此,请确保您的短代码返回正确的输出,但如果您需要在短代码回调中回显它,请使用输出缓冲,就像您在 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
});

关于php - 使用 MySQL 查询生成的下拉列表中的选定值不会传递给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54428599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com