Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Dos Combobox Dependientes de Uno

Estas en el tema de Dos Combobox Dependientes de Uno en el foro de PHP en Foros del Web. Hola compañeros, he estado bastantes días batallando con este código, no logro averiguar como hacerlo, lo que necesito es que al seleccionar un option de ...
  #1 (permalink)  
Antiguo 20/12/2012, 16:56
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 12 años, 3 meses
Puntos: 6
Dos Combobox Dependientes de Uno

Hola compañeros, he estado bastantes días batallando con este código, no logro averiguar como hacerlo, lo que necesito es que al seleccionar un option de un combo box, los otros dos combobox que tengo se rellenen dinamicamente, lo he logrado hacer con uno, pero no puedo integrar el ultimo combo, el detalle es que no es que sea un combobox de tres niveles, es un combo box de dos niveles, al escoger el primero se deben rellenar los otros dos... este es mi html, es lo que llevo hasta ahorita y si lo prueban podrán ver que solo funciona para rellenar el primero, ya que no se como enviar en el PHP el valor del tercer combo..

Código HTML:
Ver original
  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <!--Creado por Walter en Micodigobeta.com.ar-->
  3. <script src="js/jquery.1.4.2.js" type="text/javascript"></script>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5. <title>Demo - Combos Dependientes </title>
  6. </head>
  7.  
  8.  
  9. function mostrarM(tipo){
  10.         if(tipo=="000"){$('#marca').attr('disabled','disabled');$('#rango').attr('disabled','disabled');return false;}
  11.         $.post("carga_select2.php",{ id:tipo },
  12.         function(data){$('#marca').attr('disabled',''); $("#marca").html(data);})
  13. }
  14. function mostrarR(mark){
  15.         //alert(mark);
  16.         if(mark=="1"){$('#rango').attr('disabled','disabled');return false;}
  17.         $('#rango').attr('disabled','');
  18.         }
  19. $(document).ready(function(){
  20.     $('#marca').attr('disabled','disabled');
  21.     $('#rango').attr('disabled','disabled');
  22. })
  23.  
  24.  
  25. <select name="tipo" id="tipo" onchange="mostrarM(this.value);">
  26.         <option name="seleccione" value="000">SELECCIONE</option>
  27.         <option name="computo" value="C00">COMPUTO</option>
  28.         <option name="plasma" value="P00">PLASMA</option>
  29.  
  30. <select name="marca" id="marca" onchange="mostrarR(this.value);" >
  31. <option value="0">---</option>
  32.  
  33. <select name="rango" id="rango">
  34. <option value="0">---</option>
  35.  
  36. </body>
  37. </html>


el PHP es el siguiente:
Código PHP:
Ver original
  1. <?php
  2.     function carga_combo($Area){
  3.             //realizamos la consulta
  4.             switch($Area){
  5.                 case '000':
  6.                     echo "<option value='0'><--SELECCIONE ANTES</option>";
  7.                     break;
  8.                 case 'C00':
  9.                     include "conexion.php";
  10.                         $query = "SELECT marca FROM marcas WHERE cod_prod='C00'";
  11.                         $query2 = "SELECT descripcion FROM rangos WHERE clave_rango LIKE '%c%'";
  12.                         $ejecuta = mysql_query($query2, $conexion) or die(mysql_error());
  13.                         $ejecuta2 = mysql_query($query, $conexion) or die(mysql_error());
  14.                         while ($row= mysql_fetch_array($ejecuta)) {
  15.                             $rangos= $row['descripcion'];
  16.                             }
  17.                         $i="";
  18.                         //NECESITO ENVIAR EL RESULTADO DE ejecuta y ejecuta2!!!!
  19.                         //pero solo logro enviar ejecuta :/  
  20.                         while ($row= mysql_fetch_array($ejecuta2)) {
  21.                             $marca= $row['marca'];
  22.                             $i=$i+1;
  23.                             echo "<option value=".$i.">".$marca."</option>";
  24.                         }
  25.                        
  26.                     break;
  27.                 case 'P00':
  28.                     include "conexion.php";
  29.                     $query = "SELECT marca FROM marcas WHERE cod_prod='P00'";
  30.                     $ejecuta = mysql_query($query, $conexion) or die(mysql_error());
  31.                     $i="";
  32.                     while ($row= mysql_fetch_array($ejecuta)) {
  33.                         $marca= $row['marca'];
  34.                         $i=$i+1;
  35.                         echo "<option value=".$i.">".$marca."</option>";
  36.                     }
  37.                     break;
  38.             }//end switch  
  39. }//end function
  40.  
  41. if (isset($_POST['id'])){
  42.                     //lee las variables del $.post() de jQuery
  43.                     carga_combo($_POST['id']);
  44.                 }
  45. ?>

