2017-09-21 4 views
1

여러 동적 드롭 다운이 붙어 있습니다. 그래서 여기에 내가 풀려고하는 문제가 있습니다. 다음 네 개의 예제 테이블을 데이터베이스에 저장하고 값을 동적으로 액세스하려고합니다. 드롭 다운 2 드롭 다운 4 I가 다음과 같이 제 드롭에 대한 값을 검색 2 및 3여러 종속 드롭 다운 메뉴

| ID | name | percent |  | ID | name | languageValue | 100 | 75 | 501 | 
| --- | ------ | ------- |  | --- | ------- | ------------- | --- | --- | --- | 
| 1 | 100% | 100  |  | 1 | English | english  | y | y | n | 
| 3 | 75% | 75  |  | 2 | German | german  | y | n | n | 
| 2 | 50% 1 | 501  |  | 3 | French | french  | n | n | y | 
Table 1 (Dropdown 1)   Table 2 (Dropdown 2) 

| ID | CoreSubjectName | CoreSubjectValue | | ID | MinorSubjectName | MinorSubjectValue | 
| --- | --------------- | ---------------- | | --- | ---------------- | ----------------- | 
| 1 | Maths   | maths   | | 1 | English   | english   | 
| 2 | Politics  | politics   | | 2 | Politics   | politics   | 
| 3 | Chemics   | chemics   | | 3 | Chemics   | chemics   | 
Table 3 (Dropdown 3)       Table 4 (Dropdown 4) 

에 의존하고, 드롭 다운 1에 의존한다. (나는 닫는 태그를 생략한다).

<select name="percent" id ="percent" onchange="getPercent(this.value);"> 
    <option value="">Choose Percent</option> 
<?php 
    $PercentPost = $_POST["percent"]; 
    $PercentQuery = "SELECT percent, name FROM percentTable"; 
    $results=mysqli_query($conn, $anteilQuery); 
    //loop 
    while ($row = mysqli_fetch_array($results)){ 
     echo '<option value="'.$row[percent].'">'.$row[name].'</option>'; 
    } 
?> 
<select name="language" id="language"> 
      <option value=""></option> 
     </select> 

그리고 두 번째 드롭 다운 작성을위한 JS-아약스 :

function getPercent(val){ 
     //ajax function 
     $.ajax({ 
      type: "POST", 
      url: "form.php", 
      data: "percent="+val, 
      success: function(data){ 
       $("#language").html(data); 
      } 
     }); 

    } 

form.php 지금까지이 코드가 포함이 잘 작동

$PercentPost = $_POST["percent"]; 
if (!empty($_POST["percent"])) { 

    $query="SELECT name, languageValue FROM table2 WHERE `$PercentPost`='y'"; 

    $results = mysqli_query($conn, $query); 

    while ($row = mysqli_fetch_array($results)){ 
     echo '<option value="'.$row[languageValue].'">'.$row[name].'</option>'; 
    } 
} 

,하지만 지금은 돈 ' 드롭 다운 4를 동적으로 채우는 방법을 알고 있습니다. 드롭 다운 4에서는 2와 3의 선택된 값을 선택할 수 없습니다. 나는 js의 아약스로 끝내야 만한다는 것을 알고 있지만, 나는 아무런 단서가 없다.

누군가 나를 도울 수 있습니까? 고맙습니다.

+0

따라서 드롭 다운 2 및 3이 선택되면 드롭 다운 4의 내용을 업데이트하고 2 또는 3을 변경하면 드롭 다운 2의 내용을 업데이트하려고합니다. 마지막으로 2와 3을 선택하기 전에 드롭 다운 4를 선택할 수 없습니다. 드롭 다운 1에 의존하는 드롭 다운 2에서도 동일합니다. 올바르게 문제를 이해 했습니까? –

+0

맞습니다! –

+0

당신에게 적절한 대답이 추가되었습니다. PHP 코드에도 SQL injection projection이 없습니다! 나는 대답에 그것을 추가했다. –

답변

1

