【问题标题】:Display Data from a dependent dropdown in php在 php 中显示依赖下拉列表中的数据
【发布时间】:2017-07-23 19:04:05
【问题描述】:

我需要帮助,我是 php 和 jquery 的新手 我创建了一个从 mysql 数据库填充的两层相关下拉列表,它使用两个表 products 和 fieldo,pid 作为外键。

//dropdown.php的代码

<html>
<head>
<script src="https://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script>
</head><?php include "connectdb.php"; ?>
<script>
function getState(val) {
    $.ajax({
    type: "POST",
    url: "states.php",
    data:'pid='+val,
    success: function(data){
        $("#state-list").html(data);
    }
    });
}

function showMsg()
{

    $("#msgC").html($("SELECT name, email from fieldo where state = '#state-list option:selected'").text());
    return false;
}
</script>
<body >
    <form>
    <label style="font-size:20px" >Products:</label>
        <select name="product" id="product-list" class="demoInputBox"  onChange="getState(this.value);">
        <option value="">Select Products</option>
        <?php
         $sql="SELECT * FROM `Products` WHERE TYPE = 'BULK'";
         $results=$dbhandle->query($sql); 
        while($rs=$results->fetch_assoc()) { 
        ?>
        <option value="<?php echo $rs["pid"]; ?>"><?php echo $rs["Name"]; ?></option>
        <?php
        }
        ?>
        </select>


        <label style="font-size:20px" >State:</label>
        <select id="state-list" name="state"  >
        <option value="">Select State</option>
        </select>
        <button value="submit" onclick="return showMsg()">Submit</button>
    </form>

        Result: <span id="msgC"></span><br>

</body>
</html>

//states.php的代码

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<script type="text/javascript">//alert("sdfsd");</script>
<body>
<?php
require_once("connectdb.php");
//$db_handle = new DBController();


    $query ="SELECT oid,state FROM fieldo WHERE pid = '".$_POST["pid"]."'";
    $results = $dbhandle->query($query);
?>
    <option>Select State</option>
<?php
    while($rs=$results->fetch_assoc()) {
?>
    <option value="<?php echo $rs["oid"]; ?>"><?php echo $rs["state"]; ?></option>
<?php

}
?>
</body>
</html>

此列表工作正常,但我想在选择状态时显示声明的其他列(电子邮件、姓名和联系方式)。 它不工作

【问题讨论】:

    标签: php jquery ajax drop-down-menu jscript


    【解决方案1】:

    您是否尝试过在不破坏 PHP 脚本的情况下运行 while 循环?看来您几乎是在尝试运行 for 循环。

    <?php
        $sql="SELECT * FROM `Products` WHERE TYPE = 'BULK'";
        $results=$dbhandle->query($sql); 
        while($rs=$results->fetch_assoc()) { 
            echo '<option value="' . $rs["pid"] . '">' . $rs["Name"] . '</option>';
    
        }
    ?>
    

    更新

    好的,所以我听到了您的评论,并且我使用了ajax 电话来获取内容的完整显示;我不太确定你想用你的 showMsg() 函数做什么。我假设您想要创建一个新的查询请求。

    所以我更改了函数以创建一个看起来类似于以下内容的 Ajax 调用:

    <script>
    function showMsg()
    {
        var val;
        val = $("#state-list").val();
        $.ajax({
            type: "POST",
            url: "table.php",
            data: "state_id="+val,
            success: function(data){
                $("#msgC").html(data);
            }
        });
    }
    </script>
    

    然后table.php 将沿着这些路线......

    <?php
    // check to see if state_id has been submitted
    if(isset($_POST['state_id']))
    {
        $state_id = $_POST['state_id'];
    }
    // if it is not set, add something in place.
    else
    {
        $state_id = "1";
    }
    
    // query goes here - ask for the ID
    $query = "SELECT name, email from fieldo where state = " . $state_id;
    
    $results = $dbhandle->query($query);
    while($rs=$results->fetch_assoc()) {
    
        //... create table with all content;
    
    }
    
    ?>
    

    【讨论】:

    • 是的,伙计!下拉菜单完美地工作我选择一个产品,然后它们各自的状态显示在下一个下拉列表中,我想要的是当我选择一个状态时,它应该像我在这个函数中所做的那样在同一个表的相应列中显示值
    • function showMsg() { $("#msgC").html($("SELECT name, email from fieldo where state = '#state-list option:selected'").text() );返回假; }
    • 知道了,你的officer.php 是什么?我想我可能有什么想法
    • 对不起,我的错!我将officers.php重命名为states.php
    • 非常感谢队友,尽管它不会显示最终的最终结果,但它工作得非常完美。
    【解决方案2】:

    PHP 无法对浏览器中发生的事情做出反应。一旦 PHP 处理完页面并且 Web 服务器将其发送到浏览器,JavaScript 就会接管。

    这意味着如果客户选择一个新状态,它不会自动让 PHP 使用匹配的电子邮件、姓名和联系方式填充页面的其余部分。你需要稍微改变你的方法。

    一种方法是使用 Ajax。它会像这样工作:

    1. 在 jQuery 中,为状态下拉列表注册一个 onChange 事件处理程序。

    2. 当客户选择新状态时,将触发事件处理程序。在处理程序中,发出 Ajax 请求,向 PHP 发送选定状态。

    3. 接收请求的 PHP 文档将从数据库中查询匹配的电子邮件、姓名和联系人并发送结果,可能是 JSON 格式

    4. 返回 jQuery 处理程序,当数据从 PHP 服务器返回时(在响应回调中),使用该数据在页面中填充正确的电子邮件、姓名和联系人。

    另一种更简单的方法(如果您没有大量数据)是在页面加载时让 PHP 在多维数组中一次发送所有数据。这一次当用户选择一个新状态时,jQuery 事件处理程序会在大数组中查找该状态下的数据,并用数据填充表单。

    【讨论】:

      猜你喜欢
      • 2013-06-16
      • 2021-03-30
      • 1970-01-01
      • 2020-04-27
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      相关资源
      最近更新 更多