Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con select anidados

Estas en el tema de Problema con select anidados en el foro de PHP en Foros del Web. Hola a todos. Tengo el siguiente problema que no puedo resolver. tendo un select anidado que a medida que voy sleccionado me va sumando datso ...
  #1 (permalink)  
Antiguo 23/01/2014, 07:34
 
Fecha de Ingreso: octubre-2013
Mensajes: 56
Antigüedad: 10 años, 5 meses
Puntos: 1
Problema con select anidados

Hola a todos.
Tengo el siguiente problema que no puedo resolver.

tendo un select anidado que a medida que voy sleccionado me va sumando datso al proximo select.
ejemplo
select 1 datos base MYSQL
select 2 datos base MYSQL where el valor del select 1 (este select lo tengo resuelto)
select 3 datos base MYSQL where valor select 1 and valor select 2

el problema es que no puedo hacer que me traiga los 2 datos.

la base tiene una sola tabla.

les paso el codigo.

Código PHP:
<?php
require_once("funciones.php");

if(isset(
$_POST['cia'])){
    
    
$tc dameTc($_POST['cia']);
    
    
$html "<option value=''>Seleccione una Tarjeta</option>";
    foreach(
$tc as $indice => $registro){
        
$html .= "<option value='".$registro['tarjeta']."'>".$registro['nombre']."</option>";
    }
    
    
$respuesta = array("html"=>$html);
    echo 
json_encode($respuesta);
}

if(isset(
$_POST['tc'])){
    
    
$bcodameBco($_POST['tc']);
    
    
$html "<option value=''>Seleccione un Banco</option>";
    foreach(
$bco as $indice => $registro){
        
$html .= "<option value='".$registro['banco']."'>".$registro['banco']."</option>";
    }
    
    
$respuesta = array("html"=>$html);
    echo 
json_encode($respuesta);
}
if(isset(
$_POST['bco'])){
    
    
$ctadameCta($_POST['bco']);
    
    
$html "<option value=''>Seleccione cantidad de cuotas</option>";
    foreach(
$cta as $indice => $registro){
        
$html .= "<option value='".$registro['cuotas']."'>".$registro['cuotas']."</option>";
    }
    
    
$respuesta = array("html"=>$html);
    echo 
json_encode($respuesta);
}


?>
y el otro es
Código PHP:
<?php

/* Archivo para funciones */

function conectaBaseDatos(){
    try{
        
$servidor "localhost";
        
$basedatos "info_cias";
        
$usuario "root";
        
$contrasena "";
    
        
$conexion = new PDO("mysql:host=$servidor;port=$puerto;dbname=$basedatos",
                            
$usuario,
                            
$contrasena,
                            array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
        
        
$conexion->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODEPDO::FETCH_ASSOC);
        return 
$conexion;
    }
    catch (
PDOException $e){
        die (
"No se puede conectar a la base de datos"$e->getMessage());
    }
}

function 
dameCia(){
    
$resultado false;
    
$consulta "SELECT DISTINCT cia,aerolinea FROM coeficientes WHERE aerolinea <> 'tije' ORDER BY aerolinea ASC";
    
    
$conexion conectaBaseDatos();
    
$sentencia $conexion->prepare($consulta);
    
    try {
        if(!
$sentencia->execute()){
            
print_r($sentencia->errorInfo());
        }
        
$resultado $sentencia->fetchAll();
        
//$resultado = $sentencia->fetchAll(PDO::FETCH_ASSOC);
        
$sentencia->closeCursor();
    }
    catch(
PDOException $e){
        echo 
"Error al ejecutar la sentencia: \n";
            
print_r($e->getMessage());
    }
    
    return 
$resultado;
}

