2016-02-20 1 views
0

здесь я пытаюсь получить данные в combobox из базы данных, в которой у меня есть таблица 10. У меня есть два поля со списком, в первом ящике я назвал опцию из базы данных, которая будет первой таблицей и опцией, например a, b, c, d. Теперь, когда я выбираю «a» в первом поле, он должен вызывать соответствующее значение через php, и это значение будет получено из другой таблицы, и в обеих таблицах нет ничего общего. То же самое, что и при выборе «b», это вызовет другое значение из третьей таблицы.как извлечь несколько таблиц значение базы данных в динамический блок выбора

Так вот, я пытался с условием if else, но я могу получить выход. кто-нибудь, пожалуйста, улучшите ошибку jquery, и в этом случае я должен соответствовать ее состоянию.

вот мой код HTML страницы

<html> 
    <body> 
    <select id="a1_title"> 
    </select> 
    <select id="a2_title"> 
    </select> 
    <script src="jquery-2.0.3.js"></script> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 
     $.getJSON("drpdwn.php", success = function(data){ 
    var items=""; 
     for(var i = 0; i< data.length; i++){ 
      items +="<option value='"+ data[i].toLowerCase() +"'>" + data[i] +"</option>"; 
     } 
     $("#a1_title").append(items); 
     $("#a1_title").change(); 
     }); 
    $("#a1_title").change(function(){ 
    if(data.length == 1) // here i have tried to match the condition from ID but it doesn't work 
{ 
    alert("b"); 
     $.getJSON("lulc_db.php",success = function(data){ 
    alert("okay"); 
     var items=""; 
     for(var i = 0; i< data.length; i++){ 
      items+="<option value='"+data[i].toLowerCase()+"'>"+data[i]+"</option>"; 
     } 
else if(data.length == 2) 
{ 
    alert("b"); 
     $.getJSON("soil_db.php",success = function(data){ 
    alert("okay"); 
     var items=""; 
     for(var i = 0; i< data.length; i++){ 
      items+="<option value='"+data[i].toLowerCase()+"'>"+data[i]+"</option>"; 
     } 
     $("#a2_title").append(items); 

     }); 
    } 
    }); 

}); 
</script> 
</body></html> 

Это drpdown.php страница .Это значение страница будет успешно идет в первом окне выбора.

<?php 
$host = "localhost"; 
$user = "postgres"; 
$pass = "admin"; 
$db = "Querybuilderdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass") 
    or die ("Could not connect to server\n"); 
$query = "SELECT id, name FROM tab"; 
$result = pg_query($con, $query); 
if(pg_num_rows($result)){ 

$data=array(); 
while($row=pg_fetch_array($result)) 
{ array_push($data, $row["name"]); 

} 

echo json_encode($data); 
} 
?> 

Здесь lulc_db.php .Эта страница значение должно прийти второе выбрать box.Same, как это у меня есть 8 другой страница PHP, который я показать на второй ComboBox.

<?php 
require "config.php"; 
$query = "SELECT distinct level_1 FROM pachgaon_LULC"; 
$result = pg_query($con, $query); 
if(pg_num_rows($result)){ 
$data=array(); 
while($row=pg_fetch_array($result)) 
{ array_push($data, $row["level_1"]); 
} 
echo json_encode($data); 
} 
?> 

Благодаря передовой :)

+0

