【问题标题】:Possible to run DB update function when dropdown is selected选择下拉菜单时可以运行数据库更新功能
【发布时间】:2012-09-06 12:41:29
【问题描述】:

我想知道从下拉列表中选择项目时是否可以运行更新查询。用户做出选择,然后调用一个函数来更新数据库中的特定字段。这将使用一个选择框来存储选项来实现。谢谢。

    echo '<td>';
    echo '<select name="order_status[]" onChange = "update()">';
    echo '<option value = "1" class ="pending">Pending</option>';
    echo '<option value = "2" class = "approved">Approved</option>';
    echo '<option value = "3" class ="disapproved">Disapproved</option>';
    echo '</select>';
    echo '</td>';
    echo '</tr>';

【问题讨论】:

    标签: php html forms


    【解决方案1】:

    是的,这是可能的。如果您希望查询无缝运行(即,无需按下提交按钮并刷新页面),则需要使用 Ajax 将请求异步发送到您的 PHP 脚本。

    编辑:最简单的做法是在您的onchange 事件中使用jQuery 的$.get() 功能。这样,每次有人选择一个选项时,jQuery 都会使用该选项的值将请求发送到您的 PHP 脚本。 PHP 脚本将运行,并将新数据返回给您的 jQuery,然后它会使用其 DOM 功能将该数据插入到您的页面中。

    你可以用一个按钮做同样的事情。只需将$.get() 粘贴在按钮的onclick 事件中,而不是选择元素的onchange 事件中。

    jQuery 站点的文档将为您提供相关的代码示例。

    编辑 2:好的,这是一个非常固定的示例。

    首先,让我们考虑一下您希望在后端发生的实际过程。用最简单的术语来说,您想从用户输入中获取一个 id 并使用它在查询中运行。非常简单(使用 PDO 进行数据库工作):

    // in a real app, you'd need to sanitize and validate the incoming id
    $id = $_GET['id'];
    
    $stmt = $dbh->prepare("SELECT * FROM table_name WHERE id = :id");
    $stmt->bindParam(":id", $id);
    $stmt->execute();
    
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    
    echo json_encode($row); // makes it jQuery friendly
    

    好的,所以后端非常简单。现在,对于字体末端,魔法发生的地方。以下是我使用select 元素和button 将id 传回PHP 脚本,然后处理结果的方法:

    <!-- Your HTML up to where the select and button are on your page -->
    
    <select id="id" name="id">
        <option value="1">Something</option>
        <option value="2">Something Else</option>
        <option value="3">Yet Another Thing</option>
    </select>
    
    <button id="btn" />
    
    <!-- In your jQuery -->
    
    $("#btn").click(function() {
        $.get("path/to/your/back/end/script.php", { "id" : $("#id").value }, function(data) {
            /* the data will be the json_encode($row) that was echoed from the PHP script.
             * so, you'll need to drill into it, take the data you want, and use 
             * jQuery's/JavaScript's DOM manipulation tools to insert the data on your 
             * page
             */
        }) // close $.get()
    }); // close .click()
    

    所有这些都没有经过测试,并且公认是不完整的,但这应该足以开始使用。真的,你需要弄清楚的是如何钻取返回的数据(它是一个 JSON 对象,所以应该不会太糟糕......使用浏览器的 Web 开发工具来查看数据的实际形成方式)并将其插入您想要的位置。那,以及我上面可能犯的任何愚蠢的错误。

    希望这会有所帮助!

    【讨论】:

    • 好的,谢谢,我对使用ajax不是很熟悉。我是否可以在每个选项值旁边的单独列中设置一个保存按钮,以便在按下时根据订单 ID 更新正确的行?
    • 这就是我想要实现的目标:stackoverflow.com/questions/12298269/… 谢谢
    • 查看我的新编辑,并确保查看 jQuery 关于 Ajax 的文档。它应该说明您需要知道的所有内容。
    • 非常感谢,这样会不会保留页面刷新时的状态?
    • 我正在努力研究如何在我的代码中实现这一点。你能举个例子吗。非常感谢
    猜你喜欢
    • 2012-02-28
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2014-05-05
    相关资源
    最近更新 更多