function 
dameTc($cia ''){
    
$resultado false;
    
$consulta "SELECT DISTINCT tarjeta,nombre FROM coeficientes";
    
    if(
$cia != ''){
        
$consulta .= " WHERE cia = :cia";
    }
    
    
$conexion conectaBaseDatos();
    
$sentencia $conexion->prepare($consulta);
    
$sentencia->bindParam('cia',$cia);
    
    
    try {
        if(!
$sentencia->execute()){
            
print_r($sentencia->errorInfo());
        }
        
$resultado $sentencia->fetchAll();
        
//$resultado = $sentencia->fetchAll(PDO::FETCH_ASSOC);
        
$sentencia->closeCursor();
    }
    catch(
PDOException $e){
        echo 
"Error al ejecutar la sentencia: \n";
            
print_r($e->getMessage());
    }
    
    return 
$resultado;
}

function 
dameBco($tc ''){
    
$resultado false;
    
$consulta "SELECT DISTINCT banco FROM coeficientes";
    
    if(
$tc != ''){
        
$consulta .= " WHERE tarjeta = :tc AND cia = :cia";
        
    }
    
    
$conexion conectaBaseDatos();
    
$sentencia $conexion->prepare($consulta);
    
$sentencia->bindParam('tc',$tc);
    
$sentencia->bindParam('cia',$cia);
    
    try {
        if(!
$sentencia->execute()){
            
print_r($sentencia->errorInfo());
        }
        
$resultado $sentencia->fetchAll();
        
//$resultado = $sentencia->fetchAll(PDO::FETCH_ASSOC);
        
$sentencia->closeCursor();
    }
    catch(
PDOException $e){
        echo 
"Error al ejecutar la sentencia: \n";
            
print_r($e->getMessage());
    }
    
    return 
$resultado;
}
Desde ya muchisimas gracias por su colaboracion.

Saludos
Chaly_lpg
  #2 (permalink)  
Antiguo 23/01/2014, 08:08
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 6 meses
Puntos: 397
Respuesta: Problema con select anidados

Bueno hasta donde veo estás usando POST para traer la información y JSON, así que supondré que estas usando AJAX para hacer las consultas. Puedes mostrar el código Javascript y la estructura HTML de los selects?

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #3 (permalink)  
Antiguo 23/01/2014, 08:12
 
Fecha de Ingreso: octubre-2013
Mensajes: 56
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Problema con select anidados

Hola
te paso el codigo de HTML. estan en un solo archivo los Scripts

Código PHP:
<?php
require_once("funciones.php");
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Formulario con SELECT > OPTION Dinamico</title>
<script src="jquery-1.10.2.min.js"></script>
</head>

<body>
<form style="width: 480px">
    <fieldset>
    <legend>Seleccione su entidad federativa</legend>
    <label>Linea Aerea:</label>
        <select name="cia" id="cia">
                <option value="">Seleccione una Linea Aerea</option>
        <?php
        $cia 
dameCia();
        
        foreach(
$cia as $indice => $registro){
            echo 
"<option value=".$registro['cia'].">".$registro['aerolinea']."</option>";
        }
        
?>
    </select>
    <br><br>
    <label>Tarjeta:</label>
        <select name="tc" id="tc">
                <option value="">Primero seleccione una Linea Aerea</option>
    </select>
    <br><br>
    <label>Banco:</label>
        <select name="bco" id="bco">
                <option value="">Primero seleccione una Tarjeta</option>
    </select>
    <br><br>
    <label>Cuotas:</label>
        <select name="cta" id="cta">
                <option value="">Primero seleccione un Banco</option>
    </select>
    </fieldset>
</form>
<hr>
<script>
$("#cia").on("change", buscarTc);
$("#tc").on("change", buscarBco);
$("#bco").on("change", buscarCta);


function buscarTc(){
    $("#Bco").html("<option value=''>Primero seleccione una Tarjeta</option>");
    
    $cia = $("#cia").val();
    
    if($cia == ""){
            $("#tc").html("<option value=''>Primero seleccione una Linea Aerea</option>");
    }
    else {
        $.ajax({
            dataType: "json",
            data: {"cia": $cia},
            url:   'buscar.php',
            type:  'post',
            beforeSend: function(){
                //Lo que se hace antes de enviar el formulario
                },
            success: function(respuesta){
                //lo que se si el destino devuelve algo
                $("#tc").html(respuesta.html);
            },
            error:    function(xhr,err){ 
                alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\n \n responseText: "+xhr.responseText);
            }
        });
    }
}

