Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/11/2015, 10:01
Avatar de moydb
moydb
 
Fecha de Ingreso: noviembre-2015
Ubicación: Toluca
Mensajes: 1
Antigüedad: 8 años, 5 meses
Puntos: 0
Información selects dependientes con php y jquery

Estoy trabajando en un proyecto que necesita varios selects dependientes.
Busque mucho y juntando un poco de toda la información que encontré llegue a esto espero les sea útil.

Yo ocupo 3 archivos que son 1.php, 2.php y prueba.php

En prueba.php se manda llamar al archivo 1.php a través de include (lo hice de esta forma para que sea fácil integrarlo en cualquier proyecto como modulo externo, solo enviándole los valores necesarios para que se haga el trabajo se los selects)

El archivo 1.php

Es donde está la mayor parte del código y donde se genera el primer select, en este archivo también están las funciones de jaquery que vamos a ocupar para que sea un select dependiente

Código PHP:
<script language="javascript" src="jquery/jquery.js"></script><!--se manda llamar a jquery  -->
<script language="javascript">
$(document).ready(function(){
    var jq = jQuery.noConflict();//para no generar conflicto con otro codigo
   jq("#<?php echo $nom1;?>").change(function () {//se activa cuando el primer select cambia por eso la variable $nom1
           $("#<?php echo $nom1;?> option:selected").each(function () {//en  el primer select con opcion seleccionada se toman los datos
            id_category = $(this).val();//se captura el valor
            var t2='<?php echo $tabla2?>';//se crea una variable para la segunda tabla donde el segundo select va a sacar su informacion
            var camp='<?php echo $campo?>';//se crea variable para el campo que va a comparar el query y debolver solo lo que tenga que ver con el primer select
            var j = jQuery.noConflict();//se crea otra variable no conflict para que no choque con otro codigo que se implemente
            j.post("2.php", { id_category: id_category, tabla: t2, campo: camp}, function(data){//se envia por metodo post los siguientes datos id_category que es el valor  que se saco del primer select tabla=t2 que es el nombre de la tabla donde se va a comprar el primer valor y campo=camp que es el campo que se va a comparar en la segunda tabla para ver si hay datos iguales que se puedan mostrar en el segundo select ***
                j("#<?php echo $nom2;?>").html(data);//se imprime el resultado con el nombre del segundo select y se envia con la informacion de vuelta por el query ****
            });            
        });
   })
});
</script>
<?php
echo '<select name="'.$nom1.'" id="'.$nom1.'"><option selected disabled>seleccione una opción</option>';//se crea el primer select con los atributos de nombre y id para ubicacion y referencia
$consulta=mysql_query("SELECT * FROM $tabla1") or die(mysql_error());//se genera el query para llenado de datos del primer select
    
$n_filas mysql_num_rows($consulta);//se cuenta el numero de filas de vueltas por el query
    
if ($n_filas 0
    {
        while(
$row=mysql_fetch_row($consulta))//se hace el bucle para sacar todos los resultados del query
        
{                
            echo 
'<option value="'.$row[0].'">'.$row[1].'</option>';//se imprime en value el resultado de vuelto de la columna 0 y en dato a mostrar el de la columna 1
        
}
    }
echo 
'</select>';//se cierra el select fuera del bucle
echo '<select name="'.$nom2.'" id="'.$nom2.'"><option  selected disabled>seleccione una opción</option></select>';//se crea el segundo select con su nombre ($nom2) y su id($nom2) esto es necesario para poderle regresar los valores en el punto ****
?>

archivo 2.php

Código PHP:
<?php
require ('conexion.php');//se llama la conexion con la db
conectar();//se llama la funcion conectar que esta en el archivo conexion
//se reciben las variables que envio el archivo 1.php en el punto ***
$cat $_POST['id_category'];//es el valor de vuelto por el primer select 
$tabla2 $_POST['tabla'];//nombre de la tabla donde se va a bsucar los datos del segundo select
$campo $_POST['campo'];//campo que el que se va a comparar el valor de $cat

$consulta=mysql_query("SELECT * FROM $tabla2 WHERE $campo='$cat'") or die(mysql_error());//se genera el query con el nombre de las egunda tabla el nombre del campo para la comparacion y el valor a comparar
$n_filas mysql_num_rows($consulta);//se cuenta filas de vueltas
    
if ($n_filas 0
    {
        
$html.='<option  selected disabled>seleccione una opción</option></select>';//se crea la primera opcion del segundo select la que se va a ver por default (por eso esta fuera del bucle)
        
while($row=mysql_fetch_row($consulta))//se genera bucle para recorrer query e imprimir resultados obtenidos
        
{                
        
$html .= '<option value="'.$row[0].'">'.$row[1].'</option>';//se imprimen los valores obtenidos
        
}
    }
echo 
$html;//se envia mediante esta variable para interpretacion de jquery y sean agregados al segundo select
?>

archivo prueba.php

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form action="prueba.php" method="post">
<?php 
require ('conexion.php');//se llama a la conexion
conectar();//se llama a la funcion conectar

//esto es para comprobar que se estan recibiendo los valores correctamente
//primer grupo de selects
$mun1=$_POST['marca'];//se reciben los datos del select llamado (marca)*
$com1=$_POST['modelo'];//se reciben los datos del segundo select (modelo) **

//segundo grupo de selects
$mun2=$_POST['marca2'];//se reciben los datos del select llamado (marca2)***
$com2=$_POST['modelo2'];//se reciben los datos del segundo select (modelo2) ****



$tabla1='marcas';//nombre de la tabla que usa el primer select
$nom1='marca';//nombre del select *
$tabla2='modelos';//nombre de la tabla que usa el segundo select
$nom2='modelo';//nombre del segundo select **
$campo='id_marca';//campo que se va a comparar en la segunda tabla con el valor obtenido del primer select
include ('1.php');//se manda llamar al archivo 1.php
?>
<hr /><br />
<?php 
$tabla1
='marcas';//nombre de la tabla
$nom1='marca2';//nombre del select ***
$tabla2='modelos';//nombre de la tabla
$nom2='modelo2';//nombre del segundo select ****
$campo='id_marca';//campo a comparar
include ('1.php');//se manda llamar al archivo 1.php
?>
<input name="" type="submit" value="Submit" />
</form>

<?php 
//si se envia el formulario hace referencia hacia si mismo y se imprimen los resutlados de vueltos por los selects
//datos del primer grupo de selects
echo $mun1.' ';
echo 
$com1.'<br>';
//datos del segundo grupo de selects
echo $mun2.' ';
echo 
$com2.'<br>';
?>
</body>
</html>
dejo el enlace de mega por si gustan descargarlo
[URL="https://mega.nz/#!pdFVmQQR"]ejemplo completo con db[/URL]

Última edición por moydb; 18/11/2015 a las 13:37