2017-11-06 31 views
0

2つの選択肢があります。カテゴリは1つで、2番目はサブカテゴリです。これはMySQLから最初の選択肢を取り出したものです。カテゴリを使用します。他の選択肢の選択に基づいて選択肢を変更する方法

iはメインカテゴリの値をフェッチしているコードであること

    <div class="form-group"> 
        <label style="align-content:center" for="inputdefault">Select a category</label>      
        <?php 
        $sql = "SELECT * from noorizone.categories where parent=''"; 
        $result = $con->query($sql); 
        // output data of each row 
        echo "<select class='form-control' id='sel1' onchange='getSubCategory()'>"; 
        while($row = mysqli_fetch_array($result)) 
        { 
         echo "<option value=".$row["id"].">".$row["name"]."</option>" ; 
        } 
        $maincat= $row["id"]; 
        echo "</select>" 
        ?> 
       </div> 

select cat_name form DB1 where id= ID_OF_SELECTED CATEGORY等。 私はAJAX要求を使用してその可能性を知っていますが、私はajaxについては考えていません。

enter image description here

あなたは私の問題で私を助けてくださいことができます。ここで

+1

は誰があなたのために –

+0

jQueryのAJAX APIを理解することが非常に簡単なコードを記述しなくなりますAJAXに関する科目を履修します。http:// api.jquery.com/jquery.ajax/ – Cheshire

+0

jQueryを使用して、簡単なajax処理とDOM更新ができますか? 2番目の入力オブジェクトのオプションを設定します。そのカテゴリを入力として(例えば$ _GET []で)取るPHPページが必要になり、セレクタのjqueryまたはinnerHtmlを使って切り替えることができるセレクタのオプションのHTMLブロックを返します。 –

答えて

0

ここで私は答えを得ました。 スクリプトファイル:

<script type="text/javascript"> 
 
$(document).ready(function(){ 
 
    $('#maincategory').on('change',function(){ 
 
     var mainactegory_ID = $(this).val(); 
 
     if(mainactegory_ID){ 
 
      $.ajax({ 
 
       type:'POST', 
 
       url:'ajaxData.php', 
 
       data:'mainactegory_ID='+mainactegory_ID, 
 
       success:function(html){ 
 
        $('#subcat1').html(html); 
 
        $('#subcat2').html('<option value="">Select sub 1</option>'); 
 
       } 
 
      }); 
 
     }else{ 
 
      $('#subcat1').html('<option value="">Select main cat</option>'); 
 
      $('#city').html('<option value="">Select sub cat 1</option>'); 
 
     } 
 
    }); 
 
    
 
    $('#subcat1').on('change',function(){ 
 
     var subcat1_id = $(this).val(); 
 
     if(subcat1_id){ 
 
      $.ajax({ 
 
       type:'POST', 
 
       url:'ajaxData.php', 
 
       data:'subcat1_id='+subcat1_id, 
 
       success:function(html){ 
 
        $('#city').html(html); 
 
       } 
 
      }); 
 
     }else{ 
 
      $('#city').html('<option value="">select sub 1</option>'); 
 
     } 
 
    }); 
 
}); 
 
</script>
\t \t \t \t \t <div class="form-group"> 
 
\t \t \t \t \t \t <label style="align-content:center" for="inputdefault">Select a category</label> \t \t \t \t \t 
 
\t \t \t \t \t \t <?php 
 
\t \t \t \t \t \t \t $maincategory= "select * from noorizone.categories where parent=''"; 
 
\t \t \t \t \t \t \t $result2= $con->query($maincategory); 
 
\t \t \t \t \t \t ?> 
 
\t \t \t \t \t \t <select class= "form-control" name="maincategory" id="maincategory"> 
 
\t \t \t \t \t \t <option value='0' > Select category</option> 
 
\t \t \t \t \t \t <?php 
 
\t \t \t \t \t \t \t while($row = mysqli_fetch_array($result2)) 
 
\t \t \t \t \t \t \t echo '<option value="'.$row['id'].'">'.$row['name'].'</option>'; 
 
\t \t \t \t \t \t \t 
 
\t \t \t \t \t \t ?> 
 
\t \t \t \t \t \t </select> \t \t \t \t \t \t 
 
\t \t \t \t \t </div> 
 
      
 
      
 
\t \t \t \t \t <div class="form-group"> 
 
\t \t \t \t \t <label style="align-content:center" for="inputdefault">Sub category 1</label> 
 
\t \t \t \t \t \t <select class="form-control" name="subcat1" id="subcat1"> \t \t \t \t \t \t 
 