ya intente JSON, pero aun así no logro enviarlo ya que no se como tratar estos datos en mi JS, puesto que JSON me lo envía separado por comas, pero aparte tengo que separar por array, y APARTE el simbolo "\" del <\option> me lo cambia por un símbolo tipo V.

Me ayuda por favor!!!
lo que quisiera es que en el evento onChange del primer combo me rellenara los dos combos dependientes, el evento onChange del segundo combobox lo que hace es solo habilitar o des habilitar el tercero. Ojala puedan apoyarme, quedo en espera de su amable ayuda.

Les coloco el script de la bdd para hacer pruebas:
Código MySQL:
Ver original
  1. create database pruebas;
  2.  
  3. CREATE TABLE rangos(
  4.     clave_rango varchar(5),
  5.     descripcion varchar(50),
  6.     CONSTRAINT PK primary key (clave_rango)
  7. );
  8. CREATE TABLE marcas(
  9. cod_prod varchar(10),
  10. marca varchar(40)
  11. );
  12.  
  13. INSERT INTO rangos(clave_rango,descripcion)  VALUES ("1c","0-7500"),
  14. ("2c","7501-10000"),
  15. ("3c",">10000"),
  16. ("1p","0-7500"),
  17. ("2p","7501-10000"),
  18. ("3p","10001-15000"),
  19. ("4p","15001-20000"),
  20. ("5p","20001-30000");
  21.  
  22. ("C00","SELECCIONE.."),
  23. ("C00","ACER"),
  24. ("C00","APPLE"),
  25. ("C00","ASUS"),
  26. ("C00","BENQ"),
  27. ("C00","DELL"),
  28. ("C00","HP"),
  29. ("C00","LANIX"),
  30. ("C00","LENOVO"),
  31. ("C00","LG"),
  32. ("C00","MSI"),
  33. ("C00","PANASONIC"),
  34. ("C00","SAMSUNG"),
  35. ("C00","SONY"),
  36. ("C00","TOSHIBA"),
  37. ("P00","SELECCIONE.."),
  38. ("P00","LG"),
  39. ("P00","SAMSUNG"),
  40. ("P00","SONY"),
  41. ("P00","SHARP");

Última edición por art_rockerd; 20/12/2012 a las 16:59 Razón: Agregar scrpt de bdd
  #2 (permalink)  
Antiguo 20/12/2012, 21:16
Avatar de JhonErick  
Fecha de Ingreso: noviembre-2012
Ubicación: colombia
Mensajes: 38
Antigüedad: 12 años
Puntos: 3
Respuesta: Dos Combobox Dependientes de Uno

bueno creo q estas un poco confundido Json de acuerdo a la wiki es un formato ligero para el intercambio de datos, es la forma como se ordenan los datos para su envió.
lo que debes usar es un Ajax que envié los datos a una pagina php y que reciba una respuesta de esta que en tu lugar seria los option de los otros 2 select y luego con javascript obtiene esos valores y los insertas en los select que necesitas.

http://api.jquery.com/jQuery.ajax/ aqui esta toda la info que necesitas

y en esta pagina encontras este ejemplo

Código Javascript:
Ver original
  1. $.ajax({
  2.   type: "POST",
  3.   url: "some.php",
  4.   data: { name: "John", location: "Boston" }
  5. }).done(function( msg ) {
  6.   alert( "Data Saved: " + msg );
  7. });

en data anotas las variables que deseas enviar en este caso la info del primer select
nombre_variable_php : variable_javascript_enviar_select

y las recibes asi en el archivo php $_POST['nombre_variable_php'] y haces la consulta para dar con los valores de los otros select y con un echo en php los devolves a la pagina html con la variable msg

Saludos
  #3 (permalink)  
Antiguo 21/12/2012, 08:39
Avatar de fjrueda  
Fecha de Ingreso: marzo-2008
Ubicación: Bucaramanga
Mensajes: 313
Antigüedad: 16 años, 8 meses
Puntos: 35
Respuesta: Dos Combobox Dependientes de Uno

O el otro método que es muy poco ortodoxo, seria que creara en esa misma web los <SELECT> necesarios y los va mostrando uno a uno según corresponda con JS.

De esa forma no tiene que usar AJAX, pero vuelvo y digo, es muy poco ortodoxo.
  #4 (permalink)  
