I am making a form where the user views several data that I already have stored in my database, and the same user can add several comments that have to be uploaded to the DB.
When I made the queries, I did them with a While
so that the table would be duplicated depending on the amount of data it had stored, it gave me many problems as with Foreach
. And I decided to do it record by record.
Here the other problem begins, when I did the queries (SELECT * FROM)
everything was fine, the data I wanted appeared in my HTML table, but when I wanted to insert the data added by the user, I got the following error:
Warning: Undefined array key "comments1"
Here is the code, if you can help me or if you know of a way to do it without using so much code:
<?php
include("conexion.php");
include("registrar.php");
?>
<!DOCTYPE html>
<html>
<head>
<title>AUDITORIA</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<form action="registrar.php" method="post">
<img src="secretariaDeSalud.jpg" height="150px" align="left">
<img src="LOGOnombre3.jpg" height="150px" align="right">
<div>
<h1><P align="center" style = "font-family: calibri"><b> Herramienta de auditoria de muestras HICPAC adaptada al INCMNSZ:
Reprocesamiento de endoscopios flexibles</b></P></h1>
<hr size="3px" color="black"/>
<div class="divmov">
<p style="font-family: calibri"><b>Persona Evaluada: </b>
<input type="text" name="evaluado" placeholder="Nombre">
<?php ?>
<p style="font-family: calibri"><b>Evaluador: </b>
<input type="text" name="evaluador1" placeholder="Auditor 1" size="30">
<input type="text" name="evaluador2" placeholder="Auditor 2" size="30">
<input type="text" name="evaluador3" placeholder="Auditor 3" size="30">
<?php
?>
</div>
<table align= "center" width="80%" border="1">
<tr>
<th width="50%"> Elementos de auditoría</th>
<th width="15%">Si/No/NA</th>
<th>Comentarios/Acción</th>
</tr>
<!---------------CONSULTAS EN LA TABLA----------------->
<tr>
<td><<?php echo $arr1['NomElementoPrinc']; ?></td>
</tr>
<tr>
<td><?php echo $array1['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si1" value="Si"> Si
<input type="radio" name="no1" value="No"> No
<input type="radio" name="na1" value="NA"> NA </td>
<td><input name="comentarios1" placeholder="Agrega Comentarios" type="text"></td>
</tr>
<tr>
<td><?php echo $array2['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si2" value="Si"> Si
<input type="radio" name="no2" value="No"> No
<input type="radio" name="na2" value="NA"> NA </td>
<td><input name="comentarios2" placeholder="Agrega Comentarios" type="text"></td>
</tr>
<tr>
<td><?php echo $array3['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si3" value="Si"> Si
<input type="radio" name="no3" value="No"> No
<input type="radio" name="na3" value="NA"> NA </td>
<td><input name="comentarios3" placeholder="Agrega Comentarios" type="text"></td>
</tr>
<tr>
<td><?php echo $array4['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si4" value="Si"> Si
<input type="radio" name="no4" value="No"> No
<input type="radio" name="na4" value="NA"> NA </td>
<td><input name="comentarios4" placeholder="Agrega Comentarios" type="text"></td>
</tr>
<tr>
<td><?php echo $array5['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si5" value="Si"> Si
<input type="radio" name="no5" value="No"> No
<input type="radio" name="na5" value="NA"> NA </td>
<td><input name="comentarios5" placeholder="Agrega Comentarios" type="text"></td>
</tr>
<tr>
<td><?php echo $array6['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si6" value="Si"> Si
<input type="radio" name="no6" value="No"> No
<input type="radio" name="na6" value="NA"> NA </td>
<td><input name="comentarios6" placeholder="Agrega Comentarios" type="text"></td>
</tr>
<tr>
<td><?php echo $array7['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si7" value="Si"> Si
<input type="radio" name="no7" value="No"> No
<input type="radio" name="na7" value="NA"> NA </td>
<td><input name="comentarios7" placeholder="Agrega Comentarios" type="text"></td>
</tr>
<tr>
<td><?php echo $array8['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si8" value="Si"> Si
<input type="radio" name="no8" value="No"> No
<input type="radio" name="na8" value="NA"> NA </td>
<td><input name="comentarios8" placeholder="Agrega Comentarios" type="text"></td>
</tr>
<tr>
<td><?php echo $array9['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si9" value="Si"> Si
<input type="radio" name="no9" value="No"> No
<input type="radio" name="na9" value="NA"> NA </td>
<td><input name="comentarios9" placeholder="Agrega Comentarios" type="text"></td>
</tr>
<tr>
<td><?php echo $array10['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si10" value="Si"> Si
<input type="radio" name="no10" value="No"> No
<input type="radio" name="na10" value="NA"> NA </td>
<td><input name="comentarios10" placeholder="Agrega Comentarios" type="text"></td>
</tr>
<tr>
<td><?php echo $array11['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si11" value="Si"> Si
<input type="radio" name="no11" value="No"> No
<input type="radio" name="na11" value="NA"> NA </td>
<td><input name="comentarios11" placeholder="Agrega Comentarios" type="text"></td>
</tr>
<tr>
<td><?php echo $array12['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si12" value="Si"> Si
<input type="radio" name="no12" value="No"> No
<input type="radio" name="na12" value="NA"> NA </td>
<td><input name="comentarios12" placeholder="Agrega Comentarios" type="text"></td>
</tr>
<tr>
<td><?php echo $array13['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si13" value="Si"> Si
<input type="radio" name="no13" value="No"> No
<input type="radio" name="na13" value="NA"> NA </td>
<td><input name="comentarios13" placeholder="Agrega Comentarios" type="text"></td>
</tr>
<tr>
<td><?php echo $array14['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si14" value="Si"> Si
<input type="radio" name="no14" value="No"> No
<input type="radio" name="na14" value="NA"> NA </td>
<td><input name="comentarios14" placeholder="Agrega Comentarios" type="text"></td>
</tr>
<tr>
<td><?php echo $array15['NombreElemento']; ?></td>
<td align ="center">
<input type="radio" name="si15" value="Si"> Si
<input type="radio" name="no15" value="No"> No
<input type="radio" name="na15" value="NA"> NA </td>
<td><input name="comentarios15" placeholder="Agrega Comentarios" type="text"></td>
</tr>
</table>
<div class="divtabla">
</div>
<div align="right">
<button class="button-43" name="boton" role="button"><b>ENVIAR</b></button>
</div>
</form>
</body>
</html>
PHP SECTION
<?php include("conexion.php");
//----------------Consultar Subelemetos--------------------------
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 1");
$array1 = mysqli_fetch_array($query);
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 2");
$array2 = mysqli_fetch_array($query);
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 3");
$array3 = mysqli_fetch_array($query);
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 4");
$array4 = mysqli_fetch_array($query);
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 5");
$array5 = mysqli_fetch_array($query);
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 6");
$array6 = mysqli_fetch_array($query);
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 7");
$array7 = mysqli_fetch_array($query);
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 8");
$array8 = mysqli_fetch_array($query);
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 9");
$array9 = mysqli_fetch_array($query);
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 10");
$array10 = mysqli_fetch_array($query);
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 11");
$array11 = mysqli_fetch_array($query);
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 12");
$array12 = mysqli_fetch_array($query);
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 13");
$array13 = mysqli_fetch_array($query);
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 14");
$array14 = mysqli_fetch_array($query);
$query = mysqli_query($conexion, "SELECT * FROM elementos WHERE idelementos = 15");
$array15 = mysqli_fetch_array($query);
//-------------------Inserta Comentarios------------------------------------
$comentario1 = $_POST['comentarios1'];
$consulta = "INSERT INTO comentarios(comentario) VALUES ('$comentario1')";
$result = mysqli_query($conexion, $consulta);
$comentario2 = $_POST['comentarios2'];
$consulta = "INSERT INTO comentarios(comentario) VALUES ('$comentario2')";
$result = mysqli_query($conexion, $consulta);
$comentario3 = $_POST['comentarios3'];
$consulta = "INSERT INTO comentarios(comentario) VALUES ('$comentario3')";
$result = mysqli_query($conexion, $consulta);
$comentario4 = $_POST['comentarios4'];
$consulta = "INSERT INTO comentarios(comentario) VALUES ('$comentario4')";
$result = mysqli_query($conexion, $consulta);
Here I leave your refactored code without so many repetitions (it is not tested, it may have small bugs):
Explanation
You repeat too many things, so I've tried to use loops that eliminate too much repetition.
To better understand these changes, let's start with how I generate a single array that contains all the id data you want to query:
I've done this:
where:
this way I get them all, sorted by id elements.
Nota: Se entiende que los idelementos son únicos, es decir, no se repiten, pues en caso contrario estariamos sobreescribiendolos y sólo permaneceria el último encontrado.
Una vez terminados los ciclos, el contenido de esa variable $array podría parecerse a esto:
Ahora que ya tenemos este array vamos a ponerlo en la tabla, y para ello lo podemos calcular previamente y almacenarlo en una variable, que en este caso he llamado
$salida_radios
, y lo he hecho de esta forma:donde
donde en cada ciclo, vamos a extraer su índice en la variable
$idelemento
y su contenido (que es otro array que contiene todos los datos de todas las columnas como ves más arriba) lo he llamados$datos
:Y ahora solo queda ir agregando contenido a la variable $salida_radios de este modo:
Fíjate que estoy usando el mismo name en cada ciclo, el cual queda compuesto por la palabra
radio_
más el número de índice ($idelemento) del registro recorrido en cada ciclo:Así es como deben ser los botones de radio que son autoexcluyentes entre sí, para que solo se envie un valor que se corresponderá con el seleccionado bajo el mismo name. En este caso los name se llamarán radio_1, radio_2, etc.
Tal como lo hacias tu estabas enviando siempre todas los name si1, no1, na1, si2, no2, na2, etc... y tendrias más problemas para saber cual de ellos ha sido seleccionado.
Por otra parte, fíjate como localizo y saco el valor de la columna NombreElemento de los datos en cada registro de cada ciclo:
En cuanto al campo comentarios, lo genero así en cada ciclo:
y así pasará a llamarse tal como lo tenias, es decir,
comentarios1
,comentarios2
, etc...Recuerda que todo eso se va almacenando en la variable $salida_radios, que como puedes ver he puesto en la tabla de este modo en el mismo lugar donde empezabas tu a poner todas esas repeticiones de botones de radio y comentarios:
(el conjunto de símbolos
<?=
es una abreviatura de<?php echo
, por lo tanto lo que estoy haciendo es unecho
de lo que contenga la variable $salida_radios que hemos rellenado antes, que son todas las filas de la tabla con los botones de radio y comentarios).Y ahora vamos con la inserción de comentarios, donde verás que he cambiado los cuatro que has puesto (imagino que habia más, hasta los 15 que parece que quieres poner) por esto:
donde lo que hago es evaluar cada dato recibido por POST y si su clave contiene la palabra
comentarios
:entonces hago la inserción en la base de datos dentro de la columna comentarios de la tabla comentarios:
Y con esto terminan los cambios para refactorizar tu código y que no sea tan costoso de mantener.
Aún así, volviendo al problema inicial, diría que el error de
undefined array key
viene por otros motivos, que pueden ser:el cual aparentemente, y basándome sólo en el código que has aportado en la pregunta no parece que haga el submit que se necesita para enviar el formulario con los datos, sino que seguramente simplemente te redirecciona a la página que hayas puesto en el form action sin enviar los datos.
Por lo tanto, lo he cambiado por uno del tipo submit que sí va a enviar los datos correctamente:
Y con eso ya estamos para darte una respuesta a tu pregunta.
Si has leído hasta aquí házmelo saber con un comentario, tengo curiosidad por ver cuanto rollo has sido capaz de soportar :-) Y si no te has leído todo esto vas a ignorar el porque de todos esos cambios y no vas a aprender nada nuevo, aunque saldrás del paso supongo.