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:
Este es es el script de actualización.Ver original
<?php /*hacemos la conexion a la base de datos*/ include("conexion.php"); /*Id del registro*/ $spacc_id = $_REQUEST["spaccasi"]; /*Conectamos a la tabla para obtener los registros*/ $Qury_asistencia="SELECT * FROM asistencia$spacc_id"; $asistencia_resultado=$mysqli->query($Qury_asistencia); /*con el if revisamos si hay resultado*/ /*Si en el caso no hay resultado imprimimos el error*/ echo "error"; }else{ /* De lo contrario continuamos con nuestro script y obtenemos el nombre de todas las columnas de la tabla asistencia*/ $Qury_columnas="SELECT * FROM asistencia$spacc_id"; $resultado_columna=$mysqli->query($Qury_columnas); $nombre_columna = $resultado_columna->fetch_fields(); $resultado_columna->free(); /*Nuestro codigo para form*/ echo "<form class=\"form\" method=\"post\" action=\"lmgUpdate.php?spaccasi=$spacc_id\" enctype=\"multipart/form-data\" autocomplete=\"on\">"; /*Con while imprimos los resultados de la tabla asistencia*/ while($AsistenciaPrint=$asistencia_resultado->fetch_array()){ echo "<div class=\"Spacc-rs\">"; /*Usamos foreach para imprimir cada una de las columnas de la tabla. Note que while imprimira todos los registros de la tabla mientras que foreach imprimira las columnas*/ foreach($nombre_columna as $c=>$v){ /*aquí con $count lo que hago es sumar 0+1 para que la cuenta empieze de 1 y no en el 0*/ $count = $c+1; /*Aquí con if lo que hago es revisar si el nombre de la columna que esta imprimiendo foreach es el id del registro, de ser asi uso un input de tipo hidden para evitar que que el id se imprima y pueda ser modificado si en caso de que la columna a ser imprimida no es igual idasis entonces uso un input de tipo txt*/ if($v->name === "idasis"){ echo "<div>"; echo $AsistenciaPrint[$v->name]; /*Aqui con .$v->name.$count.$AsistenciaPrint["idasis"]. lo que hago es imprimir el nombre de la columna al mismo tiempo le agrego 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 todas las columnas de la tabla con el mismo valor, el problema surge cuando intentamos hacer una actualizacion en la tabla no sabra 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 una diferente valor ejemplo cuando se imprima idasis al imprimirse se imprimiria así idasis11 en ves de un simple idasis 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 declarando $AsistenciaPrint["idasis"] solo que el nombre de la columna lo esta imprimiendo foreach*/ echo "<input type=\"hidden\" name=\"".$v->name.$count.$AsistenciaPrint["idasis"]."\" value=\"".$AsistenciaPrint[$v->name]."\">"; echo "</div>"; }else{ echo "<div>"; echo "<input type=\"text\" name=\"".$v->name.$count.$AsistenciaPrint["idasis"]."\" value=\"".$AsistenciaPrint[$v->name]."\">"; echo "</div>"; } } echo "</div>"; } echo "<button>Send</button>"; echo "</form>"; } /*Cerramos la conexion*/ ?>
Código PHP:
Como nota: No soy un experto en php así que lamento si algo esta mal y lamento la mala Ver original
<?php /*Conectamos a la base de datos*/ include ("conexion.php"); /*El id del registro*/ $spaccidasi = $_REQUEST["spaccasi"]; /*Conectamos para obtener todos los ids de la tabla*/ $QuryLmg="SELECT * FROM asistencia$spaccidasi"; $rsLmg=$mysqli->query($QuryLmg); /* revisamos si existe algun resultado de la tabla asistencia */ /*Si en caso de no exista imprimimos el error*/ echo "error"; }else{ /*De lo contrario si existe algun resultado entonces continuamos con nuestro script*/ /*obtenemos el nombre de todas las columnas de la tabla*/ $Qury_columnas="SELECT * FROM asistencia$spaccidasi"; $resultado_columnas=$mysqli->query($Qury_columnas); $columnas_nombre = $resultado_columnas->fetch_fields(); $resultado_columnas->free(); /*-----*/ /*En este caso while solo ocupa imprimir el id de los registros en la tabla. Como mencione al principio ocupamos el id para sumar los valores pero en este caso lo ocupamos tambien en el numero del id para actualizar los registros*/ while($LmgPrint=$rsLmg->fetch_array()){ /*Imprimimos el resultado de los nombres de las columnas de la tabla*/ foreach($columnas_nombre as $c=>$v){ /*de nuevo sumamos el resultado de $c*/ $count = $c+1; /*Ensamblamos el id, el nombre, y la cuenta hecha en $c*/ /*En $Datos obtengo el id del registro*/ /*En $Cuenta obtengo el nombre de la columna y la misma vez le agrego el valor de $count*/ /*En total junto todo*/ $Datos = $LmgPrint["idasis"]; $Cuenta = $v->name.$count; $SystemTotal = $Cuenta.$Datos; /*Aquí en esta parte se genera todos los campos para obtener el $_POST*/ /*Dado que se encuentra en un foreach, este se encargara de generar todo el valor para $_POST para cada campo*/ $SystemTotal = $_POST["$SystemTotal"]; /*Creamos las lineas necesarias para remplasar los datos obtenidos en el post*/ /*Esta parte es opcional dado que en mi caso necesito remplazar cada valor obtenido en los campos enviados des el formulario esta parte puede elimarse y saltarse directamente a la insercion de datos en la tabla*/ $v1[0] = '/A|a/'; $v1[1] = '/B|b/'; $v1[2] = '/C|c/'; $v1[3] = '/D|d/'; $v1[4] = '/E|e/'; $v1[5] = '/F|f/'; $v1[6] = '/G|g/'; $sustitucion[0] = '✓'; $sustitucion[1] = 'X'; $sustitucion[2] = 'cog'; $sustitucion[3] = 'vcn'; $sustitucion[4] = 'cld'; $sustitucion[5] = 'rto'; $sustitucion[6] = 'n/o'; /*Remplasamos los datos*/ /*Despues de remplasar los datos generamos los datos necesarios para la insersion de datos en la base de datos*/ /*En $v->name imprimimos el nombre de la columna*/ $sql = "UPDATE `asistencia$spaccidasi` SET `".$v->name."` = '".mysqli_real_escape_string($mysqli, "$SystemTotal")."' WHERE idasis =".$LmgPrint["idasis"]; /*Revisamos si todo fue correctamente hecho */ $mysqli->query($sql); } } if($mysqli->query($sql)){ /*Si todo esta bien*/ echo "Update complete"; }else{ /*De lo contrario si hay un error*/ echo "Error, please try again"; } } /*Cerramos la conexion*/ ?>