Foros del Web » Programando para Internet » PHP »

PHP OO Obtener nombre de columnas

Estas en el tema de Obtener nombre de columnas en el foro de PHP en Foros del Web. Queridos amigos quería compartir con ustedes un pequeño script de php que he creado. Es un script que obtiene los nombres de las columnas de ...
  #1 (permalink)  
Antiguo 29/06/2017, 22:48
 
Fecha de Ingreso: marzo-2016
Mensajes: 2
Antigüedad: 8 años, 1 mes
Puntos: 0
Obtener nombre de columnas

Queridos amigos quería compartir con ustedes un pequeño script de php que he creado.
Es un script que obtiene los nombres de las columnas de una tabla en la base de datos y lo que hace que si en caso cambias el nombre de la columna en tu tabla no necesitaras cambiarlo en tu script.
Espero que a alguien no le sirva, solo quería contribuir en algo (aun que no si sea la mejor forma)
Espero sus opiniones.
este es el script del formulario:
Código PHP:
Ver original
  1. <?php
  2. /*hacemos la conexion a la base de datos*/
  3. include("conexion.php");
  4. /*Id del registro*/
  5.     $spacc_id = $_REQUEST["spaccasi"];
  6. /*Conectamos a la tabla para obtener los registros*/
  7.     $Qury_asistencia="SELECT * FROM asistencia$spacc_id";
  8.     $asistencia_resultado=$mysqli->query($Qury_asistencia);
  9. /*con el if revisamos si hay resultado*/
  10. if(empty($asistencia_resultado)){
  11.     /*Si en el caso no hay resultado imprimimos el error*/
  12.     echo "error";
  13. }else{
  14. /* De lo contrario continuamos con nuestro script y obtenemos el nombre de todas las columnas de la tabla asistencia*/
  15.     $Qury_columnas="SELECT * FROM asistencia$spacc_id";
  16.     $resultado_columna=$mysqli->query($Qury_columnas);
  17.     $nombre_columna = $resultado_columna->fetch_fields();
  18.     $resultado_columna->free();
  19. /*Nuestro codigo para form*/
  20. echo "<form class=\"form\" method=\"post\" action=\"lmgUpdate.php?spaccasi=$spacc_id\" enctype=\"multipart/form-data\" autocomplete=\"on\">";
  21. /*Con while imprimos los resultados de la tabla asistencia*/
  22.  while($AsistenciaPrint=$asistencia_resultado->fetch_array()){
  23. echo "<div class=\"Spacc-rs\">";
  24. /*Usamos foreach para imprimir cada una de las columnas de la tabla.
  25. Note que while imprimira todos los registros de la tabla mientras que
  26. foreach imprimira las columnas*/
  27. foreach($nombre_columna as $c=>$v){
  28. /*aquí con $count lo que hago es sumar 0+1 para que la cuenta empieze de 1 y no en el 0*/
  29. $count = $c+1;
  30. /*Aquí con if lo que hago es revisar si el nombre de la columna que esta imprimiendo foreach es el
  31. id del registro, de ser asi uso un input de tipo hidden para evitar que que el id se imprima y pueda ser modificado
  32. si en caso de que la columna a ser imprimida no es igual idasis entonces uso un input de tipo txt*/
  33. if($v->name === "idasis"){
  34. echo "<div>";
  35. echo $AsistenciaPrint[$v->name];
  36. /*Aqui con .$v->name.$count.$AsistenciaPrint["idasis"]. lo que hago es imprimir el nombre de la columna al mismo tiempo le agrego
  37. el valor de $count y al mismo tiempo le agrego el valor del id. La razón por que hago esto es que al ser foreach imprimira
  38. todas las columnas de la tabla con el mismo valor, el problema surge cuando  intentamos hacer una actualizacion en la tabla no sabra
  39. en donde insertar los datos, mientras que al agregar el nombre, la cuenta hecha en foreach y el id al sumar todo eso cada una recibe
  40. una diferente valor ejemplo cuando se imprima idasis al imprimirse se imprimiria así idasis11 en ves de un simple idasis
  41.  
  42. en value el código es así $AsistenciaPrint[$v->name] lo que hace $v->name es imprimir el nombre de la columna es como si estuvieramos
  43. declarando $AsistenciaPrint["idasis"] solo que el nombre de la columna lo esta imprimiendo foreach*/
  44. echo "<input type=\"hidden\" name=\"".$v->name.$count.$AsistenciaPrint["idasis"]."\" value=\"".$AsistenciaPrint[$v->name]."\">";
  45. echo "</div>";    
  46. }else{
  47. echo "<div>";
  48. echo "<input type=\"text\" name=\"".$v->name.$count.$AsistenciaPrint["idasis"]."\" value=\"".$AsistenciaPrint[$v->name]."\">";
  49. echo "</div>";  
  50. }
  51.  }
  52. echo "</div>";
  53. }
  54. echo "<button>Send</button>";
  55. echo "</form>";
  56. }
  57. /*Cerramos la conexion*/
  58. mysqli_close($mysqli);
  59. ?>
