Comunidad de diseño web y desarrollo en internet online

Problema al cargar dos combos dependientes

Citar            
MensajeEscrito el 22 Feb 2018 05:13 pm
Amigos, estoy teniendo problemas al cargar dos combos dependientes, estoy trabajando con PHP y Postgres.

MI BD esta compuesta de la siguiente forma:

    TABLA CATEGORIAS
    id_categoria
    nombreCategoria
    TABLA REZAGO
    c_rezago
    nombre_rezago
    id_categoria


Lo que necesito es lo siguiente:
Cargar un primer combo que muestra las CATEGORIAS de mi BD cuando se de clic en un elemento, que se carguen los elementos de REZAGO que perteneces a ese id_categoría.

MI CODIGO ES EL SIGUIENTE

Código PHP :

<?php
//***** combos_combinados.php *****//
  
 $host = "localhost";
$dbname = "ejemplo";
$user = "postgres";
$pw = "admin";
$port = "5432";

$packedString = "host=" . $host . " dbname=" . $dbname . " user=" . $user . " password=" . $pw . " port=" . $port;


$db = pg_connect("$packedString")or die('Could not connect: ' . pg_last_error());

if(1){}
?>
<html>
  <head>

    <script language="javascript">
      // Función que rellena el segundo combo según el valor seleccionado en el primero.
      // Se le pasa como parámetro el nombre del formulario desde el cuál se llama a la función,
      // de ésta manera podemos llamarlo desde combos con el mismo nombre en una misma página pero
      // desde distintos formularios
      function rellenaCombo(formulario)
      {
        with (document.forms[formulario])  // Establecemos por defecto el nombre formulario pasado para toda la función.
        {
          var cat = id_categoria[id_categoria.selectedIndex].value; // Valor seleccionado en el primer combo.
          var n = c_rezago.length;  // Numero de líneas del segundo combo.
 
          c_rezago.disabled = false;  // Activamos el segundo combo.
 
          for (var i = 0; i < n; ++i)
            c_rezago.remove(c_rezago.options[i]); // Eliminamos todas las líneas del segundo combo.
 
          c_rezago[0] = new Option("Seleccione rezago o categoria", 'null'); // Creamos la primera línea del segundo combo.
 
          if (cat != 'null')  // Si el valor del primer combo es distinto de 'null'.
          {
   <?php
   // CODIGO PHP
    // Para cada categoria, construimos el segundo combo con los rezago del mismo.
    $cons_cat = @pg_exec($db, "SELECT * FROM categorias;");
 
    for ($l = 0; $l < pg_numrows($cons_cat); ++$l)
    {
     $cen = @pg_fetch_object($cons_cat, $l);
   ?>
            if (cat == '<?php echo $cat->id_categoria;?>')
            {
    <?php
    // CODIGO PHP
      // Construimos los valores del segundo combo con los rezagos de categorias
      $cons_rez = @pg_exec($db, "SELECT * FROM rezago WHERE id_categoria = ".$cat->id_categoria." ORDER BY nombreCategoria;");
 
      for ($m = 0; $m < pg_numrows($cons_rez); ++$m)
      {
       $rez = @pg_fetch_object($cons_rez, $m);
    ?>
              c_rezago[c_rezago.length] = new Option("<?php echo $rez->nombre_rezago;?>", '<?php echo $rez->id_categoria;?>');
    <?php
    // CODIGO PHP
      }
    ?>
            }
   <?php
   // CODIGO PHP
    }
   ?>
            c_rezago.focus();  // Enviamos el foco al segundo combo.
          }
          else  // El valor del primer combo es 'null'.
          {
            c_rezago.disabled = true;  // Desactivamos el segundo combo (que estará vacío).
            id_categoria.focus();  // Enviamos el foco al primer combo.
          }
 
          c_rezago.selectedIndex = 0;  // Seleccionamos el primer valor del segundo combo ('null').
        }
      }
    </script>
  </head>
  <body>
    <table>
      <tr>
        <td>
        <form name="datos" method="post" action="...">

            <select name="id_categoria" onChange="rellenaCombo('datos');">
              <option value="null" selected>Seleccione tipo de rezago o categoria
<?php
// CODIGO PHP
 // Contruimos el primer combo con los valores de la tabla 'categorias'.
 $cons_cat = @pg_exec($db, "SELECT * FROM categorias;");
 
 for ($k = 0; $k < pg_numrows($cons_cat); ++$k)
 {
  $cat = @pg_fetch_object($cons_cat, $k);
  echo "              <option value=\"".$cat->id_categoria."\">".$cat->nombreCategoria."\n";
 }
?>
          </select>
        </td>
        <td>
          <select name="c_rezago" disabled>
            <option value="null">Seleccione rezago o categoria: 
          </select>
        </td>
        </form>

      </tr>

    </table>
  </body>
</html>


EL PROBLEMA ES QUE SOLO ME CARGAN LOS ELEMENTOS DEL PRIMER COMBO PERO NO ME CARGA LOS DEL SEGUNDO AL DAR CLIC
De antemano muchas gracias!

Por indira26

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 04 Abr 2018 11:18 pm
parece que todo esta correctamente, , en todo caso, primero lo
1 revisa si el navegador te retorna algun error , de tipo javascript,
2 quita los @ del codigo php, ese simbolo lo que indica es que suprime cualquier error o advertencia, cosa que solo debe usarse cuando el sistema este 100% probado y funcional


como recomendacion, es mejor separar las cosas, y no mesclarlas, php se ejecuta primero ya que es del lado del servidor, y javascript se ejecuta en el lado del cliente ,es lo ultimo que se ejecuta, para intercambiar informacion de PHP a javascript usa, json_encode

en todo caso, mira el resultado que te da, cuando pongas una opcion, fijate "CODIGO FUENTE " del navegador, para que veas como se genero todo,,

vee este video para usar la consola del navegador web

https://www.youtube.com/watch?v=JRj3h79pxw4

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 05 Abr 2018 09:57 am
Pues sinceramente es raro que todavía te siga sin ir...

Por pedroantoniotop

1 de clabLevel



Genero:Masculino  

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.