Cargar dos combos dependientes PHP y Postgres

indiraDeveloper26 8 Publicaciones jueves, 22 de febrero de 2018Fecha de inscripción jueves, 8 de marzo de 2018 Última intervención - 22 feb 2018 a las 19:06
Amigos, 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!
Ver más