Antiguo 21/12/2012, 08:52
Avatar de JhonErick  
Fecha de Ingreso: noviembre-2012
Ubicación: colombia
Mensajes: 38
Antigüedad: 12 años
Puntos: 3
Respuesta: Dos Combobox Dependientes de Uno

Cita:
Iniciado por fjrueda Ver Mensaje
O el otro método que es muy poco ortodoxo, seria que creara en esa misma web los <SELECT> necesarios y los va mostrando uno a uno según corresponda con JS.

De esa forma no tiene que usar AJAX, pero vuelvo y digo, es muy poco ortodoxo.
Hay que tener en cuenta que para datos invariables esta opción no estaría mal como por ejemplo los departamentos de un pais pero si tienes en cuenta que los campos pueden cambiar de valor de acuerdo a lo que hay en una base de datos esta opción se vuelve inviable

Saludos
  #5 (permalink)  
Antiguo 21/12/2012, 10:20
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Dos Combobox Dependientes de Uno

Cita:
Iniciado por JhonErick Ver Mensaje
bueno creo q estas un poco confundido Json de acuerdo a la wiki es un formato ligero para el intercambio de datos, es la forma como se ordenan los datos para su envió.
lo que debes usar es un Ajax que envié los datos a una pagina php y que reciba una respuesta de esta que en tu lugar seria los option de los otros 2 select y luego con javascript obtiene esos valores y los insertas en los select que necesitas.

http://api.jquery.com/jQuery.ajax/ aqui esta toda la info que necesitas

y en esta pagina encontras este ejemplo

Código Javascript:
Ver original
  1. $.ajax({  type: "POST",
  2.   url: "some.php",
  3.   data: { name: "John", location: "Boston" }
  4. }).done(function( msg ) {
  5.   alert( "Data Saved: " + msg );
  6. });

en data anotas las variables que deseas enviar en este caso la info del primer select
nombre_variable_php : variable_javascript_enviar_select

y las recibes asi en el archivo php $_POST['nombre_variable_php'] y haces la consulta para dar con los valores de los otros select y con un echo en php los devolves a la pagina html con la variable msg

Saludos
Hola amigo, si eso lo se hacer, de hecho para el resto de mi apliacion utilizo el ajax, js y php para en envio de variables, el detalle es que desde php hacia Javascript yo envio los datos por medio del echo, y en ese echo envio el dato de un select, como lo obtengo de mi BDD extraigo los datos de la consulta con el bucle While, ypor cada vuelta va enviando los datos en el echo a JS que los recibe por el metodo post a la function(data), el detalle es que yo necesito enviar reslutado de DOS consultas, para esto necesito obtener cada resultado de cada consulta con un bucle WHILE para cada uno, pero al final solo un echo es el que envia todos los resultados a JS, la pregunta es, como envio los resultados DE LAS DOS CONSULTAS al JS para que las imprima en los combos dependientes en el ONCHAGE del primer combo..., lo de JSON te decia por que en el metodo POST habia echo la preuba para poner q el tipo de dato que se manejaria seria 'json' ya que de esta manera puedo en php por el json_enconde, guardar en arrays los resultados de las dos consultas, pero no me funciona ya que yo envio desde php ya el codigo html <option [$i]>$marca</option> y el json me cambia el caracter '/' por un carater raro y por lo tanto no lo interpreta como html, a la vez q me separa cada campo de cada array por "," y yo a su vez necesitaria distinguir los dos arrays para que en JS colocara cada uno en su respectivo COMO, para lo que tampoco se como tratarlo en JS...
  #6 (permalink)  
Antiguo 21/12/2012, 10:54
Avatar de jfhoyosm  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá, Colombia, Colombia
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 3
Respuesta: Dos Combobox Dependientes de Uno

Puedes especificar que resultados deberían aparecer en los otros dos combos, cuando selecciono el primero.
PDT: el resultado del tercero depende de lo que aparezca en el segundo, o solo del mismo primero.
  #7 (permalink)  
Antiguo 21/12/2012, 11:41
Avatar de jfhoyosm  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá, Colombia, Colombia
Mensajes: 27
Antigüedad: 13 años, 5 meses
Puntos: 3
Busqueda Respuesta: Dos Combobox Dependientes de Uno

Amigo no se si esto es lo que quieres hacer, espero te sirva de ayuda:

