tengo un sitio web de codeigniter, donde hay un formulario para que el usuario seleccione la categoría y la subcategoría, cuando un usuario selecciona la categoría, el menú desplegable de la subcategoría debería mostrarse en consecuencia, hice el siguiente código:
public function subcategories() { $category = $this->input->post('category'); $query = $this->db->query('SELECT name FROM subcategory WHERE parentcategory='.$category); $data['subcategories'] = $query->result_array(); $this->load->view('homecontroller/subcategories', $data); echo $category; }en subcategorias.php
<?php foreach ($subcategories as $c): ?> <option value="<?php echo $c['name'] ?>"><?php echo $c['name'] ?></option> <?php endforeach; ?>y en mi opinión:
$(document).ready(function() { $('#sl_countries').change(function() { $('#sl_cities').load("<?php echo site_url('index.php/homecontroller/subcategories') ?>", { category: $(this).val() }); }); }); <div class="form-group col-md-6"> <label for="inputEmail4">Product Category</label> <select id="sl_countries" class="form-control" name="cname" aria-label="Default select example"> <?php foreach($listcategory as $val){ echo '<option value="'.$val->name.'">'.$val->name.'</option>'; }?> </select> </div> <div class="form-group col-md-6"> <label for="inputEmail4">Sub Category</label> <select class="form-control" name="sname" id="sl_cities"></select> </div>sin embargo, esto no funciona, aparece un error como el siguiente cuando revisé la consola:
Tiene un error en su sintaxis SQL; verifique el manual que corresponde a la versión de su servidor MariaDB para conocer la sintaxis correcta para usar cerca de '' en la línea 1 SELECCIONE el nombre DE la subcategoría DONDE categoría principal =
¿alguien puede decirme qué está mal aquí, gracias de antemano?
usar de esta manera: -
Código jQuery Ajax: -
<script> $(document).ready(function(){ $('#country').change(function(){ var country_id = $('#country').val(); if(country_id != '') { $.ajax({ url:"<?php echo base_url(); ?>dynamic_dependent/fetch_state", method:"POST", data:{country_id:country_id}, success:function(data) { $('#state').html(data); $('#city').html('<option value="">Select City</option>'); } }); } else { $('#state').html('<option value="">Select State</option>'); $('#city').html('<option value="">Select City</option>'); } }); }); </script>Código del controlador: -
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Dynamic_dependent extends CI_Controller { function fetch_state() { if($this->input->post('country_id')) { echo $this->dynamic_dependent_model->fetch_state($this->input->post('country_id')); } } } ?>Código del modelo: -
<?php class Dynamic_dependent_model extends CI_Model { function fetch_state($country_id) { $this->db->where('country_id', $country_id); $this->db->order_by('state_name', 'ASC'); $query = $this->db->get('state'); $output = '<option value="">Select State</option>'; foreach($query->result() as $row) { $output .= '<option value="'.$row->state_id.'">'.$row->state_name.'</option>'; } return $output; } } ?>Ver código: -
<div class="form-group"> <select name="country" id="country" class="form-control input-lg"> <option value="">Select Country</option> <?php foreach($country as $row) { echo '<option value="'.$row->country_id.'">'.$row->country_name.'</option>'; } ?> </select> </div> <br /> <div class="form-group"> <select name="state" id="state" class="form-control input-lg"> <option value="">Select State</option> </select> </div>