jueves, 16 de julio de 2020

Cargar datos en una lista desplegable con PHP

Supongamos que queremos agregar un registro a una tabla que se relaciona mediante una clave foránea con otra, solo requiere que se le ingrese el código o id, pero colocar ello en una caja de texto es incómodo, lo ideal sería desplegar en una lista desplegable vertical los registros de la tabla cuyo identificador o código queremos mostrar. Ilustremos ello con un ejemplo:


Sin lista desplegable Con lista desplegable

Agregar datos







Agregar datos








Trabajaremos con las siguientes tablas:




Ahora vamos a crear ese formulario donde se puedan cargar los datos de "inquilinos" y enviar el "id" a través de un formulario web. Este ejemplo no emplea programación orientada a objetos y nos limitamos a enviar la información.

Creamos el formulario en el archivo"pagoIns.php"
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <form class="jpcss" method="post" action="agregar_pago.php">
  9. <fieldset>
  10. <legend>INGRESAR ABONO</legend><br>
  11. Ingrese al aportante: <select name="personas">
  12. <!--Aquí ira el código PHP-->
  13. </select><br><br>
  14. Ingrese el importe: S/
  15. <input type="number" name="importe" min="0.01" step="0.01" value="0.01"><br>
  16. <br><br>
  17. <button onclick="return confirm('¿Seguro que deseas ingresar el pago?')">
  18. INGRESAR
  19. </button>
  20. </fieldset>
  21. </form>
  22. </body>
  23. </html>

Ahora vamos a realizar tanto la conexión como la consulta SQL en código PHP
  1. <?php
  2. #Parámetros de la BD
  3. $cfg['h'] = 'localhost'; #hostname
  4. $cfg['u'] = 'root'; #usuario
  5. $cfg['p'] = ''; #contraseña (password)
  6. $cfg['b'] = 'blog'; #base de datos
  7. $cfg['r'] = '3306'; #puerto
  8. #Conexión
  9. $cnx = mysqli_connect($cfg['h'], $cfg['u'], $cfg['p'], $cfg['b'], $cfg['r']);
  10. mysqli_query($cnx, "set names utf8");
  11. #Consulta SQL
  12. $sql = "SELECT idinquilinos id, "
  13. . "CONCAT_WS (' ',nombres,paterno,materno) "
  14. . "datos FROM inquilinos;";
  15. #Capturando los datos
  16. $bolsa = mysqli_query($cnx, $sql);
  17. $salida = array();
  18. if ($bolsa != null) {
  19. while ($row = mysqli_fetch_assoc($bolsa)) {
  20. $salida[] = $row;
  21. }
  22. mysqli_free_result($bolsa);
  23. } else {
  24. $salida = false;
  25. }
  26. unset($row);
  27. ?>

Ese código lo colocaremos al inicio de la siguiente forma. Agregando el código que muestra los datos en la lista desplegable.
  1. <?php
  2. #Parámetros de la BD
  3. $cfg['h'] = 'localhost'; #hostname
  4. $cfg['u'] = 'root'; #usuario
  5. $cfg['p'] = ''; #contraseña (password)
  6. $cfg['b'] = 'blog'; #base de datos
  7. $cfg['r'] = '3306'; #puerto
  8. #Conexión
  9. $cnx = mysqli_connect($cfg['h'], $cfg['u'], $cfg['p'], $cfg['b'], $cfg['r']);
  10. mysqli_query($cnx, "set names utf8");
  11. #Consulta SQL
  12. $sql = "SELECT idinquilinos id, "
  13. . "CONCAT_WS (' ',nombres,paterno,materno) "
  14. . "datos FROM inquilinos;";
  15. #Capturando los datos
  16. $bolsa = mysqli_query($cnx, $sql);
  17. $salida = array();
  18. if ($bolsa != null) {
  19. while ($row = mysqli_fetch_assoc($bolsa)) {
  20. $salida[] = $row;
  21. }
  22. mysqli_free_result($bolsa);
  23. } else {
  24. $salida = false;
  25. }
  26. unset($row);
  27. ?>
  28. <!DOCTYPE html>
  29. <html>
  30. <head>
  31. <meta charset="UTF-8">
  32. <title></title>
  33. </head>
  34. <body>
  35. <form class="jpcss" method="post" action="agregar_pago.php">
  36. <fieldset>
  37. <legend>INGRESAR ABONO</legend><br>
  38. Ingrese al aportante: <select name="personas">
  39. <!--Código PHP-->
  40. <?php
  41. if ($salida) {
  42. foreach ($salida as $persona) {
  43. ?>
  44. <option value="<?= $persona['id'] ?>">
  45. <?= $persona['datos'] ?>
  46. </option>
  47. <?php }
  48. }
  49. ?>
  50. </select><br><br>
  51. Ingrese el importe: S/
  52. <input type="number" name="importe" min="0.01" step="0.01" value="0.01"><br>
  53. <br><br>
  54. <button onclick="return confirm('¿Seguro que deseas ingresar el pago?')">
  55. INGRESAR
  56. </button>
  57. </fieldset>
  58. </form>
  59. </body>
  60. </html>

Entre las líneas 42 y 51 se aprecia el código que despliega los datos en la lista desplegable pudiendo obtener el efecto deseado. Se emplea antes del foreach un condicional, en caso la tabla se encuentre vacía u ocurra un error.