![](/img/trans.png)
[英]PHP - pre select/save option on dynamically populated select dropdowns
[英]PHP jQuery dynamically populated SELECT
一直在寻找解决方案,并找到了一些有关堆栈溢出的帮助,但是在大多数情况下,我发现的示例并未使用由数据库查询形成的数组。 这是我想要实现的一些代码...
$stores = mysql_query("SELECT * FROM Stores");
$staff = mysql_query("SELECT * FROM Staff");
我想创建两个元素,一个用于商店,另一个用于员工,但是我想根据商店客户端过滤员工。 因此,如果用户从第一个下拉列表中选择“悉尼”,则在第二个下拉列表中仅向他们显示在悉尼商店工作的员工。 然后,如果用户从第一个下拉列表中选择“伦敦”,则悉尼工作人员将被伦敦工作人员替换,依此类推。
我的服务器端脚本是使用PHP完成的,我可以使用PHP创建两个下拉菜单。 但是我被困在jQuery上,从第二个下拉列表中删除了我不想要的。
我知道这是可能的,因为我一直都在使用它。 我已经看到了许多有关如何管理此问题的示例,但是没有一个示例使用PHP数组中的数据插入。
您需要ajax。
当用户在下拉列表中选择某项时,将触发您可以处理的事件。 在此过程中,您将采用jQuery('#id_dropdown')。val()之类的选择值,并通过ajax发送此值(我喜欢使用POST,因为您不会遇到GET请求大小限制)。
您可以使用php在服务器端进行处理,并使用选定的值并通过ajax发送来访问数据库。 如果第二个下拉列表的结果正确,则可以通过echo输出。
最后,当响应返回给jQuery时,您可以在新的下拉列表中插入所有选项。
JAVASCRIPT部分:
这是一些示例代码:
var parameters='value_selected='+value_dropdown;
jQuery.Post({
url: '/destiny_when_I_process',
data: parameters,
success: func_callback
});
//here you can imagine a pause, because PHP is processing the data you send by post
//....
//....
//this part is executed when php send the information
function func_callback(response_from_php){
jQuery('#second_dropdown').html(response_from_php);
}
PHP部分:
JAVASCRIPT部分(第二部分)
对于第二个下拉列表,是的,您需要一些ajax。
您可以创建一个脚本,以获取与商店对应的结果核心,然后将选项listm女巫插入ooption中。
使用jquery和php,您需要做一些事情。
一个php文件以获取结果并返回选项。 (假设getStaff.php)
<?php
//get the store id by post is it is set
if (isset($_POST['store->id']) $store_id = mysqli_real_escape_string($_POST['store_id']);
//get the data !! notice the WHERE caluse
$r = mysql_query("SELECT * FROM Staff" *WHERE store=''$store->is*);
//split the data in the array
$staffs=array();
while ($assoc = mysql_fetch_assoc($r)) {
//Varialbe = $assoc['colum_name'];
$staff->id=$assoc['id'];
$staff->name=$assoc['name'];
//and so on for each colum in your table.
array_push($staffs, $assoc);
}
//echo the result as option
foreach ($staffs as $staff) echo "<option value='$staff->id'>$staff->name</option>";
?>
在您的第一选择中,添加
onchange="$.post('getStaff.php', {store_id:$(this).val()}, function (data){ $('#staff_select').html(data);});"
并将ID添加到此ecample中的第二个选择(staff_select)。
作为说明:当第一个下拉列表发生更改时,它将以store_id作为POST参数发送到getStaff.php的请求。 php sript根据商店ID获取syaff,并为您的次级选择带回选项标签列表。 比起jQuery,将“数据”添加到您的辅助选择中,瞧!
希望这能使它正常工作,因为这是一堆小事情。 很抱歉,答案似乎很草率,但是一旦您知道了,它真的很简单。
花了下午的时间学习如何做,并且效果很好。 在这里为其他人发布新代码。
感谢本教程的http://forum.codecall.net/topic/59341-php-sql-jquery-and-ajax-populate-select-boxes/ 。
在此感谢大家。
首先构建PHP:
function agency_select() {
include('../include/dbase.php');
$agencies = $pdo->query("SELECT * FROM agency WHERE Status='active' ORDER BY AgencyName");
$opt = '';
while ($age_array = $agencies->fetch(PDO::FETCH_ASSOC)) {
$opt .= '<option value="'.$age_array['AgencyId'].'">'.$age_array['AgencyId'].' - '.$age_array['AgencyName'].' - '.$age_array['AgencySuburb'].'</option>'."\n\t\t\t\t\t\t\t";
}
return $opt;
}
这两个元素的HTML:
<label for="AgencyId">Client/Agency:</label>
<select class="uniform" id="AgencyId" name="AgencyId" style="width: 400px; overflow-x: hidden">
<?php echo agency_select(); ?>
</select>
<label for="Contact">Contact: </label>
<select class="uniform" id="Contact" name="Contact" style="width: 300px; overflow-x: hidden">
<option value="">----Select Client/Agency----</option>
</select>
AJAX文件:
if(isset($_POST['AgencyId'])) {
include('../include/dbase.php');
$option = '<option value="">----Select Contact----</option>';
$query = $pdo->prepare("SELECT * FROM client WHERE AgencyId= ? AND Status='active' ORDER BY FirstName");
$result = $query->execute(array($_POST['AgencyId'])));
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
$option .= '<option value="'.$row['id'].'">'.$row['FirstName'].' '.$row['LastName'].'</option>';
}
echo $option;
}
jQuery的:
$(document).ready(function () {
update_contacts();
});
function update_contacts() {
$('#AgencyId').change(function() {
$('#Contact').fadeOut();
$('#loader').show();
$.post('../ajax/ajax_contact_select.php', {
AgencyId: $('#AgencyId').val()
}, function (response) {
setTimeout("finishajax('Contact', '"+escape(response)+"')", 400);
});
return false;
});
}
function finishajax(id,response) {
$('#loader').hide();
$('#'+id).html(unescape(response));
$('#'+id).fadeIn();
}
我会尽力为您提供帮助。
mysql_query,您可以使用mysqli btw,将mtsql递减,返回结果集。 这意味着您将拥有查询中的所有记录。 您需要先将结果整理一下,然后才能使用它。 这是通过使用mysql_fetch_assoc,mysql_fetch_row等方法来完成的。有一些类似fetch的数组,但我不掌握它,所以我将使用fetch assoc进行回复。
因此,一旦您设置了结果集($ stores和$ staff),就可以对结果调用while循环以获取数据,如下所示:
while ($assoc = mysql_fetch_assoc($r)) {
//Varialbe = $assoc['colum_name'];
$stores->id=$assoc['id'];
$stores->name=$assoc['name'];
//and so on for each colum in your table.
array_push($stores, $assoc);
}
然后,您可以根据需要导出它。 在你的情况下会像
foreach ($stores as $store) echo "<option value='$store->id'>$store->name</option>";
我强烈建议您看一下http://php.net/manual/en/function.mysql-fetch-array.php,女巫将对fetch_assoc bu执行相同的操作,并使用以columname作为键的数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.