Ver Mensaje Individual
  #15 (permalink)  
Antiguo 18/01/2016, 12:33
byrong
 
Fecha de Ingreso: enero-2016
Ubicación: Venezuela
Mensajes: 139
Antigüedad: 8 años, 3 meses
Puntos: 3
Respuesta: Botón submit para selects anidados

Cita:
Iniciado por Alexis88 Ver Mensaje
Si los <select> cargarán la información de manera dinámica, es decir, elegirás una opción del primer <select> y luego tendrán que cargar opciones relacionadas a dicha opción pero en el segundo <select> y la misma situación será con el segundo y tercer <select>, puedes hacer lo que explicaré a continuación.
Un saludo
Primero que nada gracias.
Amigo los selects me funcionan de manera perfecta como mostré en la imagen que comente en este post, use este código javascript(esto se encuentra dentro del index.php entre [inline]<script></script>
Código Javascript:
Ver original
  1. $("#estado").on("change", buscarMunicipios);
  2. $("#municipio").on("change", buscarLocalidades);
  3.  
  4. function buscarMunicipios(){
  5.     $("#localidad").html("<option value=''>Seleccione una Localidad</option>");
  6.    
  7.     $estado = $("#estado").val();
  8.    
  9.     if($estado == ""){
  10.             $("#municipio").html("<option value=''>Seleccione un Estado</option>");
  11.     }
  12.     else {
  13.         $.ajax({
  14.             dataType: "json",
  15.             data: {"estado": $estado},
  16.             url:   'include/buscar.php',
  17.             type:  'post',
  18.             beforeSend: function(){
  19.                 //Lo que se hace antes de enviar el formulario
  20.                 },
  21.             success: function(respuesta){
  22.                 //lo que se si el destino devuelve algo
  23.                 $("#municipio").html(respuesta.html);
  24.             },
  25.             error:  function(xhr,err){
  26.                 alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\n \n responseText: "+xhr.responseText);
  27.             }
  28.         });
  29.     }
  30. }
  31.  
  32. function buscarLocalidades(){
  33.     $municipio = $("#municipio").val();
  34.    
  35.     $.ajax({
  36.         dataType: "json",
  37.         data: {"municipio": $municipio},
  38.         url:   'include/buscar.php',
  39.         type:  'post',
  40.         beforeSend: function(){
  41.             //Lo que se hace antes de enviar el formulario
  42.             },
  43.         success: function(respuesta){
  44.             //lo que se si el destino devuelve algo
  45.             $("#localidad").html(respuesta.html);
  46.         },
  47.         error:  function(xhr,err){
  48.             alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\n \n responseText: "+xhr.responseText);
  49.         }
  50.     });
  51. }

en otro archivo llamado buscar.php tengo esto:
Código PHP:
<?php
require_once("funciones.php");

if(isset(
$_POST['estado'])){
    
    
$municipios dameMunicipio($_POST['estado']);
    
    
$html "<option value=''>Seleccione un Municipio</option>";
    foreach(
$municipios as $indice => $registro){
        
$html .= "<option value='".$registro['idmunicipio']."'>".$registro['nombremunicipio']."</option>";
    }
    
    
$respuesta = array("html"=>$html);
    echo 
json_encode($respuesta);
}

if(isset(
$_POST['municipio'])){
    
    
$localidadesdameLocalidad($_POST['municipio']);
    
    
$html "<option value=''>Seleccione una Localidad</option>";
    foreach(
$localidades as $indice => $registro){
        
$html .= "<option value='".$registro['idlocalidad']."'>".$registro['nombrelocalidad']."</option>";
    }
    
    
$respuesta = array("html"=>$html);
    echo 
json_encode($respuesta);
}

    if(isset(
$_POST['categoria'])){
        
$categorias dameCategoria($_POST['categoria']);

        
$html "<option value=''>Seleccione su busqueda</option>";
        foreach (
$categorias as $indice => $registro) {
            
$html .= "<option value='".$registro['idcategoria']."'>".$registro['nombrecategoria']."</option>";
        }
        
        
$respuesta = array("html"=>$html);
    echo 
json_encode($respuesta);

    }
?>
y en otro llamado funciones.php tengo esto:

Código PHP:
<?php


/* Archivo para funciones */

function conectaBaseDatos(){
    try{
        
$servidor "xxx";
        
$puerto "xxx";
        
$basedatos "xxx";
        
$usuario "xxx";
        
$contrasena "xxx";
    
        
$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 
dameEstado(){
    
$resultado false;
    
$consulta "SELECT * FROM estados";
    
    
$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 
dameMunicipio($estado ''){
    
$resultado false;
    
$consulta "SELECT * FROM municipios";
    
    if(
$estado != ''){
        
$consulta .= " WHERE idestado = :nombreestado";
    }
    
    
$conexion conectaBaseDatos();
    
$sentencia $conexion->prepare($consulta);
    
$sentencia->bindParam('nombreestado',$estado);
    
    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 
dameLocalidad($municipio ''){
    
$resultado false;
    
$consulta "SELECT * FROM localidades";
    
    if(
$municipio != ''){
        
$consulta .= " WHERE idmunicipio = :nombremunicipio";
    }
    
    
$conexion conectaBaseDatos();
    
$sentencia $conexion->prepare($consulta);
    
$sentencia->bindParam('nombremunicipio',$municipio);
    
    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 
dameCategoria(){
        
$resultado false;
        
$consulta "SELECT * FROM categorias";

        
$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;
}


?>
Bueno la verdad esto me funciona perfectamente para lo que ya hable de los selects que al momento de seleccionar un estado cambia de inmediato, me pregunto si eso que me mandaste hay alguna manera de adaptarlo a este código ya que pues como ves ya lo tengo listo y eso que me mandaste pues tengo que ponerme a estudiar AJAX porque no entendí practicamente casi nada, entonces ¿Habría alguna manera de adaptar eso que me mandaste a este para que pueda redirigirme a http://localhost/estados/trujillo/valera (tomo como ejemplo tomo esa url), se podría hacer o crees que es mejor hacerlo como tu dijiste?
Mil gracias por responder y por explicarme eso.

Última edición por byrong; 18/01/2016 a las 12:35 Razón: Error en la url de trujillo