在 php 中显示依赖下拉列表中的数据

Display Data from a dependent dropdown in php

我需要帮助,我是 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 脚本的情况下执行 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;

}

?>

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

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

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

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

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

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

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

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