使用 PHP PDO 根据之前的选择动态更新下拉列表
Posted
技术标签:
【中文标题】使用 PHP PDO 根据之前的选择动态更新下拉列表【英文标题】:Dynamically update dropdown based on previous selection with PHP PDO 【发布时间】:2019-08-22 05:31:56 【问题描述】:这个问题之前已经回答过了,但是我再次询问有两个原因:我找不到任何使用 PDO 的资源,而且不管怎样,我找到的所有资源都包含没有任何 cmets 或解释,这使得很难解释它们并使其适应我的用例。
我需要能够根据前一个选项的选择动态更新下拉列表,如果我更改该选择,它应该重新更新自身,而无需提交表单或重新加载页面。
我已经用迄今为止所学和发现的内容更新了代码,但它仍然无法正常工作。一切正常,直到第二个下拉菜单开始加载值。
html:
<div class="form-group row">
<label class="col-sm-2 form-control-label" onchange="productorInfo(this.value);">Codigo Productor (*)</label>
<div class="col-sm-4">
<select name="vendedor_codigo">
<?php foreach ($dd_productor_result as $dd_productor_display) : ?>
<option value="<?= $dd_productor_display['vendedor_codigo']; ?>">
<?= $dd_productor_display['vendedor_codigo']; ?>
</option>
<?php endforeach; ?>
</select>
</div>
<label class="col-sm-2 form-control-label">Nombre (*)</label>
<div class="col-sm-4">
<select id="ajax-vendedor" name="vendedor_nombre">
<?php foreach ($ajax_productor_result as $dd_productor_display) : ?>
<option placeholder="Seleccione codigo" value="<?= $dd_productor_display['vendedor_nombre']; ?>">
<?= $dd_productor_display['vendedor_nombre']; ?>
</option>
<?php endforeach; ?>
</select>
</div>
</div>
Ajax 脚本:
function productorInfo(id)
$.ajax(
type: "GET",
url: "/controller/produccion/db_ajax_update.php",
data: "mainid =" + id,
success: function (result)
$("#ajax-vendedor").html(result);
);
;
第一个下拉 PHP 代码:
$dd_productor = "SELECT vendedor_codigo FROM lista_productores";
$productor_stmt = $pdo->prepare($dd_productor);
$productor_stmt->execute();
$dd_productor_result = $productor_stmt->fetchAll();
第二个下拉菜单(ajax 调用):
if(isset($_GET['mainid']))
productorInfo($_GET['mainid']);
$prod_value = productorInfo($_GET['mainid']);
$ajax_productor = "SELECT vendedor_nombre FROM lista_productores WHERE vendedor_codigo = $prod_value";
$productor_stmt = $pdo->prepare($ajax_productor);
$productor_stmt->execute();
$ajax_productor_result = $productor_stmt->fetchAll();
【问题讨论】:
这可以通过使用ajax调用来完成,当你改变你的下拉值时,它会为你想要的值获取数据。 【参考方案1】:onchange 调用应该在选择元素上而不是在标签上
<label class="col-sm-2 form-control-label">Codigo Productor (*)</label>
<select name="vendedor_codigo onchange="productorInfo(this.value)">
但我也觉得你可能不太了解这个过程。页面加载时不会触发您的 ajax 调用,所以这一点:
<select id="ajax-vendedor" name="vendedor_nombre">
<?php foreach ($ajax_productor_result as $dd_productor_display) : ?>
<option placeholder="Seleccione codigo" value="<?= $dd_productor_display['vendedor_nombre']; ?>">
<?= $dd_productor_display['vendedor_nombre']; ?>
</option>
我认为这是给你未定义的变量警告(除非你最初以某种方式设置 $ajax_productor_result
)
来自 ajax 的响应通常通过 success: function 绘制在 .js 中
(result)
$("#ajax-vendedor").html(result);
尽管如此 - 除非有更多已发布的代码,否则您将向 .html() 函数传递数组或数据库行,因此它永远不会显示任何内容。
所以你需要
1)在页面加载时绘制一个没有选项的选择(或默认选项,如果有的话)
2)返回成功函数可以使用的响应,例如jquery可以解析的json字符串
3)将jquery中的数据格式化为<options>
,然后使用.html()
函数更新选择
4)如果您希望在页面最初加载时发生这种情况,然后添加对productorInfo(id)
函数的文档就绪调用 - 如果您以某种方式设置初始选择值,这将是相关的(因此它可能与你)
【讨论】:
以上是关于使用 PHP PDO 根据之前的选择动态更新下拉列表的主要内容,如果未能解决你的问题,请参考以下文章
基于下拉列表中选项的选择动态更新表格的Angularjs代码