2013-09-16 2 views
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로 보내려면 어떻게해야합니까?

감사합니다.

+1

난 당신이 – user1

+0

ajax' JQuery와'으로 보일 것입니다 생각하는 변수 projects 사용 변수가 POST/GET 변수로 전달되지 않으면 php로 javascript 변수를 읽을 수 없습니다. 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, 당신은 연관 배열 (객체), 예를 들면 :

<script type="text/javascript"> 
for (p in projects[clientId]) { 
    alert(projects[p].Name); 
} 
</script> 
0

까다로운 하나 선택의 여지가 있습니다. 한 가지 방법은 Ajax를 사용하여 첫 번째 레벨 선택 사항을 가져올 때 두 번째 레벨 메뉴 구조를 가져와 성공한 두 번째 레벨을 채우는 것입니다. 이런 일이 발생하는 동안 네트워크 지연이 발생할 가능성이 있기 때문에 문제가 될 가능성이 높습니다. 폐쇄 된 환경에 있지 않으면 제어 할 수 없습니다. 따라서 사용자의 관점에서 볼 때 직관적이고 부진한 느낌이 느껴질 수 있습니다. 느린 연결이나 시간이 엄청나게 달라질 수있는 공유 호스팅 솔루션의 경우 특히 그러합니다.

다른 방법은 어떻게 든 모든 값을 가져 와서 jQuery를 사용하여 필터링 (적용되지 않는 항목 숨기기)하는 것입니다. 아마도 클래스 또는 다른 속성을 데이터 필터링 방법으로 활용하십시오. jQuery를 사용하면 요소에 데이터를 할당 할 수 있으므로 사용할 수도 있습니다. 두 번째 방법은 많은 양의 데이터가있는 경우 좋지 않을 수 있습니다 (설명 된 시나리오에서 알 수 없음). 두 번째 레벨 코드를 살펴보면 어디서 조건이 보이지 않으므로 첫 번째 레벨의 값이 두 번째 레벨의 값에 어떻게 영향을 미치는지 알 수 없으므로이 메소드를 처리하는 방법을 알기가 어렵습니다.

관련 문제