function buscarBco(){
    $("#bco").html("<option value=''>Primero seleccione una Tarjeta</option>");
    
    $tc = $("#tc").val();
    
    if($tc == ""){
            $("#tc").html("<option value=''>Primero seleccione una Linea Aerea</option>");
    }
    else {
        $.ajax({
            dataType: "json",
            data: {"tc": $tc},
            url:   'buscar.php',
            type:  'post',
            beforeSend: function(){
                //Lo que se hace antes de enviar el formulario
                },
            success: function(respuesta){
                //lo que se si el destino devuelve algo
                $("#bco").html(respuesta.html);
            },
            error:    function(xhr,err){ 
                alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\n \n responseText: "+xhr.responseText);
            }
        });
    }
}
function buscarCta(){
    $("#bco").html("<option value=''>Primero seleccione una Tarjeta</option>");
    
    $bco = $("#bco").val();
    
    if($tc == ""){
            $("#tc").html("<option value=''>Primero seleccione una Linea Aerea</option>");
    }
    else {
        $.ajax({
            dataType: "json",
            data: {"bco": $bco},
            url:   'buscar.php',
            type:  'post',
            beforeSend: function(){
                //Lo que se hace antes de enviar el formulario
                },
            success: function(respuesta){
                //lo que se si el destino devuelve algo
                $("#cta").html(respuesta.html);
            },
            error:    function(xhr,err){ 
                alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\n \n responseText: "+xhr.responseText);
            }
        });
    }
}
</script>
</body>
</html>
Saludos
  #4 (permalink)  
Antiguo 23/01/2014, 08:27
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 6 meses
Puntos: 397
Respuesta: Problema con select anidados

Pues tu problema es de Javascript sobre escribes los selects por eso se pierden los valores

Mira si esto te funciona:

Código Javascript:
Ver original
  1. $("#cia").on("change", buscarTc);
  2. $("#tc").on("change", buscarBco);
  3. $("#bco").on("change", buscarCta);
  4. function buscarTc(){
  5.     $cia = $("#cia").val();
  6.     if($cia == ""){
  7.         $("#tc").html("<option value=''>Primero seleccione una Linea Aerea</option>");
  8.     } else {
  9.         $.ajax({
  10.             dataType: "json",
  11.             data: {"cia": $cia},
  12.             url:   'buscar.php',
  13.             type:  'post',
  14.             beforeSend: function(){
  15.                 //Lo que se hace antes de enviar el formulario
  16.             },
  17.             success: function(respuesta){
  18.                 //lo que se si el destino devuelve algo
  19.                 $("#tc").html(respuesta.html);
  20.             },
  21.             error:    function(xhr,err){  
  22.                 alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\n \n responseText: "+xhr.responseText);
  23.             }
  24.         });
  25.     }
  26. }
  27. function buscarBco(){
  28.     $tc = $("#tc").val();
  29.     if($tc == ""){
  30.         $("#bco").html("<option value=''>Primero seleccione una Tarjeta</option>");
  31.     } else {
  32.         $.ajax({
  33.             dataType: "json",
  34.             data: {"tc": $tc},
  35.             url:   'buscar.php',
  36.             type:  'post',
  37.             beforeSend: function(){
  38.                 //Lo que se hace antes de enviar el formulario
  39.             },
  40.             success: function(respuesta){
  41.                 //lo que se si el destino devuelve algo
  42.                 $("#bco").html(respuesta.html);
  43.             },
  44.             error:function(xhr,err){  
  45.                 alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\n \n responseText: "+xhr.responseText);
  46.             }
  47.         });
  48.     }
  49. }
  50. function buscarCta(){
  51.     $bco = $("#bco").val();
  52.     if($bco == ""){
  53.         $("#cta").html("<option value=''>Primero seleccione un Banco</option>");
  54.     } else {
  55.         $.ajax({
  56.             dataType: "json",
  57.             data: {"bco": $bco},
  58.             url:   'buscar.php',
  59.             type:  'post',
  60.             beforeSend: function(){
  61.                 //Lo que se hace antes de enviar el formulario
  62.             },
  63.             success: function(respuesta){
  64.                 //lo que se si el destino devuelve algo
  65.                 $("#cta").html(respuesta.html);
  66.             },
  67.             error:    function(xhr,err){  
  68.                 alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\n \n responseText: "+xhr.responseText);
  69.             }
  70.         });
  71.     }
  72. }

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #5 (permalink)  
Antiguo 23/01/2014, 08:35
 