codigo.php
Código PHP:
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
Creado por Walter en Micodigobeta.com.ar-->
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<
title>Demo Combos Dependientes </title>
<
script src="jquery/js/jquery-1.8.3.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
    $("#tipo").change(function(event){
        var id = $("#tipo").find(':selected').val();
        $("#marca").load('carga.php?id='+id);
        $('#marca').attr('disabled',false);
    });
    $("#tipo").change(function(event){
        var id = $("#tipo").find(':selected').val();
        $("#rango").load('carga2.php?id='+id);
        $('#rango').attr('disabled',false);
    });
    $('#marca').attr('disabled',true);
    $('#rango').attr('disabled',true);
});
</script>
</head>*
<body>
<select name="tipo" id="tipo">
<option value="000">SELECCIONE</option>
<option value="C00">COMPUTO</option>
<option value="P00">PLASMA</option>
</select>
<select name="marca" id="marca">
<option value="0">---</option>
</select>
<select name="rango" id="rango">
<option value="0">---</option>
</select>
</body>
</html> 
carga.php
Código PHP:
<?php
mysql_connect
('localhost','root','Gato4045');
mysql_select_db('pruebas');
echo 
$consulta "SELECT marca FROM marcas WHERE cod_pro = '".$_GET['id']."'";
$query mysql_query($consulta);
while (
$fila mysql_fetch_assoc($query)){
    echo 
'<option value="'.$fila['marca'].'">'.$fila['marca'].'</option>';
}
?>
carga2.php
Código PHP:
<?php
mysql_connect
('localhost','root','Gato4045');
mysql_select_db('pruebas');
$id substr($_GET['id'],0,1);
echo 
$consulta "SELECT descripcion FROM rangos WHERE clave_rango LIKE '%".$id."%'";
$query mysql_query($consulta);
while (
$fila mysql_fetch_assoc($query)){
    echo 
'<option value="'.$fila['clave_rango'].'">'.$fila['descripcion'].'</option>';
}
?>
  #8 (permalink)  
Antiguo 21/12/2012, 14:50
Avatar de JhonErick  
Fecha de Ingreso: noviembre-2012
Ubicación: colombia
Mensajes: 38
Antigüedad: 12 años
Puntos: 3
Respuesta: Dos Combobox Dependientes de Uno

bueno ahora si te entendi jejeje eso creo???
desde un punto de vista profesional lo mejor es que comiences con el manejo de Json para organizar la información de la devolución de una llamada esto lo puedes hacer sencillamente llenenando una array y después json_encode
pero como una imagen vale mas q mil palabras

código php
espero que sepas manipular arrays en php

Código PHP:
Ver original
  1. //resultado del primer query
  2. $array[0][1]="jhon";
  3. $array[0][2]="hugo";
  4. $array[0][3]="paco";
  5. $array[0][4]="luis";
  6.  
  7. //resultado del segundo Query
  8. $array[1][1]="carlos";
  9. $array[1][2]="hugo";
  10. $array[1][3]="luis";
  11. $array[1][4]="pacho";


Código javascript

Código Javascript:
Ver original
  1. $.ajax({
  2.    type: "POST",
  3.   dataType: "json",
  4.   contentType: "application/json; charset=utf-8",
  5.   url: "json_encode.php",
  6.   data: { nombre: "jhon" },
  7.   success: function (dato){
  8.     console.log(dato);
  9.     //para acceder a cada elemento que se encuentras dentro de dato puedes hacer un for each o hacerlo manual de acuerdo a tu necesidad
  10.     alert(dato[0][1]); //muestra jhon
  11.     alert(dato[0][2]); //muestra hugo
  12.  
  13.     alert(dato[1][1]); //muestra carlos
  14.  
  15.   }
  16. });

para llenar los arrays en php puedes hacer $array[0][$cont]=$row['campo']; dentro del while de la consulta del primer select donde cont es un contador que se incrementa

Saludos y suerte
  #9 (permalink)  
Antiguo 21/12/2012, 15:02
Avatar de JhonErick  
Fecha de Ingreso: noviembre-2012
Ubicación: colombia
Mensajes: 38
Antigüedad: 12 años
Puntos: 3
Respuesta: Dos Combobox Dependientes de Uno

la forma no tan recomendable es como ya tienes un ajax que te esta devolviendo un echo en cada respuesta de la base de datos puedes concatenar una gran variable que te contenga todos los datos de respuesta y hacer solo un echo por ejemplo
$respuesta='';
$cont=0;
while primera consulta{
if($cont==0){ $respuesta = $row['campo'] }
else{ $respuesta .= ','.$row['campo'] }
$cont++;
}

