一直在寻找解决方案,并在堆栈溢出方面找到了一些帮助,但在大多数情况下,我发现的示例不使用由数据库查询形成的数组。这是我想要实现的一些代码...
$stores = mysql_query("SELECT * FROM Stores");
$staff = mysql_query("SELECT * FROM Staff");
我想创建两个元素,一个用于商店,另一个用于员工,但我想根据商店客户端过滤员工。因此,如果用户从第一个下拉列表中选择“悉尼”,则只向他们提供在第二个下拉列表中在悉尼商店工作的员工。然后,如果用户从第一个下拉列表中选择“伦敦”,那么悉尼的工作人员将被伦敦的工作人员取代,依此类推。
我的服务器端脚本是用PHP完成的,我可以使用PHP创建两个下拉列表。但我坚持使用jQuery从第二个下拉列表中移除我不想要的内容。
我知道这是可能的,因为我看到它一直使用。我已经看到了很多关于如何管理它的例子,但没有一个例子使用PHP数组中的数据来插入。
答案 0 :(得分:2)
你需要ajax。
当用户在下拉列表中选择某些内容时,会触发您可以处理的事件。在这个过程中你可以选择jQuery('#id_dropdown')。val()之类的选择值,并通过ajax发送它(我喜欢使用POST,因为你没有遇到GET请求大小限制)。
您使用php在服务器端处理此问题,使用选定的值访问数据库并通过ajax发送。当您有第二个下拉列表的正确结果时,您可以通过echo输出它。
最后,当响应返回到jQuery时,您可以在新的下拉列表中插入所有选项。
JAVASCRIPT PART:
以下是一些示例代码:
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 PART:
JAVASCRIPT PART(第二部分)
答案 1 :(得分:1)
对于次要下拉,是的,你需要一些ajax。
您可以创建一个脚本来获取与商店相对应的结果,然后发送回选项列表中的选项列表。
使用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);});"
并在此示例中为您的第二个选择(staff_select)添加一个ID。
作为解释:当第一个下拉列表发生更改时,它会向getStaff.php发送一个请求,并将store_id作为POST参数发送。 php sript根据商店ID获取syaff,并为您的辅助选择带回选项标签列表。比jquery将'数据'添加到您的辅助选择和VOilà!
希望这是明确的,因为它是一堆小东西,它会使它发挥作用。对不起,如果它看起来很草率,但一旦你知道它就很简单。
答案 2 :(得分:1)
下午学习如何做到这一点并且它运作良好。在这里为其他人发布新代码......
感谢教程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();
}
答案 3 :(得分:0)
我会尽力帮助你解释它。
mysql_query,你可以使用mysqli btw,mtsql被减少,返回一个结果集。 这意味着您将拥有查询中的所有记录。在使用它之前,您需要将结果压缩。这是通过使用像mysql_fetch_assoc,mysql_fetch_row等等的方法来完成的。有些东西比如获取到数组,但是我没有掌握它,所以我将使用fetch assoc来进行此回复。
所以,一旦你有yoru结果集,$ stores&amp;在您的情况下,$ 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。