0

感谢您花时间看这个。

我有两个下拉菜单。第一个是客户列表,第二个是项目列表。

所有项目都只绑定到一个客户端,所以我希望代码获取客户端的用户输入,然后读取该值,并修改 PHP 代码以仅打印第二个下拉菜单中对应于的值客户选择。

这是一些代码。对于第一个下拉菜单:

     <div class="item">
                <label for='clSel' id='tsClLabel'>Client:</label>
                <select name='clSel' id='wClient' onChange="bGroup();">
                    <option></option>
                    <?php
                    $cQuery = "SELECT * FROM Clients ORDER BY Client_Name";
                    $cResult = mysql_query($cQuery);
                    while($cData = mysql_fetch_assoc($cResult)) {
                        echo '<option id="Cid" value="'.$cData['Id'].'">'.$cData['Client_Name'].'</option>';
                    }
                    ?>
                </select>

这是我的 jQuery 函数,用于从第一个下拉列表中获取用户选择的值:

           <script>
            function bGroup(){
                val1 = $("#wClient").val();
               // window.alert(val1);
              //  $('#div1').html(val1);
                return val1;
            }
        </script>

第二个下拉菜单的代码:

                <label for='billGroupId'>Billing Group: </label>
                <select name='billGroupId'>
                    <option value=''></option>
                    <?php
                        $sql = "SELECT * FROM Billing_Groups ORDER BY Client_Id, Name";
                        $sth=$dbh->prepare($sql);
                        $sth->execute();
                        while ($row = $sth->fetch())
                        {
                            if ($row['Name']!= ''){
                                echo "<option value='".$row['Id']."' > ".$row['Name']."</option>";
                                echo "<script> bGroup(); </script>"
                            }
                        }
                    ?>
                </select>

我知道我需要在第二个下拉菜单中包含WHERE 语句

基本上Select * FROM Clients WHERE Client_ID == $jsVAR

我已经在 var1 JavaScript 变量中有我需要的值。如何让 PHP 读取或通过 JS 代码发送到 PHP 的这一小段数据?

谢谢!!

4

2 回答 2

0

您可以SELECT使用数据库中的所有记录,然后将它们插入到您的页面 HTML 中json_encode()。像这样的东西:

<?php
$sql = "SELECT * FROM Billing_Groups ORDER BY Client_Id, Name";
$sth=$dbh->prepare($sql);
$sth->execute();
$projectData = array();
while ($row = $sth->fetch())
{
    if ($row['Name']!= ''){
        $projectData[$row['Client_Id']][] = $row;
    }
}
echo '<script type="text/javascript">var projects=', json_encode($projectData), ';</script>';
?>

然后,在您的 JS 中,您将变量projects用作关联数组(对象),例如:

<script type="text/javascript">
for (p in projects[clientId]) {
    alert(projects[p].Name);
}
</script>
于 2013-09-16T14:31:49.133 回答
0

棘手的一个,你有一个选择。一种方法是使用 Ajax 在获得第一级选择时获取第二级菜单结构,并在成功后填充第二级。这可能是个问题,因为发生这种情况时可能会出现某种网络延迟,而您无法控制(除非您处于封闭环境中)。因此,从用户的角度来看,这可能是反直觉和迟缓的感觉,尤其是在慢速连接或共享主机解决方案上,时间可能会有很大差异。

另一种方法是使用 jQuery 以某种方式提取所有可能的值并过滤它们(因此隐藏不适用的值),也许利用类或其他一些属性作为过滤数据的方法。使用 jQuery,您可以将数据分配给元素,因此您也可以使用它。如果有很多数据(从您描述的场景中无法判断),第二种方法可能不太好。查看您的第二级代码,我没有看到 WHERE 条件,因此我不确定第一级的值如何影响第二级的值,因此很难知道如何处理此方法。

于 2013-09-16T14:23:30.513 回答