0

一直在寻找解决方案,并在堆栈溢出方面找到了一些帮助,但在大多数情况下,我发现的示例没有使用由数据库查询形成的数组。这是我想要实现的一些代码......

$stores = mysql_query("SELECT * FROM Stores");
$staff = mysql_query("SELECT * FROM Staff");

我想创建两个元素,一个用于商店,另一个用于员工,但我想根据商店客户端过滤员工。因此,如果用户从第一个下拉列表中选择“Sydney”,则他们只会在第二个下拉列表中看到在悉尼商店工作的员工。然后如果用户从第一个下拉列表中选择“伦敦”,则悉尼工作人员将被伦敦工作人员所取代,依此类推。

我的服务器端脚本是用 PHP 完成的,我可以用 PHP 创建两个下拉列表。但是我坚持使用 jQuery 从第二个下拉列表中删除我不想要的。

我知道这是可能的,因为我看到它一直在使用。我已经看到很多关于如何管理它的示例,但没有一个示例使用 PHP 数组中的数据来插入 .

4

4 回答 4

2

你需要ajax。

当用户在下拉列表中选择某些内容时,这会触发您可以处理的事件。在此过程中,您获取选择的值,例如 jQuery('#id_dropdown').val(),然后通过 ajax 发送(我喜欢使用 POST,因为您不会遇到 GET 请求大小限制)。

您可以在服务器端使用 php 进行处理,使用选定的值访问数据库并通过 ajax 发送。当您获得第二个下拉列表的正确结果时,您可以通过 echo 输出它。

最后,当响应返回给 jQuery 时,您可以在新的下拉列表中插入所有选项。


JAVASCRIPT部分:

  1. 将事件绑定到第一个下拉列表
  2. 获取下拉列表中选择的选项的值
  3. 发出ajax请求

这是一些示例代码:

 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部分:

  1. 从 POST 中获取价值
  2. 使用该值访问数据库
  3. 回声(发送响应)。您发送一串文本(HTML 格式),这确实不是很专业,但可以用于演示目的。专业人士发送 JSON,因为 JSON 更轻量级。

JAVASCRIPT部分(第二部分)

  1. 在回调函数中,您通过第一个参数接收响应数据
  2. 在第二个下拉菜单中插入新数据(由于数据已经是HTML,不需要处理)
于 2012-10-20T02:49:16.307 回答
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();
}
于 2012-10-20T06:48:34.757 回答
1

对于第二个下拉菜单,是的,您需要一些 ajax。

您可以创建一个脚本来获取对应于商店的结果并发送回选项 listm 女巫被插入到选项中。

使用 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);});"

并在此 ecample 中为您的第二个选择 (staff_select) 添加一个 id。

作为解释:当第一个下拉列表更改时,它会向 getStaff.php 发送一个请求,并将 store_id 作为 POST 参数。php sript 根据商店 ID 获取 syaff,并为您的次要选择带回选项标签列表。比 jquery 将“数据”添加到您的辅助选择中,瞧!

希望你清楚,因为它是一堆小东西一起让它工作。抱歉,如果答案看起来很草率,但是一旦您知道它就真的很简单。

于 2012-10-20T03:07:37.987 回答
0

我会尽力帮助你,我可以解释它。

mysql_query,你应该使用 mysqli 顺便说一句,mtsql 被弃用,返回一个结果集。这意味着您将拥有查询中的所有记录。在使用它之前,您需要先将结果分解。这是通过使用 mysql_fetch_assoc、mysql_fetch_row 等方法来完成的。有类似 fetch to array 之类的东西,但我不掌握它,所以我将使用 fetch assoc 来回复。

因此,一旦您获得了 yoru 结果集、$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女巫会用一个以 columname 作为键的数组来做同样的 fetch_assoc bu。

于 2012-10-20T02:55:05.960 回答