$respuesta .= "/"
$cont=0;
while del segundo query{
if($cont==0){ $respuesta .= $row['campo'] }
else{ $respuesta .= ','.$row['campo'] }
$cont++;
}

echo $respuesta;

y una ves devuelto este valor por ajax lo dividís donde esta el "/" primero y después donde esta cada "," con javascript teniendo ahora si cada valor por separado OJO no recomiendo esta forma de envió de datos pero es funcional

Saludos

Última edición por JhonErick; 21/12/2012 a las 15:07
  #10 (permalink)  
Antiguo 26/12/2012, 11:51
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Dos Combobox Dependientes de Uno

Cita:
Iniciado por jfhoyosm Ver Mensaje
Puedes especificar que resultados deberían aparecer en los otros dos combos, cuando selecciono el primero.
PDT: el resultado del tercero depende de lo que aparezca en el segundo, o solo del mismo primero.
Claro amigo, como comente en la descripcion de mi duda, tengo tres comboselect, el primero es que que desencadenara el llenado de los otros dos, osea los otros dos son dependientes del primero, al seleccionar el primero se tienen solo dos opciones (computo y plasma), al seleccionar yo cualquiera de esos, lo que necesito es ir a mi base de datos y buscar en mis tablas los datos necesarios para llenar los otros dos combos, el primero se llenara con mi tabla de marcas y el segundo con los rangos de precios para el tipo de producto de computo... Por ejemplo, seleccionas COMPUTO, se llenaran automaticamente--> primer computo con todas las marcas, segundo combo con todos los rangos.
Selecciones PLASMA y se llenaran automaticamente primer combo con las marcas y el segundo con sus rangos... los otros dos combos que se llenaran son independientes entre si, pero dependen de lo que se seleccione en el primero para ir a bucar los datos a las tablas.
  #11 (permalink)  
Antiguo 26/12/2012, 12:00
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Dos Combobox Dependientes de Uno

Cita:
Iniciado por JhonErick Ver Mensaje
bueno ahora si te entendi jejeje eso creo???
desde un punto de vista profesional lo mejor es que comiences con el manejo de Json para organizar la información de la devolución de una llamada esto lo puedes hacer sencillamente llenenando una array y después json_encode
pero como una imagen vale mas q mil palabras

código php
espero que sepas manipular arrays en php

Código PHP:
Ver original
  1. //resultado del primer query
  2. $array[0][1]="jhon";
  3. $array[0][2]="hugo";
  4. $array[0][3]="paco";
  5. $array[0][4]="luis";
  6.  
  7. //resultado del segundo Query
  8. $array[1][1]="carlos";
  9. $array[1][2]="hugo";
  10. $array[1][3]="luis";
  11. $array[1][4]="pacho";


Código javascript

Código Javascript:
Ver original
  1. $.ajax({
  2.    type: "POST",
  3.   dataType: "json",
  4.   contentType: "application/json; charset=utf-8",
  5.   url: "json_encode.php",
  6.   data: { nombre: "jhon" },
  7.   success: function (dato){
  8.     console.log(dato);
  9.     //para acceder a cada elemento que se encuentras dentro de dato puedes hacer un for each o hacerlo manual de acuerdo a tu necesidad
  10.     alert(dato[0][1]); //muestra jhon
  11.     alert(dato[0][2]); //muestra hugo
  12.  
  13.     alert(dato[1][1]); //muestra carlos
  14.  
  15.   }
  16. });

para llenar los arrays en php puedes hacer $array[0][$cont]=$row['campo']; dentro del while de la consulta del primer select donde cont es un contador que se incrementa

Saludos y suerte
Ahola amigo, gracias por tu respuesta, como habia comentado en la descripción de mi pregunta, te comento que ya intente utilizar JSON para el envío de estos datos al JS, el detalle es que desde el php yo envio ya el codigo HTML del <option></option> pero JSON al enviarlo a JS me descompone este codigo y me modifica el caracter '/' por un caracter muy paercido a una 'V' por lo tanto el HTML no me lo reconoce como codigo HTML, a su vez al enviar los dos resutados por JSON cada campo del array me lo separa por "," y yo a su vez necesito separar los dos arrays que envio de cada consluta, y no se bien como podria hacer esta distinción, ya no se como hacerle...Gracias!
  #12 (permalink)  
Antiguo 25/01/2013, 10:52
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Dos Combobox Dependientes de Uno

Hola de nuevo, no pude solucionar el problema asi como se los habia planteado, lo que hago es recargar primero uno, y despues el segundo recarga el tercero, solo asi lo pude implementar.
Realmente no me salio que al seleccionar el primer combobox se recargaran los otros dos que dependen de este. Dejo el tema abierto por si alguien sabe la solucion a esto. Gracias!
  #13 (permalink)  