Fecha de Ingreso: octubre-2013
Mensajes: 56
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Problema con select anidados

Hola
No, no funciono. sigue solo trayendo el ultimo dato.

Saludos
  #6 (permalink)  
Antiguo 23/01/2014, 08:45
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 6 meses
Puntos: 397
Respuesta: Problema con select anidados

No veo la función dameCta en el código que pasaste

Debes de modificar lo siguiente en el archivo de buscar.php

Código PHP:
Ver original
  1. $bco= dameBco($_POST['tc']);

Por

Código PHP:
Ver original
  1. $bco= dameBco($_POST['tc'], $_POST['cia']);

En el Javascript debes de cambiar la siguiente función (se añadió la captura de cia y se lo envía a buscar.php junto al tc)

Código PHP:
Ver original
  1. function buscarBco(){
  2.     $tc = $("#tc").val();
  3.     $cia = $("#cia").val();
  4.     if($tc == ""){
  5.         $("#bco").html("<option value=''>Primero seleccione una Tarjeta</option>");
  6.     } else {
  7.         $.ajax({
  8.             dataType: "json",
  9.             data: {"tc": $tc, "cia":$cia},
  10.             url:   'buscar.php',
  11.             type:  'post',
  12.             beforeSend: function(){
  13.                 //Lo que se hace antes de enviar el formulario
  14.             },
  15.             success: function(respuesta){
  16.                 //lo que se si el destino devuelve algo
  17.                 $("#bco").html(respuesta.html);
  18.             },
  19.             error:function(xhr,err){  
  20.                 alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\n \n responseText: "+xhr.responseText);
  21.             }
  22.         });
  23.     }
  24. }

Y el archivo de funciones a la función dameBco se añadió un nuevo parámetro.

