如何根据 php 中另一个下拉列表中的选择创建一个下拉列表?
How to create a dropdown based on selection in another dropdown in php?
这是我第一次使用甲骨文。我有点坚持在页面上打印第二个下拉菜单的值。我在浏览器的响应选项卡中得到了正确的结果,但我不确定为什么它没有打印在主页上。在第一个下拉列表中选择一个值后,它应该在第二个下拉列表中打印名称。
这是我的代码:
form.php
<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> Faculty Transaction 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="names">Please Select Name</label>
<select class="form-control" name="names" id="names">
<option value='0' >Select Name</option>
</select>
</form>
</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: schoolname},
dataType: 'json',
success: function(response){
var len = response.length;
for( var i = 0; i<len; i++){
var firstname = response[i]['FIRSTNAME'];
$("#names").append("<option value='"+firstname+"'>"+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){
$schoolpropername = $_POST['primaryschool'];
$sql =oci_parse($conn,"SELECT * FROM person Where primaryschool = :primaryschool Order by firstname");
oci_bind_by_name($sql, ':primaryschool', $schoolname);
oci_execute($sql);
?>
<select class="form-control" name="names" id="names">
<?php
while($result = oci_fetch_array($sql, OCI_ASSOC+OCI_RETURN_NULLS)){
echo '<option value="' . $result['FIRSTNAME'] . '">' . $result['FIRSTNAME']. '</option>';
}
}
?>
</select>
我在浏览器的响应选项卡中得到了正确的结果。它只是没有打印在网页上。 error_log 没有错误。我也提到了几个类似的问题,但没有得到答案,所以发布了。
尝试改变这个:
脚本
<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: schoolname},
success: function(response){
$("select#names").html('<option value="0">Select Name</option>');
$("select#names").append(response);
}
});
});
});
</script>
getUsers.php
<?php
$dbUser = "xxxx";
$dbPass = "xxxx";
$dbConn = "(DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=xxxx)(PORT=1521))(CONNECT_DATA=(SID=utf8devl)))";
$conn = oci_connect($dbUser, $dbPass, $dbConn);
$request = 0;
if(isset($_POST['request'])){
$request = $_POST['request'];
}
if($request == 1){
$schoolpropername = $_POST['primaryschool'];
$sql =oci_parse($conn,"SELECT * FROM person Where primaryschool = :primaryschool Order by firstname");
oci_bind_by_name($sql, ':primaryschool', $schoolname);
oci_execute($sql);
$response = '';
while($result = oci_fetch_array($sql, OCI_ASSOC+OCI_RETURN_NULLS)){
$response .= '<option value="' . $result['FIRSTNAME'] . '">' . $result['FIRSTNAME']. '</option>' . PHP_EOL;
}
echo $response;
}
也可以使用 JSON
响应来完成:
getUsers.php
...
$response = [];
while($result = oci_fetch_array($sql, OCI_ASSOC+OCI_RETURN_NULLS)){
$response[] = $result['FIRSTNAME'];
}
echo json_encode($response);
...
Jquery
...
$.ajax({
url: 'getUsers.php',
type: 'post',
data: {request: 1, primaryschool: schoolname},
dataType: 'json',
success: function(response){
$("select#names").html('<option value="0">Select Name</option>');
var arr = jQuery.parseJSON(response);
$.each( arr, function( key, value ) {
$("select#names").append('<option value="'+ value +'">'+ value +'</option>');
});
}
});
...
更新
这是在我的本地主机上生成的确认信息:
HTML
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#school').change(function(){
var schoolname = $(this).val();
$('#names').find('option').not(':first').remove();
// AJAX request
$.ajax({
url: 'resourse.php',
type: 'post',
data: {request: 1, primaryschool: schoolname},
success: function(response){
$("select#depend").html('<option value="0">Select Name</option>');
$("select#depend").append(response);
}
});
});
});
</script>
</head>
<body>
<select id="school">
<option value="1">One</option>
<option value="2">Two</option>
</select>
<select id="depend">
</select>
</body>
</html>
resourse.php
<?php
$array = [
"Alex",
"Peter",
"Sara"
];
$out = '';
foreach ($array as $val){
$out .= '<option value="' . $val . '">' . $val. '</option>' . PHP_EOL;
}
echo $out;
以上示例按预期工作。
这是我第一次使用甲骨文。我有点坚持在页面上打印第二个下拉菜单的值。我在浏览器的响应选项卡中得到了正确的结果,但我不确定为什么它没有打印在主页上。在第一个下拉列表中选择一个值后,它应该在第二个下拉列表中打印名称。
这是我的代码:
form.php
<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> Faculty Transaction 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="names">Please Select Name</label>
<select class="form-control" name="names" id="names">
<option value='0' >Select Name</option>
</select>
</form>
</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: schoolname},
dataType: 'json',
success: function(response){
var len = response.length;
for( var i = 0; i<len; i++){
var firstname = response[i]['FIRSTNAME'];
$("#names").append("<option value='"+firstname+"'>"+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){
$schoolpropername = $_POST['primaryschool'];
$sql =oci_parse($conn,"SELECT * FROM person Where primaryschool = :primaryschool Order by firstname");
oci_bind_by_name($sql, ':primaryschool', $schoolname);
oci_execute($sql);
?>
<select class="form-control" name="names" id="names">
<?php
while($result = oci_fetch_array($sql, OCI_ASSOC+OCI_RETURN_NULLS)){
echo '<option value="' . $result['FIRSTNAME'] . '">' . $result['FIRSTNAME']. '</option>';
}
}
?>
</select>
我在浏览器的响应选项卡中得到了正确的结果。它只是没有打印在网页上。 error_log 没有错误。我也提到了几个类似的问题,但没有得到答案,所以发布了。
尝试改变这个:
脚本
<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: schoolname},
success: function(response){
$("select#names").html('<option value="0">Select Name</option>');
$("select#names").append(response);
}
});
});
});
</script>
getUsers.php
<?php
$dbUser = "xxxx";
$dbPass = "xxxx";
$dbConn = "(DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=xxxx)(PORT=1521))(CONNECT_DATA=(SID=utf8devl)))";
$conn = oci_connect($dbUser, $dbPass, $dbConn);
$request = 0;
if(isset($_POST['request'])){
$request = $_POST['request'];
}
if($request == 1){
$schoolpropername = $_POST['primaryschool'];
$sql =oci_parse($conn,"SELECT * FROM person Where primaryschool = :primaryschool Order by firstname");
oci_bind_by_name($sql, ':primaryschool', $schoolname);
oci_execute($sql);
$response = '';
while($result = oci_fetch_array($sql, OCI_ASSOC+OCI_RETURN_NULLS)){
$response .= '<option value="' . $result['FIRSTNAME'] . '">' . $result['FIRSTNAME']. '</option>' . PHP_EOL;
}
echo $response;
}
也可以使用 JSON
响应来完成:
getUsers.php
...
$response = [];
while($result = oci_fetch_array($sql, OCI_ASSOC+OCI_RETURN_NULLS)){
$response[] = $result['FIRSTNAME'];
}
echo json_encode($response);
...
Jquery
...
$.ajax({
url: 'getUsers.php',
type: 'post',
data: {request: 1, primaryschool: schoolname},
dataType: 'json',
success: function(response){
$("select#names").html('<option value="0">Select Name</option>');
var arr = jQuery.parseJSON(response);
$.each( arr, function( key, value ) {
$("select#names").append('<option value="'+ value +'">'+ value +'</option>');
});
}
});
...
更新
这是在我的本地主机上生成的确认信息:
HTML
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#school').change(function(){
var schoolname = $(this).val();
$('#names').find('option').not(':first').remove();
// AJAX request
$.ajax({
url: 'resourse.php',
type: 'post',
data: {request: 1, primaryschool: schoolname},
success: function(response){
$("select#depend").html('<option value="0">Select Name</option>');
$("select#depend").append(response);
}
});
});
});
</script>
</head>
<body>
<select id="school">
<option value="1">One</option>
<option value="2">Two</option>
</select>
<select id="depend">
</select>
</body>
</html>
resourse.php
<?php
$array = [
"Alex",
"Peter",
"Sara"
];
$out = '';
foreach ($array as $val){
$out .= '<option value="' . $val . '">' . $val. '</option>' . PHP_EOL;
}
echo $out;
以上示例按预期工作。