Вам может понадобиться вложенный цикл 'for'. См. Эту статью [post] (http://stackoverflow.com/questions/800593/loop-through-json-object-list) при переходе через json. Рассмотрим пары ключ/значение в объекте js: '$ .each (data, function (key, val) {...})' – Parfait

+0

Я не могу применить цикл, потому что результат, который я хотел, мог произойти только путем выбора значения и затем он вызовет php-страницу и извлечет результат во второй комбинированный блок. – ads

+0

Получите некоторое представление от ответа на вопрос. http://stackoverflow.com/questions/11451150/create-dynamic-combobox-using-php-and-onselection-change-values-of-another-dynam .hope это помогает .. :) – aimme

ответ

1

Рассмотрим несколько изменений:

  1. Run вложенными for петли как JSON уровня один ребенок (пара ключей/значение) становится многомерный массив
  2. Javascript
  3. Захват выбранного значения первого окна: #a1_title
  4. Условно связывают коробки для dy NAMIC выход
  5. Удалить существующие элементы перед добавлением новых элементов

В то время как я не могу воссоздать ваш пример без данных и таблицы отношений. Ниже приведен обобщенный пример с использованием языков программирования, пытающихся сохранить исходный код. Откорректируйте свой сценарий. Смотрите демо на jsfiddle (но это использует встроенные JSon струнам событий щелчка):

PHP скрипты(для воспроизведения данных в формате JSON)

// DynamicOptions1.php 
<?php 
    $languages = []; 

    $languages[][1] = "general purpose"; 
    $languages[][2] = "special purpose"; 

    echo json_encode($languages); 
?> 

// DynamicOptions2.php 
<?php 
    $general = []; 

    $general[][1] = "Java"; 
    $general[][2] = "PHP"; 
    $general[][3] = "Perl"; 

    echo json_encode($general); 
?> 

// DynamicOptions3.php 
<?php 
    $special = []; 

    $special[][1] = "SQL"; 
    $special[][2] = "XSLT"; 

    echo json_encode($special); 
?> 

HTML/JQuery

<html> 
    <body> 
    <select id="a1_title"> 
    </select> 
    <select id="a2_title"> 
    </select> 

    <script src="jquery-2.0.3.js"></script> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 
     $.getJSON("DynamicOptions1.php", success = function(data){ 
      var items=""; 

      for(var i = 0; i< data.length; i++){ 
       for (var item in data[i]) { 
       // RETAIN JSON KEY AS OPTION VALUE, JSON VALUE AS OPTION TEXT 
       items +="<option value='"+item+"'>" + data[i][item].toLowerCase() +"</option>"; 
       } 
      } 
      $("#a1_title").append(items); 
      $("#a1_title").change(); 
     }); 

     $("#a1_title").change(function(){ 
      // OBTAIN SELECTED VALUE 
      var selectedValue = $(this).find(":selected").val(); 

      if(selectedValue == "1") {    
       $.getJSON("DynamicOptions2.php",success = function(data){    
        var items=""; 
        for(var i = 0; i< data.length; i++){ 
        for (var item in data[i]) {      
         items+="<option value='"+data[i][item]+"'>" + data[i][item].toLowerCase() +"</option>"; 
        } 
        } 
        // REMOVE PREVIOUS ITEMS 
        var myNode = document.getElementById("a2_title"); 
        while (myNode.firstChild) { 
         myNode.removeChild(myNode.firstChild); 
        } 
        // ADD NEW ITEMS 
        $("#a2_title").append(items); 
       }); 
      } 
      else if(selectedValue == "2") {    
       $.getJSON("DynamicOptions3.php",success = function(data){    
        var items=""; 
        for(var i = 0; i< data.length; i++){ 
        for (var item in data[i]) { 
         items+="<option value='"+data[i][item].toLowerCase()+"'>"+data[i][item].toLowerCase()+"</option>"; 
        } 
        } 
        // REMOVE PREVIOUS ITEMS 
        var myNode = document.getElementById("a2_title"); 
        while (myNode.firstChild) { 
         myNode.removeChild(myNode.firstChild); 
        } 
        // ADD NEW ITEMS 
        $("#a2_title").append(items);  
       }); 
      }   
     }); 

     }); 
     </script> 

</body> 
</html> 
+0

Этот код содержит некоторые проблемы.его показывающее значение, но дает повторение каждого параметра, такого как bbbbbbbbbbbbbbbbbb, cccccc и не меняет значение второго поля со списком, когда я выбираю другой вариант первого окна. – ads

+0

Пожалуйста, разместите свои данные json или sql и соответствующее правило/логику между опциями выбора (то есть, если категория 1 выбрана в первом раскрывающемся списке, эти элементы отображаются во втором раскрывающемся списке). – Parfait

+0

спасибо, но его работа теперь мне нужно удалить только «для (элемент var в данных [i])», из-за этого он дает несколько значений. :) – ads

Смежные вопросы