Antiguo 25/01/2013, 11:51
Avatar de fjrueda  
Fecha de Ingreso: marzo-2008
Ubicación: Bucaramanga
Mensajes: 313
Antigüedad: 16 años, 8 meses
Puntos: 35
Respuesta: Dos Combobox Dependientes de Uno

art_rockerd.

Ya le han dado varios ejemplos que supongo ha implentado, y por tal motivo su codigo ya no sera el mismo desde su primer poste, y si si, usted ya dijo que funciona del alguna forma.

Yo le pido el favor que vuelva a postear su actual codigo pues asi se puede volver a estudiar y encontrar una respuesta positiva.

Que tenga buen dia.
__________________
I am ME, Soo Who You ?? ... You Not me.
Web
@fjrueda_fmurdah
  #14 (permalink)  
Antiguo 25/01/2013, 13:07
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Dos Combobox Dependientes de Uno

Claro en cuanto me libere un poco puesto que estoy en plena liberacion del proyecto. Use js y PHP en cuanto pueda lo subo. Saludos
  #15 (permalink)  
Antiguo 28/01/2013, 09:55
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Dos Combobox Dependientes de Uno

Cita:
Iniciado por fjrueda Ver Mensaje
art_rockerd.

Ya le han dado varios ejemplos que supongo ha implentado, y por tal motivo su codigo ya no sera el mismo desde su primer poste, y si si, usted ya dijo que funciona del alguna forma.

Yo le pido el favor que vuelva a postear su actual codigo pues asi se puede volver a estudiar y encontrar una respuesta positiva.

Que tenga buen dia.
Hola, ahora q ando algo liberada, les comparto mi solucion...
Aqui esta el HTML, el primero es el que cuando se eliga se deberan cambiar tanto el segundo como el tercero, pero como les comente no pude lograrlo, lo que hago es que al cargar el primero, destapo el segundo, y al seleccionar el segundo , destapo el tercero...
Código HTML:
Ver original
  1. <select name="tipo" id="tipo" onchange="mostrarM(this.value);">
  2.           <option value="000" selected="selected" name="seleccione">ESCOJA</option>
  3.           <option name="computo" value="C00">COMPUTO</option>
  4.           <option name="plasma" value="P00">PLASMA</option>
  5.         </select>
  6.  
  7. <select name="marca" id="marca" onchange="mostrarR(this.value);" >
  8.           <option value="0">---</option>
  9.         </select>
  10.  
  11. <select name="rango" id="rango" onchange="limpiar();">
  12.           <option value="0">---</option>
  13.         </select>

Este es el codigo JS. que recibe los datos y los manda a PHP para retornar los resultados e imprimirlos en la pantalla.
Código Javascript:
Ver original
  1. function mostrarM(tipo){
  2. $('#rango option[value="0"]').attr("selected", true);
  3. $('#financiamiento option[value="0"]').attr("selected", true);
  4. //en cada onchange, deshabilitar rango
  5. $('#rango').attr('disabled','disabled');
  6.         if(tipo=="000"){
  7.             $('#marca').attr('disabled','disabled');
  8.             $('#rango').attr('disabled','disabled');
  9.             return false;
  10.         }
  11.         $.post("carga_select2.php",{ id:tipo },
  12.         function(data){
  13.             $('#marca').attr('disabled','');
  14.             $('#marca').html(data);
  15.             //las volvemos a poner en el value '0'
  16.         })
  17. }
  18. function mostrarR(mark){
  19.         var id=$('#tipo option:selected').val();
  20.         //cuando la marca sea 1 (seleccione) deshabilitar rango
  21.         if(mark=="1"){
  22.             $('#rango').attr('disabled','disabled');
  23.             return false;
  24.         }
  25.         $.post("carga_select2.php",{ tipo:id },
  26.             function(data){
  27.             $('#rango').attr('disabled','');
  28.             $("#rango").html(data);
  29.             //alert(data);
  30.             //var selGarantia =$('#rango option:selected').val();
  31.             //alert(selGarantia);
  32.            
  33.         })
  34. }
  35.  
  36.  
  37. $(document).ready(function(){
  38.     $('#marca').attr('disabled','disabled');
  39.     $('#rango').attr('disabled','disabled');
  40. });