Este es es el script de actualización.
Código PHP:
Ver original
  1. <?php
  2. /*Conectamos a la base de datos*/
  3. include ("conexion.php");
  4. /*El id del registro*/
  5. $spaccidasi = $_REQUEST["spaccasi"];
  6. /*Conectamos para obtener todos los ids de la tabla*/
  7.     $QuryLmg="SELECT * FROM asistencia$spaccidasi";
  8.     $rsLmg=$mysqli->query($QuryLmg);
  9. /* revisamos si existe algun resultado de la tabla asistencia */
  10. if(empty($rsLmg)){
  11. /*Si en caso de no exista imprimimos el error*/
  12. echo "error";
  13. }else{
  14. /*De lo contrario si existe algun resultado entonces continuamos con nuestro script*/
  15. /*obtenemos el nombre de todas las columnas de la tabla*/
  16.     $Qury_columnas="SELECT * FROM asistencia$spaccidasi";
  17.     $resultado_columnas=$mysqli->query($Qury_columnas);
  18.     $columnas_nombre = $resultado_columnas->fetch_fields();
  19.     $resultado_columnas->free();
  20. /*-----*/
  21. /*En este caso while solo ocupa imprimir el id de los registros en la tabla.
  22. Como mencione al principio ocupamos el id para sumar los valores pero en este caso lo ocupamos tambien
  23. en el numero del id para actualizar los registros*/
  24. while($LmgPrint=$rsLmg->fetch_array()){
  25. /*Imprimimos el resultado de los nombres de las columnas de la tabla*/
  26. foreach($columnas_nombre as $c=>$v){
  27. /*de nuevo sumamos el resultado de $c*/
  28. $count = $c+1;
  29. /*Ensamblamos el id, el nombre, y la cuenta hecha en $c*/
  30. /*En $Datos obtengo el id del registro*/
  31. /*En $Cuenta obtengo el nombre de la columna y la misma vez le agrego el valor de $count*/
  32. /*En total junto todo*/
  33. $Datos = $LmgPrint["idasis"];
  34. $Cuenta = $v->name.$count;
  35. $SystemTotal = $Cuenta.$Datos;
  36. /*Aquí en esta parte se genera todos los campos para obtener el $_POST*/
  37. /*Dado que se encuentra en un foreach, este se encargara de generar todo el valor para $_POST para cada campo*/
  38. $SystemTotal = $_POST["$SystemTotal"];
  39. /*Creamos las lineas necesarias para remplasar los datos obtenidos en el post*/
  40. /*Esta parte es opcional dado que en mi caso necesito remplazar cada valor obtenido en los campos enviados des el formulario
  41. esta parte puede elimarse y saltarse directamente a la insercion de datos en la tabla*/
  42. $v1[0] = '/A|a/';
  43. $v1[1] = '/B|b/';
  44. $v1[2] = '/C|c/';
  45. $v1[3] = '/D|d/';
  46. $v1[4] = '/E|e/';
  47. $v1[5] = '/F|f/';
  48. $v1[6] = '/G|g/';
  49. $sustitucion[0] = '✓';
  50. $sustitucion[1] = 'X';
  51. $sustitucion[2] = 'cog';
  52. $sustitucion[3] = 'vcn';
  53. $sustitucion[4] = 'cld';
  54. $sustitucion[5] = 'rto';
  55. $sustitucion[6] = 'n/o';
  56. /*Remplasamos los datos*/
  57. $SystemTotal = preg_replace($v1, $sustitucion, $SystemTotal);
  58. /*Despues de remplasar los datos generamos los datos necesarios para la insersion de datos en la base de datos*/
  59. /*En $v->name imprimimos el nombre de la columna*/
  60. $sql  = "UPDATE `asistencia$spaccidasi` SET `".$v->name."` = '".mysqli_real_escape_string($mysqli, "$SystemTotal")."' WHERE idasis =".$LmgPrint["idasis"];
  61. /*Revisamos si todo fue correctamente hecho */
  62. $mysqli->query($sql);
  63.  }
  64. }
  65. if($mysqli->query($sql)){
  66. /*Si todo esta bien*/
  67.     echo "Update complete";
  68. }else{
  69. /*De lo contrario si hay un error*/
  70.     echo "Error, please try again";
  71. }
  72. }
  73. /*Cerramos la conexion*/
  74. mysqli_close($mysqli);
  75. ?>
Como nota: No soy un experto en php así que lamento si algo esta mal y lamento la mala

Etiquetas: columnas, formulario, mysql, nombre, 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 01:55.