Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/12/2013, 13:36
Avatar de boggiepopphantom
boggiepopphantom
 
Fecha de Ingreso: agosto-2012
Mensajes: 29
Antigüedad: 11 años, 8 meses
Puntos: 0
Guardar valores de formulario creado dinámicamente

Buen día a todos, de nuevo los molesto con la siguiente consulta:

Estoy con la siguiente idea: Tengo un formulario en el que se puede escoger una opción y, a partir de esa selección, creo un formulario que muestra todos los nombres relacionados con la selección, y al frente de cada nombre coloco dos campos: notas y fallas. Eso lo hago con el siguiente código:

Código PHP:
if(isset($_POST['buscar']))
    {
        
$curso=($_POST['curso']);
        
$l=$db_connect->query("SELECT users.tiu,users.apellidos,users.nombres,anual.tiu,anual.curso FROM users,anual WHERE users.tiu=anual.tiu && anual.curso='$curso' ORDER BY users.apellidos Asc");
        echo 
"<form action=\"inno.php\" method=\"post\">";
        echo 
"        <table width=\"600\" border=\"1\" align=\"center\">";
        echo 
"  <tr>";
        echo 
"    <th scope=\"col\" colspan=\"4\" align=\"center\">Estudiantes del grado ",$curso,"</th>";
        echo 
"  </tr>";
        echo 
" <tr>";
        echo 
"     <td align=\"center\">Id</td>";
        echo 
"     <td align=\"center\">Nombre</td>";
        echo 
"     <td align=\"center\">Fallas</td>";
        echo 
"     <td align=\"center\">Nota</td>";
        echo 
" </tr>";
        
$nf=$l->num_rows;
        for(
$i=0;$i<$nf;$i++)
            {
                
$posic=mysqli_data_seek($l,$i);
                
$fila=$l->fetch_row();
                echo 
" <tr>";
                echo 
"     <td>",$fila[0],"</td>";
                echo 
"     <td>",$fila[1]," ",$fila[2],"</td>";
                echo 
"     <td align=\"center\"><input name=\"falla[]\" type=\"text\" size=\"4\" maxlength=\"4\" /></td>";
                echo 
"     <td align=\"center\"><input name=\"nota[]\" type=\"text\" size=\"4\" maxlength=\"4\" /></td>";
                echo 
" </tr>";
            }
        echo 
"    <th scope=\"col\" colspan=\"4\" align=\"center\"><input type=\"submit\" name=\"suno\" value=\"Subir Notas\"></th>";
        echo 
"</table>";
        echo 
"</form>"
Eso genera formularios con tablas que tienen por lo menos 25 filas. La idea es que, al generarse el anterior formulario, el usuario digitará un valor para fallas y uno para notas para cada una de las filas.

Hasta ahí, sin problemas.

El asunto con el que no he podido es el siguiente: Cuando el usuario presiona el botón "subir notas", pretendo que se ejecute el siguiente código:

Código PHP:
if(isset($_POST['suno']))
            {
                for(
$i=0;$i<$nf;$i++)
                    {
                        
$posic=mysqli_data_seek($l,$i);
                        
$fi=$l->fetch_row();
                        
$nota[$i]=($_POST['nota']);
                        
$fallas[$i]=($_POST['falla']);
                        
$inno=$db_connect->query("INSERT INTO notas (idnot,tiu,doc,fallas,retardos,nota,code1,code2) VALUES (NULL,'$fi[0]',Boggiepopphantom,'$fallas[$i]',0,'$nota[$i]',123,123)");
                    }
            } 
Código en el que sigo la sugerencia encontrada en este tema

http://www.forosdelweb.com/f18/guardar-valor-formulario-arreglo-php-976392/

Sin embargo, no me inserta los valores en la tabla. ¿Podrían por favor indicarme qué estoy haciendo mal?

------------------------------------------------------------------------------------

Intenté también con el siguiente código a ver si daba con el asunto, pero no me funcionó: Creo el formulario dándole nombres a los campos usando el contador del ciclo for

Código PHP:
if(isset($_POST['buscar']))
    {
        
$curso=($_POST['curso']);
        
$asig=($_POST['asig']);
        
$bim=($_POST['bim']);
        
$l=$db_connect->query("SELECT users.tiu,users.apellidos,users.nombres,anual.tiu,anual.curso FROM users,anual WHERE users.tiu=anual.tiu && anual.curso='$curso' ORDER BY users.apellidos Asc");
        echo 
"<form action=\"inno.php\" method=\"post\">";
        echo 
"        <table width=\"600\" border=\"1\" align=\"center\">";
        echo 
"  <tr>";
        echo 
"    <th scope=\"col\" colspan=\"4\" align=\"center\">Estudiantes del grado ",$curso,"</th>";
        echo 
"  </tr>";
        echo 
" <tr>";
        echo 
"     <td align=\"center\">Id</td>";
        echo 
"     <td align=\"center\">Nombre</td>";
        echo 
"     <td align=\"center\">Fallas</td>";
        echo 
"     <td align=\"center\">Nota</td>";
        echo 
" </tr>";
        
$nf=$l->num_rows;
        for(
$i=0;$i<$nf;$i++)
            {
                
$posic=mysqli_data_seek($l,$i);
                
$fila=$l->fetch_row();
                echo 
" <tr>";
                echo 
"     <td>",$fila[0],"</td>";
                echo 
"     <td>",$fila[1]," ",$fila[2],"</td>";
                echo 
"     <td align=\"center\"><input name=\"",$i,"\" type=\"text\" size=\"4\" maxlength=\"4\" /></td>";
                echo 
"     <td align=\"center\"><input name=\"",$i+100,"\" type=\"text\" size=\"4\" maxlength=\"4\" /></td>";
                echo 
" </tr>";
            }
        echo 
"    <th scope=\"col\" colspan=\"4\" align=\"center\"><input type=\"submit\" name=\"suno\" value=\"Subir Notas\"></th>";
        echo 
"</table>";
        echo 
"</form>"
Y luego recojo los valores de la siguiente manera:

Código PHP:
        if(isset($_POST['suno']))
            {
                for(
$i=0;$i<$nf;$i++)
                    {
                        
$posic=mysqli_data_seek($l,$i);
                        
$fi=$l->fetch_row();
                        
$nota[$i]=($_POST[$i]);
                        
$fallas[$i]=($_POST[$i+100]);
                        
$inno=$db_connect->query("INSERT INTO notas (idnot,tiu,doc,fallas,retardos,nota,code1,code2) VALUES (NULL,'$fi[0]',Boggiepopphantom,'$fallas[$i]',0,'$nota[$i]',123,123)");
                    }
            } 
Pensé que me serviría, pero tampoco, no se si es que hay problema con que a los imput se les nombre usando números; cuando veo el código fuente de la página en mi navegador, me muestra que los input text quedan nombrados con los números dados por el contador. ¿Alguna idea?

De antemano, muchas gracias.