Este es el script PHP que recibe los datos de JS y busca en la BDD
(nota: desgraciadamente hice todo con la extension de Mysql de PHP y ahora que esta deprecada me esta costando mucho adaptarme a Mysqli pq no lo entiendo bien, si pudieran ayudarme a pasarlo a mysqli se los agradeceria mucho )

Código PHP:
Ver original
  1. <?php
  2. //funcion para cargar las marcas
  3.     function carga_combo($Area){
  4.             //realizamos la consulta
  5.             switch($Area){
  6.                 case '000':
  7.                     echo "<option value='0'><--SELECCIONE ANTES</option>";
  8.                     break;
  9.                 case 'C00':
  10.                     include "conexion.php";
  11.                         $query = "SELECT marca FROM marcas WHERE cod_prod='C00'";
  12.                         $ejecuta2 = mysql_query($query, $conexion) or die(mysql_error());
  13.                         $i="";
  14.                         while ($row= mysql_fetch_array($ejecuta2)) {
  15.                             $marca= $row['marca'];
  16.                             $i=$i+1;
  17.                             echo "<option value=".$i.">".$marca."</option>";
  18.                         }
  19.                        
  20.                     break;
  21.                 case 'P00':
  22.                     include "conexion.php";
  23.                     $query = "SELECT marca FROM marcas WHERE cod_prod='P00'";
  24.                     $ejecuta = mysql_query($query, $conexion) or die(mysql_error());
  25.                     $i="";
  26.                     while ($row= mysql_fetch_array($ejecuta)) {
  27.                         $marca= $row['marca'];
  28.                         $i=$i+1;
  29.                         echo "<option value=".$i.">".$marca."</option>";
  30.                     }
  31.                     break;
  32.             }//end switch  
  33. }//end function
  34.  
  35. //funcion para cargar marcas
  36. function carga_rangos($tipo){
  37.             //realizamos la consulta
  38.             switch($tipo){
  39.                 case '000':
  40.                     echo "<option value='0'><--SELECCIONE ANTES</option>";
  41.                     break;
  42.                 case 'C00':
  43.                     include "conexion.php";
  44.                         $query2 = "SELECT descripcion FROM rangos WHERE clave_rango LIKE '%c%' order by(clave_rango) desc";
  45.                         $ejecuta = mysql_query($query2, $conexion) or die(mysql_error());
  46.                         $i="";
  47.                         while ($row= mysql_fetch_array($ejecuta)) {
  48.                             $rangos= $row['descripcion'];
  49.                             $i=$i+1;
  50.                             echo "<option value=".$i."c>$".$rangos."</option>";
  51.                             }
  52.                     break;
  53.                 case 'P00':
  54.                     include "conexion.php";
  55.                         $query2 = "SELECT descripcion FROM rangos WHERE clave_rango LIKE '%p%' order by(clave_rango) desc";
  56.                         $ejecuta = mysql_query($query2, $conexion) or die(mysql_error());
  57.                         $i="";
  58.                         while ($row= mysql_fetch_array($ejecuta)) {
  59.                             $rangos= $row['descripcion'];
  60.                             $i=$i+1;
  61.                             echo "<option value=".$i."p>$".$rangos."</option>";
  62.                             }
  63.                     break;
  64.             }//end switch  
  65. }//end function
  66.  
  67.  
  68. if (isset($_POST['id'])){
  69.                     //lee las variables del $.post() de jQuery
  70.                     carga_combo($_POST['id']);
  71.                 }else {//en caso de no estar definida post(id) enviar parametro a la otra funcion para rangos
  72.                     if (isset($_POST['tipo'])){
  73.                         //lee las variables del $.post() de jQuery
  74.                         carga_rangos($_POST['tipo']);
  75.                     }
  76.                 }
  77. ?>