\t \t \t \t \t \t </select> 
 
\t \t \t \t \t 
 
\t \t \t \t \t </div> 
 
      \t \t \t \t \t <div class="form-group"> 
 
\t \t \t \t \t \t <label style="align-content:center" for="inputdefault">Sub category 1</label> 
 
\t \t \t \t \t \t <select class="form-control" name="city" id="city"> 
 
\t \t \t \t \t \t </select> 
 
\t \t \t \t \t </div>

<?php 
 
//Include database configuration file 
 
//Include database configuration file 
 
$db = mysqli_connect("localhost:3306","root","mysqlpassword"); 
 
// Check connection 
 
if (mysqli_connect_errno()) 
 
    { 
 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
 
    } 
 
    mysqli_select_db($db,"mydb1"); 
 

 
if(isset($_POST["mainactegory_ID"]) && !empty($_POST["mainactegory_ID"])){ 
 
    //Get all state data 
 
    $query = $db->query("select * from noorizone.categories where parent = ".$_POST['mainactegory_ID']); 
 
    
 
    //Count total number of rows 
 
    $rowCount = $query->num_rows; 
 
    
 
    //Display states list 
 
    if($rowCount > 0){ 
 
     echo '<option value="">sub cat..</option>'; 
 
     while($row = $query->fetch_assoc()){ 
 
      echo '<option value="'.$row['id'].'">'.$row['name'].'</option>'; 
 
     } 
 
    }else{ 
 
     echo '<option value="">sub1 not available</option>'; 
 
    } 
 
} 
 

 
if(isset($_POST["subcat1_id"]) && !empty($_POST["subcat1_id"])){ 
 
    //Get all city data 
 
    $query = $db->query("select * from noorizone.categories where parent = ".$_POST['subcat1_id']); 
 
    
 
    //Count total number of rows 
 
    $rowCount = $query->num_rows; 
 
    
 
    //Display cities list 
 
    if($rowCount > 0){ 
 
     echo '<option value="">Select sub cat 2 </option>'; 
 
     while($row = $query->fetch_assoc()){ 
 
      echo '<option value="'.$row['id'].'">'.$row['name'].'</option>'; 
 
     } 
 
    }else{ 
 
     echo '<option value="">category not available</option>'; 
 
    } 
 
} 
 
?>

6

は、これを実現する方法についてのアルゴリズムです:Javascriptを/ jQueryのを使用して

  1. 、「カテゴリー」ドロップダウンオプションの値の変化を聞きます。
  2. 値を取得し、AJAXを使用してコントローラ - >モデルに送信します(MVCパターンを使用している場合)。
  3. この値に基づいて、sqlクエリを実行し、その親カテゴリオプションに必要な "サブカテゴリオプション"を取得し、値を返します。
  4. これらの戻り値を取得し、[サブカテゴリ]オプションのプルダウンを設定します。ここで

は擬似コードです:

//Category Dropdown 
<select name="status" id="status"> 
    <option value="1">Active</option> 
    <option value="0">Inactive</option> 
</select> 

JS:

$("#status").change(function(){ 
    var status = this.value; 

    $.ajax({ 
    url: 'call_your_controller_function', 
    success: function(response){ 
    var data = response; //Response should be array like option1 , option2, option3 
    var option = ''; 
    for (var i=0;i<data.length;i++){ 
     option += '<option value="'+ data[i] + '">' + data[i] + '</option>'; 
    } 
    //Now populate the second dropdown i.e "Sub Category" 
    $('#id_of_sub_category').append(option); 
    }, 
    error: function(){ 
    alert('failure'); 
    } 
}); 

}); 
+0

@zainudin:あなたの問題は解決しましたか? –

+0

Thnks @shakhank gauravをお知らせください。純粋なPHPを使用しています - mySql ... –

+0

@ zainudinnoori JSを使用しないでください.. ..?そうでない場合は、curl(php)を使用してapiまたはカスタムコントローラを呼び出すことができます –

1

これは、あなたが予想より少し複雑です。しかし、私は同じロジック/技術を使用しています。

