使用 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中的数据格式化为&lt;options&gt;,然后使用.html()函数更新选择 4)如果您希望在页面最初加载时发生这种情况,然后添加对productorInfo(id) 函数的文档就绪调用 - 如果您以某种方式设置初始选择值,这将是相关的(因此它可能与你)

【讨论】:

以上是关于使用 PHP PDO 根据之前的选择动态更新下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

基于下拉列表中选项的选择动态更新表格的Angularjs代码

根据之前的下拉选择动态填充多达 3 个下拉列表

更新选择列表而不刷新 [PDO/PHP/AJAX]

如何根据使用 jQuery/AJAX 和 PHP/MySQL 选择的第一个下拉列表填充第二个下拉列表?

使用 php 变量创建动态 mysql 查询

根据使用 php 和 jquery 的下拉选择更改价格变量