Y bueno al final les pongo como estan mis tablas en mi bdd Mysql
Código MySQL:
Ver original
  1. -- CREAMOS LA TABLA PARA LAS MARCAS --
  2. CREATE TABLE marcas(
  3. cod_prod varchar(10),
  4. marca varchar(40)
  5. );
  6.  -- INSERTAMOS EN TABLA MARCAS --
  7. ("C00","SELECCIONE.."),
  8. ("C00","ACER"),
  9. ("C00","APPLE"),
  10. ("C00","ASUS"),
  11. ("C00","BENQ"),
  12. ("C00","DELL"),
  13. ("C00","HP"),
  14. ("C00","LANIX"),
  15. ("C00","LENOVO"),
  16. ("C00","LG"),
  17. ("C00","MSI"),
  18. ("C00","PANASONIC"),
  19. ("C00","SAMSUNG"),
  20. ("C00","SONY"),
  21. ("C00","TOSHIBA"),
  22. ("P00","SELECCIONE.."),
  23. ("P00","LG"),
  24. ("P00","SAMSUNG"),
  25. ("P00","SONY"),
  26. ("P00","SHARP");
  27.  
  28.  
  29. -- TABLA RANGOS--
  30. CREATE TABLE rangos(
  31.     clave_rango varchar(5),
  32.     descripcion varchar(50),
  33.     CONSTRAINT PK primary key (clave_rango)
  34. );
  35.  
  36. -- INSERTAMOS CATALOGO DE RANGOS --
  37. INSERT INTO rangos(clave_rango,descripcion)  VALUES ("1c","0-7500"),
  38. ("2c","7501-10000"),
  39. ("3c",">10000"),
  40. ("1p","0-7500"),
  41. ("2p","7501-10000"),
  42. ("3p","10001-15000"),
  43. ("4p","15001-20000"),
  44. ("5p","20001-30000");

Quedo atenta a sus comentarios, estoy solo poniendo solo la parte donde cargo los selects de mi aplicacion, asi que si se me paso ponerles algo que uds. crean me avisan para que lo revise, muchas gracias por su apoyo.
  #16 (permalink)  
Antiguo 28/01/2013, 18:45
Avatar de fjrueda  
Fecha de Ingreso: marzo-2008
Ubicación: Bucaramanga
Mensajes: 313
Antigüedad: 16 años, 8 meses
Puntos: 35
Respuesta: Dos Combobox Dependientes de Uno

Y que pasa si hubica las 2 funciones en el primer <select> ?? ...

Código HTML:
Ver original
  1. <select name="tipo" id="tipo" onchange="mostrarM(this.value); mostrarR('marca');">
  2.           <option value="000" selected="selected" name="seleccione">ESCOJA</option>
  3.           <option name="computo" value="C00">COMPUTO</option>
  4.           <option name="plasma" value="P00">PLASMA</option>
  5.         </select>
  6.  
  7. <select name="marca" id="marca">
  8.           <option value="0">---</option>
  9.         </select>
  10.  
  11. <select name="rango" id="rango" onchange="limpiar();">
  12.           <option value="0">---</option>
  13.         </select>

ya lo intento ?? ... depronto va tener que cambiar un poco el php para que se adapte al cambio del dato inmediato.
__________________
I am ME, Soo Who You ?? ... You Not me.
Web
@fjrueda_fmurdah
  #17 (permalink)  
Antiguo 29/01/2013, 08:46
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Dos Combobox Dependientes de Uno

Cita:
Iniciado por fjrueda Ver Mensaje
Y que pasa si hubica las 2 funciones en el primer <select> ?? ...

Código HTML:
Ver original
  1. <select name="tipo" id="tipo" onchange="mostrarM(this.value); mostrarR('marca');">
  2.           <option value="000" selected="selected" name="seleccione">ESCOJA</option>
  3.           <option name="computo" value="C00">COMPUTO</option>
  4.           <option name="plasma" value="P00">PLASMA</option>
  5.         </select>
  6.  
  7. <select name="marca" id="marca">
  8.           <option value="0">---</option>
  9.         </select>
  10.  
  11. <select name="rango" id="rango" onchange="limpiar();">
  12.           <option value="0">---</option>
  13.         </select>

ya lo intento ?? ... depronto va tener que cambiar un poco el php para que se adapte al cambio del dato inmediato.
o_O no me lo va a creer, pero no sabia que se podian invocar dos funciones en un mismo elemento HTML... tendria que probarlo y le comento los resultados, pero estaria mejor de esa manera se optimizaria y se resolveria el problema que plantee al inicio, lo intentare y cuando tenga los resultado les comento. Saludos!
  #18 (permalink)  
Antiguo 30/01/2013, 09:03
Avatar de fjrueda  
Fecha de Ingreso: marzo-2008
Ubicación: Bucaramanga
Mensajes: 313
Antigüedad: 16 años, 8 meses
Puntos: 35
Respuesta: Dos Combobox Dependientes de Uno

Ok art_rockerd.

Estare pendiente ... en los eventos de los objetos se pueden utilizar varias funciones, he visto que algunas personas no lo recomiendan, pero se puede optimizar por medio del propio JS y claro, siempre y cuando un "return" no interrumpa la comunicacion de las funciones.

Me cuenta por favor.
__________________
I am ME, Soo Who You ?? ... You Not me.
Web
@fjrueda_fmurdah

Etiquetas: combobox, dependientes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:57.