따라서 DropDown 4는 사용 중지됨 (disabled 속성) 또는 표시되지 않음 (style="display:none;")으로로드됩니다.

나는 값 0 ... 선택처럼 드롭 다운 2와 3에 기본 값을 추가하거나 것이다 -1

는 그럼 난에 대한 onchange 속성을 추가 할 것 (예를 들어, 다음 PHP 코드를 참조)

function loadDD4Values(){ 
    if ($('#language').val() <> 0 && $('#coreSubject').val() <> 0){ 
     //ajax function 
     $.ajax({ 
      type: "POST", 
      url: "form.php", //You can detect what to do based on params, or have a different PHP page 
      data: "language="+$('#language').val() + "&coreSubject=" + $('#coreSubject').val() , 
      success: function(data){ 
       $("#minorSubject").html(data); 
       $('#minorSubject').style.display = '';//or remove attribute disabled, also if you want you can disable/hide DropDown 2 and 3 here 
      } 
     }); 
    }else{ 
     $('#minorSubject').style.display = 'none'; //or add attribute disabled 
    } 

    //Also here you can decide what to do if the user modify DropDown 2 or 3 for example, reset the DropDown 4 values, or just the selected one: 
    $('#minorSubject').selectedValue = 0; 
} 

이 그런 다음 PHP가 될 수있다 : 드롭 2, 3, 그들은 모두 같은 JS 함수를 호출합니다

if(isset($_POST['percent'])){ 
    // Your code from the DropDown 2 
}else if (isset($_POST['language']) && isset($_POST['coreSubject'])){ 
    //You didn't had sql injection protection in your question code !!! 
    $language = mysql_real_escape_string($_POST['language']); 
    $coreSubject = mysql_real_escape_string($_POST['coreSubject']); 

    $query="SELECT ... FROM minorSubject WHERE `$language`='...' AND `$coreSubject`='...'"; 

    $results = mysqli_query($conn, $query); 

    echo '<option value="0">Select ...</option>'; // A default row 
    while ($row = mysqli_fetch_array($results)){ 
     echo '<option value="'.$row[ID].'">'.$row[...].'</option>'; //Use ID for the value, It's made for that 
    } 
} 

일부 오타가있을 것입니다, 그래서 같은 테스트되지 코드 s ..., 자신의 용도에 맞게 조정하십시오.

무료 정보를 요청하는 것을 망설이지 말라.

+0

와우, 멋지다! 그것은 매력처럼 작동하고 새로운 것들을 배웠습니다! 고마워요! 그러나 다음과 같은 몇 가지 추가 조건을 추가하는 것은 어떻습니까? 75 %가 부목목을 선택할 수 없습니까? 이 특별한 경우를 PHP에 추가하고 loadDD4Value 함수를 첫 번째 드롭 다운에 연결합니까? 또는 PHP에서 각 사례에 대한 양식을 만드는 것이 더 좋을까요? –

+0

그래, 나는 'loadDD4Value'에서 퍼센트 값 (또는 그 id)을 읽을 것이다. (나는 2 또는 3을 업데이트 할 때 그 값을 읽을 것이고, 1의 onChange 이벤트에'loadDD4Value'를 추가 할 필요가 없다). 다음과 같이 이전과 같은 3 개의 매개 변수를 동일한 PHP 페이지에 전달합니다. 'percent'가 설정되면 'percent', 'language'및 'coreSubject'가 설정된 경우 2 및 3 드롭 다운을로드합니다. 네 번째 드롭 다운을로드 (반환 값)합니다 ('%'이 <>'75 %'인 경우에만). js에서는 PHP 페이지에서 0 옵션 (또는 기본값) 만 반환하면 4 번째 드롭 다운을 비활성화하거나 숨길 것입니다. –

+0

또한 예를 들어 75 % 조건을 추가했는지는 알 수 없습니다. 그러나 SQL 쿼리에서 percent_id를 사용하고 SQL 요청이 반환 값인지 여부를 데이터베이스에서 확인할 수있는 방법이 항상 있습니다.) –