在 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。它会像这样工作:
在 jQuery 中,为状态下拉列表注册一个 onChange
事件处理程序。
当客户选择一个新状态时,事件处理程序将被触发。在处理程序中,发出一个 Ajax 请求,向 PHP 发送所选状态。
收到请求的 PHP 文档将从数据库查询匹配的电子邮件、姓名和联系人,并发送结果,可能作为 JSON
回到 jQuery 处理程序,当数据从 PHP 服务器返回时(在响应回调中),使用该数据用正确的电子邮件填充页面, 姓名和联系方式。
另一种更简单的方法(如果您没有大量数据)是让 PHP 在页面加载时一次性发送多维数组中的所有数据。这次当用户选择一个新状态时,jQuery 事件处理程序将在大数组中查找该状态下的数据,并用数据填充表单。
我需要帮助,我是 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。它会像这样工作:
在 jQuery 中,为状态下拉列表注册一个
onChange
事件处理程序。当客户选择一个新状态时,事件处理程序将被触发。在处理程序中,发出一个 Ajax 请求,向 PHP 发送所选状态。
收到请求的 PHP 文档将从数据库查询匹配的电子邮件、姓名和联系人,并发送结果,可能作为 JSON
回到 jQuery 处理程序,当数据从 PHP 服务器返回时(在响应回调中),使用该数据用正确的电子邮件填充页面, 姓名和联系方式。
另一种更简单的方法(如果您没有大量数据)是让 PHP 在页面加载时一次性发送多维数组中的所有数据。这次当用户选择一个新状态时,jQuery 事件处理程序将在大数组中查找该状态下的数据,并用数据填充表单。