一个下拉框有助于填充另一个


One drop down box helps populates the other

我有一个使用两个下拉菜单将数据插入MySQL表的表单。第一个是公园列表,第二个是游乐设施列表。第二个下拉框应该只显示通过"park_id"列链接到第一个下拉框的项目。我需要一种简单的方法,让第二个框根据第一个框的选择进行填充。

这是迄今为止的形式:

<tr><td>Select Park:</td>
    <td><select name="park_id">
    <option value="">Select Park</option>
<?php   foreach ($res as $row) {
    printf('<option value="%s">%s</option>' . PHP_EOL, $row['park_id'], $row['name'] );
 } ?>
    </select></td></tr>

    <tr><td>Select Ride:</td>
    <td><select name="ride_id">
    <option value="">Select Ride</option>
<?php   foreach ($res2 as $row2) {
    printf('<option value="%s">%s</option>' . PHP_EOL, $row2['ride_id'], $row2['name'] );
 } ?>
    </select></td></tr>

因此,不知何故,在选择公园后需要运行查询,并使用"$park_id=$row[park_id]"来帮助生成"选择骑行"下拉列表的结果。

这是我需要用于第二个下拉列表的查询:

$qry2 = "SELECT ride_id, name FROM tpf_rides WHERE park_id = $park_id ORDER BY name ASC";

有人能和我谈谈吗?而且我的技能非常有限,所以一个相对简单的解决方案会很棒。Thankmark

为此,您必须了解AJAX,我强烈建议使用jQuery的实现。您还需要掌握JSON字符串的编码和解码。

你的代码的基本想法是这样的:

// listen for user to change the <select> item
$('select#park').on('change', function(){
    $.ajax({
        url: 'getrides.php' // send a park id to this script
        ,cache: false  // do not cache results in browser
        ,type: 'POST' // send POST to getrides.php
        ,data: {'park_id': $('select#park').val()} // getrides.php will receive $_POST['park_id']
        ,dataType: 'json' // this AJAX call expects a JSON string as a return value
        ,success: function(data){ // the data variable will be converted to an array from JSON
            // check out all your data
            console.log(data);
            // loop through your array
            $.each(data, function(index, info){
                // see your array indexes
                console.log(index);
                // see data in each array item
                console.log(info);
            });
        }
});

更新

您还可以将所有的公园和游乐设施加载到Javascript数组中,并根据用户从下拉列表中选择的内容,用这些数组成员填充第二个下拉列表。

<script>
var rides = new Array();
rides['park1'].push('ride1');
rides['park1'].push('ride2');
rides['park1'].push('ride3');
rides['park1'].push('ride4');
rides['park1'].push('ride5');
rides['park2'].push('ride1');
rides['park2'].push('ride2');
rides['park2'].push('ride3');
rides['park2'].push('ride4');
rides['park2'].push('ride5');
// listen for user to change the <select> item
$('select#park').on('change', function(){
    // clear current DD options
    $('select#rides').html();
    // loop through array of available rides for selected park
    $.each(rides[''+$(this).val()+''], function(index, value){
        // dynamically create the proper DD options
        $('select#rides').append('<option>'+value+'</option>');
    });
});
</script>

您必须编写另一个文件,该文件使用从自行车列表值中选择的第一个的id来加载第二个选择标签的选项骑行列表

然后在第一个文件上创建一个空div,该文件将加载第二个文件的结果,该文件是乘车的列表

$(function() {
  $('#ID_of_the_park_selecttag').change(function() {
    var value = $("#ID_of_the_park_selecttag").find('option:selected').text();
         $("#ID_OF_THE_DIV").html("");
      $("#ID_OF_THE_DIV").load('theOtherFile.php', {"bikename":value } );// value is the value of the select option from the first <select tag>
  });});

然后在第二个文件中,您可以获得选择为$_POST['bikename']的自行车的值,并进行查询,然后填写列表

我最近不得不自己做这件事。以下是我所做的,请随意使用对你有意义的东西。我尝试了一种对自己来说似乎很简单的方法。

<select name="department_list" id="department_list" onchange="$('#singleUser').load('yourextraphppage.php?nid='+this.value);">
<option value='none'>Select a department</option>

然后用数据加载您的第一个选择列表,并关闭选择标记。。。在需要第二次选择的位置添加一个空白div。我使用第一个选择列表中的值作为第二个选择列表查询的参数。(它是第二个选择列表第二个表中的外键)

<div id="singleUser" class="singleUser">
</div>

最后,您需要从第一个选择列表中调用的附加PHP页面。这是我代码的基本版本。

echo "<option value='none'>Select user</option>";
try {
$db = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
    $stmt = $db->prepare("SELECT dm.empid AS empid, u.name AS name FROM mytable dm
                JOIN mytable2 u ON dm.empid = u.id 
                WHERE dm.deptid = :id
                ORDER BY u.name");
    $stmt->bindParam(':id', $id);
    $stmt->execute();
    while ($r = $stmt->fetch()) {
    $empid = $r['empid'];
            $userName = $r['name'];
           echo "<option value='".$empid."'>".$userName."</option>"; 
}
echo "</select>";
echo "</p>";
$db = null;
}
catch (PDOException $ex) {
    echo "An Error occurred!";
    }

我希望这能有所帮助。我很忙,所以现在不能详细解释。我稍后再查,看看你是否有任何问题。

前一天我在帮助别人一个类似的页面:

2下拉选择,并且第二下拉中的选项列表根据第一下拉中选择的选项而改变。

该解决方案涉及在<select>jQuery中使用<optgroup>元素(这对初学者来说并不容易,但至少您可以复制代码。

请参阅这里的问题:jQuery-在页面加载时选择optgoup,子级在第二个选择中通过父级中的默认选择选项选择

在这里查看代码的作用:http://jsfiddle.net/goodegg/phj8q/(尽管其中有一个错误)。

编辑

转到此处查看我的代码分叉版本:http://jsfiddle.net/annabels/7xksa/