Código PHP:
Ver original
  1. function dameBco($tc = '', $cia = ''){

Ya que tienes esto:

Código PHP:
Ver original
  1. $sentencia->bindParam('tc',$tc);
  2. $sentencia->bindParam('cia',$cia);

Con eso te deberia funcionar. Me imagino que para el ultimo select hay que hacer algo similar... como ves has omitido valores. Revisa bien tu codigo.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #7 (permalink)  
Antiguo 23/01/2014, 09:34
 
Fecha de Ingreso: octubre-2013
Mensajes: 56
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Problema con select anidados

Hola
Ante todo pido disculpa, pero soy muy novato en programacion

Hice los cambios que sugeriste y sigue sin funcionar.
el problema esta en esta linea
Código Javascript:
Ver original
  1. data: {"tc": $tc, "cia":$cia},

si la dejo asi me da error y si le saco algun dato no me trae el otro.

Saludos
  #8 (permalink)  
Antiguo 23/01/2014, 09:37
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 6 meses
Puntos: 397
Respuesta: Problema con select anidados

Hiciste todos los cambios que te dije que hicieras? Con uno que no hagas te deja de funcionar. El otro asunto es que error te da? Por favor cuando algo te genere error es útil e inteligente de tu parte compartirlo. De esa manera se avanza más asertivamente con el problema.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #9 (permalink)  
Antiguo 23/01/2014, 09:45
 
Fecha de Ingreso: octubre-2013
Mensajes: 56
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Problema con select anidados

Hola Hice todos los cambios sugeridos

El error que da es un alert
cuando selecciono la tarjeta

te trasncribo el texto
readyState: 4
Status: 200
responseText: {"html":"<option value=''>Seleccione una Tarjeta<\/option><option value='AX'>American Express<\/option><option value='CA'>Mastercard<\/option><option value='CB'>Cabal<\/option><option value='DC'>Diners<\/option><option value='NA'>Naranja<\/option><option value='NT'>Nativa<\/option><option value='VI'>Visa<\/option>"}{"html":"<option value=''>Seleccione un Banco<\/option><option value='Cualquiera'>Cualquiera<\/option>"}

Espero que te sea util.
Te agradezco muchisimo tu colaboracion.
  #10 (permalink)  
Antiguo 23/01/2014, 09:48
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 6 meses
Puntos: 397
Respuesta: Problema con select anidados

Pues muy extraño ya que los datos los esta trayendo y las cabeceras están bien

Cita:
readyState: 4
Status: 200
Por favor postea los codigos de nuevo, para ver como va quedando.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #11 (permalink)  
Antiguo 23/01/2014, 09:52
 
Fecha de Ingreso: octubre-2013
Mensajes: 56
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Problema con select anidados

Te paso nuevamente los codigos

Formulario
Código PHP:
<?php
require_once("funciones.php");
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Formulario con SELECT > OPTION Dinamico</title>
<script src="jquery-1.10.2.min.js"></script>
</head>

<body>
<form style="width: 480px">
    <fieldset>
    <legend>Seleccione su entidad federativa</legend>
    <label>Linea Aerea:</label>
        <select name="cia" id="cia">
                <option value="">Seleccione una Linea Aerea</option>
        <?php
        $cia 
dameCia();
        
        foreach(
$cia as $indice => $registro){
            echo 
"<option value=".$registro['cia'].">".$registro['aerolinea']."</option>";
        }
        
?>
    </select>
    <br><br>
    <label>Tarjeta:</label>
        <select name="tc" id="tc">
                <option value="">Primero seleccione una Linea Aerea</option>
    </select>
    <br><br>
    <label>Banco:</label>
        <select name="bco" id="bco">
                <option value="">Primero seleccione una Tarjeta</option>
    </select>
    <br><br>
    <label>Cuotas:</label>
        <select name="cta" id="cta">
                <option value="">Primero seleccione un Banco</option>
    </select>
    </fieldset>
</form>
<hr>
<script>
$("#cia").on("change", buscarTc); 
$("#tc").on("change", buscarBco); 
$("#bco").on("change", buscarCta); 
function buscarTc(){ 
    $cia = $("#cia").val(); 
    if($cia == ""){ 
        $("#tc").html("<option value=''>Primero seleccione una Linea Aerea</option>"); 
    } else { 
        $.ajax({ 
            dataType: "json", 
            data: {"cia": $cia}, 
            url:   'buscar.php', 
            type:  'post', 
            beforeSend: function(){ 
                //Lo que se hace antes de enviar el formulario 
            }, 
            success: function(respuesta){ 
                //lo que se si el destino devuelve algo 
                $("#tc").html(respuesta.html); 
            }, 
            error:    function(xhr,err){  
                alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\n \n responseText: "+xhr.responseText); 
            } 
        }); 
    } 

function buscarBco(){ 
    $tc = $("#tc").val();
    $cia = $("#cia").val(); 
    if($tc == ""){ 
        $("#bco").html("<option value=''>Primero seleccione una Tarjeta</option>"); 
    } else { 
        $.ajax({ 
            dataType: "json", 
            data: {"tc": $tc, "cia": $cia}, 
            url:   'buscar.php', 
            type:  'post', 
            beforeSend: function(){ 
                //Lo que se hace antes de enviar el formulario 
            }, 
            success: function(respuesta){ 
                //lo que se si el destino devuelve algo 
                $("#bco").html(respuesta.html); 
            }, 
            error:function(xhr,err){  
                alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\n \n responseText: "+xhr.responseText); 
            } 
        }); 
    } 
}
function buscarCta(){ 
    $bco = $("#bco").val(); 
    if($bco == ""){ 
        $("#cta").html("<option value=''>Primero seleccione un Banco</option>"); 
    } else { 
        $.ajax({ 
            dataType: "json", 
            data: {"bco": $bco}, 
            url:   'buscar.php', 
            type:  'post', 
            beforeSend: function(){ 
                //Lo que se hace antes de enviar el formulario 
            }, 
            success: function(respuesta){ 
                //lo que se si el destino devuelve algo 
                $("#cta").html(respuesta.html); 
            }, 
            error:    function(xhr,err){  
                alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\n \n responseText: "+xhr.responseText); 
            } 
        }); 
    } 
}
</script>
</body>
</html>
Funciones.php

Código PHP:
<?php

/* Archivo para funciones */

function conectaBaseDatos(){
    try{
        
$servidor "localhost";
        
$basedatos "info_cias";
        
$usuario "root";
        
$contrasena "";
    
        
$conexion = new PDO("mysql:host=$servidor;port=$puerto;dbname=$basedatos",
                            
$usuario,
                            
$contrasena,
                            array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
        
        
$conexion->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODEPDO::FETCH_ASSOC);
        return 
$conexion;
    }
    catch (
PDOException $e){
        die (
"No se puede conectar a la base de datos"$e->getMessage());
    }
}

function 
dameCia(){
    
$resultado false;
    
$consulta "SELECT DISTINCT cia,aerolinea FROM coeficientes WHERE aerolinea <> 'tije' ORDER BY aerolinea ASC";
    
    
$conexion conectaBaseDatos();
    
$sentencia $conexion->prepare($consulta);
    
    try {
        if(!
$sentencia->execute()){
            
print_r($sentencia->errorInfo());
        }
        
$resultado $sentencia->fetchAll();
        
//$resultado = $sentencia->fetchAll(PDO::FETCH_ASSOC);
        
$sentencia->closeCursor();
    }
    catch(
PDOException $e){
        echo 
"Error al ejecutar la sentencia: \n";
            
print_r($e->getMessage());
    }
    
    return 
$resultado;
}

function 
dameTc($cia ''){
    
$resultado false;
    
$consulta "SELECT DISTINCT tarjeta,nombre FROM coeficientes";
    
    if(
$cia != ''){
        
$consulta .= " WHERE cia = :cia";
    }
    
    
$conexion conectaBaseDatos();
    
$sentencia $conexion->prepare($consulta);
    
$sentencia->bindParam('cia',$cia);
    
    
    try {
        if(!
$sentencia->execute()){
            
print_r($sentencia->errorInfo());
        }
        
$resultado $sentencia->fetchAll();
        
//$resultado = $sentencia->fetchAll(PDO::FETCH_ASSOC);
        
$sentencia->closeCursor();
    }
    catch(
PDOException $e){
        echo 
"Error al ejecutar la sentencia: \n";
            
print_r($e->getMessage());
    }
    
    return 
$resultado;
}

function 
dameBco($tc ''$cia ''){
    
$resultado false;
    
$consulta "SELECT DISTINCT banco FROM coeficientes";
    
    if(
$tc != ''){
        
$consulta .= " WHERE tarjeta = :tc AND cia = :cia";
        
    }
    
    
$conexion conectaBaseDatos();
    
$sentencia $conexion->prepare($consulta);
    
$sentencia->bindParam('tc',$tc);
    
$sentencia->bindParam('cia',$cia);
    
    try {
        if(!
$sentencia->execute()){
            
print_r($sentencia->errorInfo());
        }
        
$resultado $sentencia->fetchAll();
        
//$resultado = $sentencia->fetchAll(PDO::FETCH_ASSOC);
        
$sentencia->closeCursor();
    }
    catch(
PDOException $e){
        echo 
"Error al ejecutar la sentencia: \n";
            
print_r($e->getMessage());
    }
    
    return 
$resultado;
}
function 
dameCta($bco ''){
    
$resultado false;
    
$consulta "SELECT DISTINCT cuotas FROM coeficientes";
    
    if(
$bco != ''){
        
$consulta .= " WHERE banco = :bco AND cia = :cia AND tarjeta = :tc ORDER BY coutas ASC";
        
    }
    
    
$conexion conectaBaseDatos();
    
$sentencia $conexion->prepare($consulta);
    
$sentencia->bindParam('bco',$bco);
    
$sentencia->bindParam('tc',$tc);
    
$sentencia->bindParam('cia',$cia);
    
    try {
        if(!
$sentencia->execute()){
            
print_r($sentencia->errorInfo());
        }
        
$resultado $sentencia->fetchAll();
        
//$resultado = $sentencia->fetchAll(PDO::FETCH_ASSOC);
        
$sentencia->closeCursor();
    }
    catch(
PDOException $e){
        echo 
"Error al ejecutar la sentencia: \n";
            
print_r($e->getMessage());
    }
    
    return 
$resultado;
}


?>
BUSCAR.PHP
Código PHP:
<?php
require_once("funciones.php");

if(isset(
$_POST['cia'])){
    
    
$tc dameTc($_POST['cia']);
    
    
$html "<option value=''>Seleccione una Tarjeta</option>";
    foreach(
$tc as $indice => $registro){
        
$html .= "<option value='".$registro['tarjeta']."'>".$registro['nombre']."</option>";
    }
    
    
$respuesta = array("html"=>$html);
    echo 
json_encode($respuesta);
}

if(isset(
$_POST['tc'])){
    
    
$bcodameBco($_POST['tc'], $_POST['cia']);
    
    
$html "<option value=''>Seleccione un Banco</option>";
    foreach(
$bco as $indice => $registro){
        
$html .= "<option value='".$registro['banco']."'>".$registro['banco']."</option>";
    }
    
    
$respuesta = array("html"=>$html);
    echo 
json_encode($respuesta);
}
if(isset(
$_POST['bco'])){
    
    
$ctadameCta($_POST['bco']);
    
    
$html "<option value=''>Seleccione cantidad de cuotas</option>";
    foreach(
$cta as $indice => $registro){
        
$html .= "<option value='".$registro['cuotas']."'>".$registro['cuotas']."</option>";
    }
    
    
$respuesta = array("html"=>$html);
    echo 
json_encode($respuesta);
}


?>
Saludos
  #12 (permalink)  
Antiguo 23/01/2014, 10:00
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 6 meses
Puntos: 397
Respuesta: Problema con select anidados

Ahhh no caí en cuenta algo

Cada select subsiguiente necesita de los otros anteriores:

La aerolinea no depende de nadie

La tarjeta depende de la aerolinea

El banco depende de la aerolinea y la tarjeta

Y las cuotas depende de la aerolinea, la tarjeta y el banco

Como ves ese es el planteamiento lógico que tu has planteado pero no estas pasando los parametros necesarios por AJAX (aunque la funciones están casi completas en este aspecto pero debes de complementarlas en los parametros que reciben cada una de ellas) y por ello no te funciona correctamente como deseas...

Ahora bien, en buscar.php

Cambia

Código PHP:
Ver original
  1. if(isset($_POST['cia'])){

Por

Código PHP:
Ver original
  1. if(isset($_POST['cia']) && !isset($_POST['tc'])){

Cambia

Código PHP:
Ver original
  1. if(isset($_POST['tc'])){

Por

Código PHP:
Ver original
  1. if(isset($_POST['cia']) && isset($_POST['tc']) && !isset($_POST['bco'])){

Cambia

Código PHP:
Ver original
  1. if(isset($_POST['bco'])){

Por

Código PHP:
Ver original
  1. if(isset($_POST['cia']) && isset($_POST['tc']) && isset($_POST['bco'])){

Mira la logica del aplicativo. Como te dije el ultimo SELECT no te va a funcionar pero si haces funcionar los 3 primeros tendrás las pistas suficientes para hacer funcionar el 4

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.

Última edición por jonni09lo; 23/01/2014 a las 10:06
  #13 (permalink)  
Antiguo 23/01/2014, 10:59
 
Fecha de Ingreso: octubre-2013
Mensajes: 56
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Problema con select anidados

Exclente sos un genio.
hasta el sect 3 esta OK. y con las pistas que tengo creo que puedo sacar el 4.

Muchisimas, pero muchisimas gracias

Etiquetas: anidados, html, mysql, registro, select, sql, tabla
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 03:07.