var tagSearch = function(_opts){ 
     var search = {}; 
    search.data = new Array(); 
    search.errors = new Array(); 

    /* defaults */ 
    search.opts = { 
     tagsRootObject:"tags", 
     jsonEndPoint:"/echo/json/", 
     inputSelector:'input' 
    }; 

    $.extend(true, search.opts, _opts); 

    /* get terms from external source */ 
    search.getTerms = function(){ 

     dfd = $.Deferred(); 
     $.ajax({ 
      type: "GET", 
      dataType: "json", 
      url: search.opts.jsonEndPoint, 
      success: function (data) { 

      if(data.hasOwnProperty('success') && data.success === true){ 
       dfd.resolve(data); 

         } 
      }, 
      error: function(jqXHR, textStatus, errorThrown){ 
       console.log('Ajax Status', textStatus); 
       return false; 
      } 
     }); 
     return dfd.promise(); 
    }(); 

    search.setTerms = function($form, data){ 
     var terms = null, 
      term, $checkbox, $label, $fieldset; 

     if(data.hasOwnProperty(search.opts.tagsRootObject)){ 
      terms = data[ search.opts.tagsRootObject ]; 

      $fieldset = $('<fieldset>'); 

      if(Object.keys(terms).length > 0){ 
      $form.append($fieldset); 
      } 

      for(var t in terms){ 
      term = terms[ t ]; 
      $checkbox = $('<input>') 
            .attr({ 
            id:'term_' + t, 
            class:'__term', 
            type:'checkbox' 
            }) 
            .data('id', t); 

      $checkbox.appendTo($fieldset); 
      $label = $("<label>") 
           .text(t) // object key will be the label 
              .attr({for:'term_'+ t }) 
              .insertAfter($checkbox); 
      /* setting up new titles */ 
      if(search.opts.tags.hasOwnProperty(t)){ 
       $label.text(search.opts.tags[ t ].label); 
      } 
      } 

       }else{ 
      search.errors.push("Unable to find search terms"); 
       } 
    }; 

    $.widget("custom.catTags", $.ui.autocomplete, { 
     _create: function() { 
     this._super(); 
     this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); 
     }, 
     _renderMenu: function(ul, items) { 
     var that = this, 
      currentCategory = ""; 
     $.each(items, function(index, item) { 
      var li; 
      if (item.category != currentCategory) { 
      ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>"); 
      currentCategory = item.category; 
      } 
      li = that._renderItemData(ul, item); 
      if (item.category) { 
      li.attr("aria-label", item.category + " : " + item.label); 
      } 
     }); 
     } 
    }); 

    search.run = function(config){ 
     config.ele.catTags(config.settings); 
     //config.ele.catTags($.extend(config.settings, {source: search.data})); 
    }; 

    $.when(search.getTerms).done(function (terms) { 

     /* if something needed from the beginning */ 
     search.data = [ 
     { label: "Default value 1", category: "" }, 
     { label: "Default value 2", category: "" }, 
     { label: "Something", category: "" } 
     ]; 

     $(function() { 
       var $form, termsObj = {}; 

      termsObj.enabled = new Array(); 

      $form = $(search.opts.formSelector); 

         search.setTerms($form, terms); 

      /* Binding term checkboxes */ 
      $form.on('click', '.__term', function(){ 
       var $this = $(this), 
        termId, isChecked, termIndex; 


       search.data.length = 0; 

       termId = $this.data('id'); 
       isChecked = $this.is(':checked'); 

       if(isChecked){ 

       termsObj.enabled[ termId ] = terms.records[ termId ]; 

       }else{ 
       if(termsObj.enabled.hasOwnProperty(termId)){ 
         delete termsObj.enabled[ termId ]; 
       } 
       } 

        for(var prop in termsObj.enabled){ 
       var currentTerm, record, label; 

        currentTerm = termsObj.enabled[ prop ]; 

         if(currentTerm instanceof Array){ 
               currentTerm.map(function(obj) { 

          label = (search.opts.tags.hasOwnProperty(prop)) ? search.opts.tags[ prop ].label : prop; 
          record = { 
          label: obj, 
          category: label 
         }; 

          search.data.push(record); 
         }); 

             } 
          } 

      }); 

         search.run({ 
       ele: $form.find(search.opts.inputSelector), 
       settings:{ 
        delay: 0, 
        source: search.data 
       } 
      }); 
     }); 

    }); 

    if(search.errors.length > 0){ 
     console.log("Errors:", search.errors); 
    } 

}({ 
    jsonEndPoint:'/gh/get/response.json/dkarandana/pub_response/tree/master/AutoCompleteDemo/', 
    tagsRootObject:'records', 
    formSelector:'form', 
    inputSelector:'#search', 
    tags:{ 
    technology:{ 
     label:"Technology" 
    }, 
    model:{ 
     label:"Model/Series" 
    }, 
    manufacturer:{ 
     label:"Manufacturer" 
    }, 
    pdf:{ 
     label:"PDF", 
     autocomplete:false 
    } 
    } 
}); 
関連する問題