2013-09-16 85 views
0

感謝您抽出時間看一下。在第一個下拉菜單中通過用戶輸入更改第二個下拉菜單中的選項

我有兩個下拉菜單。第一個是客戶列表,第二個是項目列表。

所有項目都綁定到一個客戶端,所以我希望代碼爲客戶端獲取用戶輸入,然後讀取該值,並修改PHP代碼以僅打印第二個下拉列表中的值菜單對應於所選客戶端。

這是一些代碼。對於第一個下拉菜單:

​​

這裏是我的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的小部分數據?

謝謝!

+1

我想你應該看看'jQuery的ajax' – user1

+0

你不能用php讀取javascript變量,除非該變量是作爲POST/GET變量傳遞的。 PHP代碼一次在服務器端運行,然後呈現給用戶。另一方面,Javascript是客戶端,並在呈現給用戶之後/之後運行。您所尋找的是在選擇客戶端後重新加載頁面或使用[ajax請求](http://www.w3schools.com/ajax/)在不重新加載頁面的情況下處理腳本。 – amaster

回答

0

您可以從數據庫中的SELECT所有記錄,然後使用json_encode()將它們插入到您的頁面HTML中。類似的東西:

<?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> 
0

Tricky one, 您有選擇。一種方法是在獲得第一級選擇時使用Ajax獲取第二級菜單結構,並在成功時填充第二級。這可能是一個問題,因爲在發生這種情況時可能會出現某種網絡延遲,其中您無法控制(除非您處於封閉環境中)。所以從用戶的角度來看,它可能會違反直覺和緩慢的感覺,特別是在時間差異巨大的慢速連接或共享主機解決方案中。

另一種方式是以某種方式把所有可能的值和過濾他們(這樣隱藏不適用的那些)使用jQuery,也許使用類或其他一些屬性作爲過濾數據的方法。使用jQuery,你可以將數據分配給元素,所以你也可以使用它。如果有大量數據(不能從你描述的場景中分辨出來),第二種方法可能不太好。看你的第二級代碼,我沒有看到一個WHERE條件,所以我不知道如何從第一級值影響第二級的,所以很難知道如何應對,對於這種方法。

相關問題