如何根据 php 中另一个下拉列表中的选择自动填充下拉列表?
How to autopopulate a drodown based on the selection in another dropdown in php?
我已经阅读了几个类似的问题,但没有找到解决方案。
我正在尝试根据另一个下拉列表的选择获取一个下拉列表。第一个下拉列表是学校名称,选择后应获取该特定学校下的用户。
数据库中有两个table。第一个有名为 schoolname 的学校名称列,另一个名为 person 的 table 有一个名为 school 的列,它是外键,也有名字和姓氏,应该在选择时获取。
我指的是这个教程(https://makitweb.com/how-to-autopopulate-dropdown-with-ajax-pdo-and-php/)
我试过下面的代码:
queries.php
class Queries {
public static function getSchool() {
$dbUser = "xxx";
$dbPass = "xxxx";
$dbConn = "(DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=xxxx)(PORT=1521))(CONNECT_DATA=(SID=xxxx)))";
$conn = oci_connect($dbUser, $dbPass, $dbConn);
$sql = oci_parse($conn,"SELECT a.School, a.SchoolName FROM SchoolName a WHERE a.FormDisplay = 'Y' ORDER BY a.SchoolName");
return $sql;
}
}
form.php
<?php
require_once './functions/queries.php';
$getschool = new Queries();
?>
<div class="container">
<div class="panel panel-default">
<div class="panel-body">
<div id="addroles" class="hide" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<div id="resultRoleContent"></div>
</div>
<form class="cmxform" action ='functions/processform.php' id="Form1" method="post">
<legend> Form</legend>
<label for="addname">Please Select School</label>
<select class="form-control" name="school" id="school">
<?php
$nameslist = $getschool->getSchool();
oci_execute($nameslist, OCI_DEFAULT);
while ($row = oci_fetch_array($nameslist, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo '<option value="' . $row['SCHOOLNAME'] . '">' . $row['SCHOOLNAME']. '</option>';
}
?>
</select>
<label for="addname">Please Select Name</label>
<select class="form-control" name="names" id="names">
<?php
?>
</select>
</form>
</div>
</div>
</div>
<script>
$(document).ready(function(){
$('#school').change(function(){
var schoolname = $(this).val();
$('#names').find('option').not(':first').remove();
// AJAX request
$.ajax({
url: 'getUsers.php',
type: 'post',
data: {request: 1, primaryschool: schoolpropername},
dataType: 'json',
success: function(response){
var len = response.length;
for( var i = 0; i<len; i++){
var id = response[i]['primaryschool'];
var firstname = response[i]['firstName'];
var lastname = response[i]['lastName'];
$("#names").append("<option value='"+id+"'>"+firstname+"</option>");
}
}
});
});
});
</script>
getUsers.php
<?php
$dbUser = "xxxx";
$dbPass = "xxxx";
$dbConn = "(DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=xxxx)(PORT=1521))(CONNECT_DATA=(SID=xxxx)))";
$conn = oci_connect($dbUser, $dbPass, $dbConn);
$request = 0;
if(isset($_POST['request'])){
$request = $_POST['request'];
}
if($request == 1){
$schoolname = $_POST['school'];
$sql =oci_parse($conn,"SELECT * FROM person ");
oci_bind_by_name($sql, ':primaryschool', $schoolname);
$result = oci_execute($sql);
$response = array();
foreach($result as $row){
$response[] = array(
"firstname" => $row['firstname']
);
}
echo json_encode($response);
exit;
}
在上面的代码中,我遇到了以下三个错误:
- PHP 注意:未定义索引:学校在 getusers.php
2.PHP 警告:oci_bind_by_name(): ORA-01036: getusers.php 中的非法变量 name/number
3.PHP 警告:oci_bind_by_name(): ORA-01036: getusers.php
中的非法变量 name/number
发生未定义错误,因为学校值未进入 $_POST
数组。打印 $_post 数组并检查您在哪个索引中获得 school
值。
您没有在查询中的 WHERE
子句中提及列名称以获取特定学校的详细信息。所以你收到了那个警告。
您的查询应该如下所示。
假设您的 table 中的列名称为 schoolname
。
$sql =oci_parse($conn,"SELECT * FROM person WHERE schoolname = :primaryschool");
oci_bind_by_name($sql, ':primaryschool', $schoolname);
我已经阅读了几个类似的问题,但没有找到解决方案。 我正在尝试根据另一个下拉列表的选择获取一个下拉列表。第一个下拉列表是学校名称,选择后应获取该特定学校下的用户。
数据库中有两个table。第一个有名为 schoolname 的学校名称列,另一个名为 person 的 table 有一个名为 school 的列,它是外键,也有名字和姓氏,应该在选择时获取。
我指的是这个教程(https://makitweb.com/how-to-autopopulate-dropdown-with-ajax-pdo-and-php/)
我试过下面的代码:
queries.php
class Queries {
public static function getSchool() {
$dbUser = "xxx";
$dbPass = "xxxx";
$dbConn = "(DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=xxxx)(PORT=1521))(CONNECT_DATA=(SID=xxxx)))";
$conn = oci_connect($dbUser, $dbPass, $dbConn);
$sql = oci_parse($conn,"SELECT a.School, a.SchoolName FROM SchoolName a WHERE a.FormDisplay = 'Y' ORDER BY a.SchoolName");
return $sql;
}
}
form.php
<?php
require_once './functions/queries.php';
$getschool = new Queries();
?>
<div class="container">
<div class="panel panel-default">
<div class="panel-body">
<div id="addroles" class="hide" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<div id="resultRoleContent"></div>
</div>
<form class="cmxform" action ='functions/processform.php' id="Form1" method="post">
<legend> Form</legend>
<label for="addname">Please Select School</label>
<select class="form-control" name="school" id="school">
<?php
$nameslist = $getschool->getSchool();
oci_execute($nameslist, OCI_DEFAULT);
while ($row = oci_fetch_array($nameslist, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo '<option value="' . $row['SCHOOLNAME'] . '">' . $row['SCHOOLNAME']. '</option>';
}
?>
</select>
<label for="addname">Please Select Name</label>
<select class="form-control" name="names" id="names">
<?php
?>
</select>
</form>
</div>
</div>
</div>
<script>
$(document).ready(function(){
$('#school').change(function(){
var schoolname = $(this).val();
$('#names').find('option').not(':first').remove();
// AJAX request
$.ajax({
url: 'getUsers.php',
type: 'post',
data: {request: 1, primaryschool: schoolpropername},
dataType: 'json',
success: function(response){
var len = response.length;
for( var i = 0; i<len; i++){
var id = response[i]['primaryschool'];
var firstname = response[i]['firstName'];
var lastname = response[i]['lastName'];
$("#names").append("<option value='"+id+"'>"+firstname+"</option>");
}
}
});
});
});
</script>
getUsers.php
<?php
$dbUser = "xxxx";
$dbPass = "xxxx";
$dbConn = "(DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=xxxx)(PORT=1521))(CONNECT_DATA=(SID=xxxx)))";
$conn = oci_connect($dbUser, $dbPass, $dbConn);
$request = 0;
if(isset($_POST['request'])){
$request = $_POST['request'];
}
if($request == 1){
$schoolname = $_POST['school'];
$sql =oci_parse($conn,"SELECT * FROM person ");
oci_bind_by_name($sql, ':primaryschool', $schoolname);
$result = oci_execute($sql);
$response = array();
foreach($result as $row){
$response[] = array(
"firstname" => $row['firstname']
);
}
echo json_encode($response);
exit;
}
在上面的代码中,我遇到了以下三个错误:
- PHP 注意:未定义索引:学校在 getusers.php 2.PHP 警告:oci_bind_by_name(): ORA-01036: getusers.php 中的非法变量 name/number 3.PHP 警告:oci_bind_by_name(): ORA-01036: getusers.php 中的非法变量 name/number
发生未定义错误,因为学校值未进入
$_POST
数组。打印 $_post 数组并检查您在哪个索引中获得school
值。您没有在查询中的
WHERE
子句中提及列名称以获取特定学校的详细信息。所以你收到了那个警告。 您的查询应该如下所示。
假设您的 table 中的列名称为 schoolname
。
$sql =oci_parse($conn,"SELECT * FROM person WHERE schoolname = :primaryschool");
oci_bind_by_name($sql, ':primaryschool', $schoolname);