Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Guardar valores de formulario creado dinámicamente

Estas en el tema de Guardar valores de formulario creado dinámicamente en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 20/12/2013, 13:36
Avatar de 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.
  #2 (permalink)  
Antiguo 20/12/2013, 19:27
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Guardar valores de formulario creado dinámicamente

Código PHP:
Ver original
  1. if(isset($_POST['suno']))
  2.             {
  3.                 for($i=0;$i<$nf;$i++)
  4.                     {
  5.                         $posic=mysqli_data_seek($l,$i); // WTF???
  6.                         $fi=$l->fetch_row(); // WTF??
  7.                         $nota[$i]=($_POST[$i]); // WTF??
  8.                         $fallas[$i]=($_POST[$i+100]); // WTF??
  9.                         $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)"); // mmm // WTF??
  10.                     }
  11.             }

Código PHP:
Ver original
  1. echo(var_dump($_POST));
agrega eso al inicio del script y te vas a dar cuenta como vienen los datos
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #3 (permalink)  
Antiguo 21/12/2013, 10:22
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Guardar valores de formulario creado dinámicamente

me parece que tendrias que usar javascript para hacer select dependientes vdd
__________________
clasificados nunca se sabe todo
  #4 (permalink)  
Antiguo 21/12/2013, 11:48
Avatar de boggiepopphantom  
Fecha de Ingreso: agosto-2012
Mensajes: 29
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Guardar valores de formulario creado dinámicamente

alexpedraza, de momento no conzco mucho sobre javascript, es algo que por el momento estoy aprendiendo, pero lo tengo en mi lista de manuales por leer, muchas gracias por tu respuesta.

De nuevo, muchas gracias!
  #5 (permalink)  
Antiguo 21/12/2013, 11:51
Avatar de boggiepopphantom  
Fecha de Ingreso: agosto-2012
Mensajes: 29
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Guardar valores de formulario creado dinámicamente

NSD, muchas gracias por tu respuesta. Cuando mencionas al inicio del script, ¿te refieres a la parte que citaste primero en tu respuesta?

Buscando en la matrix había leído algo del var_dump, pero la verdad no me quedó claro como funciona. Voy a probar y te comento cómo me fue.

De nuevo, muchas gracias!
  #6 (permalink)  
Antiguo 21/12/2013, 12:40
Avatar de boggiepopphantom  
Fecha de Ingreso: agosto-2012
Mensajes: 29
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Guardar valores de formulario creado dinámicamente

Probé con el var_dump, pero no logro ver lo que hay en las variables. Usé la función echo, para que me mostrara lo que guarda cada variable, pero no muestra nada, por lo que asumo que no se está guardando algo en los arreglos.

¿Alguna sugerencia?

De antemano gracias!
  #7 (permalink)  
Antiguo 22/12/2013, 10:48
Avatar de boggiepopphantom  
Fecha de Ingreso: agosto-2012
Mensajes: 29
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Guardar valores de formulario creado dinámicamente

Bueno, modifiqué un poco el código, separé los formularios en archivos diferentes, y escribí la sentencia en donde se digitan los números, de la siguiente manera:

Código PHP:
echo "     <td align=\"center\"><input type=\"text\" name=\"\$notas[",$i,"]['fallas']\" size=\"4\" maxlength=\"4\" /></td>"
Ahora, en un archivo diferente, correspondiente al "action" del formulario, seguí la sugerencia de DNS:

Código PHP:
echo "Los valores ingresados son:";
echo 
"<pre>";
var_dump($_POST);
echo 
"</pre>"
Con lo que muestra lo siguiente:

Los valores ingresados son:

array(2) {
["$notas"]=>
array(19) {
[0]=>
array(2) {
["'fallas'"]=>
string(1) "1"
["'notas'"]=>
string(1) "1"
}
[1]=>
array(2) {
["'fallas'"]=>
string(1) "2"
["'notas'"]=>
string(1) "2"
}
[2]=>
array(2) {
["'fallas'"]=>
string(1) "3"
["'notas'"]=>
string(1) "3"
}
[3]=>
array(2) {
["'fallas'"]=>
string(1) "4"
["'notas'"]=>
string(1) "4"
}
[4]=>
array(2) {
["'fallas'"]=>
string(1) "5"
["'notas'"]=>
string(1) "5"
}
[5]=>
array(2) {
["'fallas'"]=>
string(1) "6"
["'notas'"]=>
string(1) "6"
}
[6]=>
array(2) {
["'fallas'"]=>
string(1) "7"
["'notas'"]=>
string(1) "7"
}
[7]=>
array(2) {
["'fallas'"]=>
string(1) "8"
["'notas'"]=>
string(1) "8"
}
[8]=>
array(2) {
["'fallas'"]=>
string(1) "9"
["'notas'"]=>
string(1) "9"
}
[9]=>
array(2) {
["'fallas'"]=>
string(1) "0"
["'notas'"]=>
string(1) "0"
}
[10]=>
array(2) {
["'fallas'"]=>
string(1) "1"
["'notas'"]=>
string(1) "1"
}
[11]=>
array(2) {
["'fallas'"]=>
string(1) "2"
["'notas'"]=>
string(1) "2"
}
[12]=>
array(2) {
["'fallas'"]=>
string(1) "3"
["'notas'"]=>
string(1) "3"
}
[13]=>
array(2) {
["'fallas'"]=>
string(1) "4"
["'notas'"]=>
string(1) "4"
}
[14]=>
array(2) {
["'fallas'"]=>
string(1) "5"
["'notas'"]=>
string(1) "5"
}
[15]=>
array(2) {
["'fallas'"]=>
string(1) "6"
["'notas'"]=>
string(1) "6"
}
[16]=>
array(2) {
["'fallas'"]=>
string(1) "7"
["'notas'"]=>
string(1) "7"
}
[17]=>
array(2) {
["'fallas'"]=>
string(1) "8"
["'notas'"]=>
string(1) "8"
}
[18]=>
array(2) {
["'fallas'"]=>
string(1) "9"
["'notas'"]=>
string(1) "9"
}
}
["suno"]=>
string(11) "Subir Notas"
}

Sin embargo, al hacer con un ciclo for:

Código PHP:
for($i=0;$i<$nf;$i++)
{
echo 
$notas[$i]['notas'];

No me muestra algo, queda la página vacía.

Cuando miro el código fuente del formulario, para ver cómo quedaron finalmente nombrados los input, me muestra lo siguiente

Código HTML:
<td align="center"><input type="text" name="$notas[0]['fallas']" size="4" maxlength="4" /></td> 
¿Alguna sugerencia? De antemano muchas gracias!
  #8 (permalink)  
Antiguo 22/12/2013, 12:22
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Guardar valores de formulario creado dinámicamente

Cita:
array(2) {
["$notas"]=>
array(19) {
eso esta feucho, no tiene porque haber un nombre de variable ahi, ya que eso representa a un subindice tipo texto con el nombre "$notas"

revisa de donde sale eso, deberia ser [0] o bien ['notas'], depende de tus datos pero no un nombre de variable
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #9 (permalink)  
Antiguo 22/12/2013, 22:07
Avatar de boggiepopphantom  
Fecha de Ingreso: agosto-2012
Mensajes: 29
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Guardar valores de formulario creado dinámicamente

Bueno compañeros, gracias a las sugerencias de DNS, y los comentarios en este tema:

http://www.forosdelweb.com/f18/guardar-datos-tabla-dinamica-897884/

Les comento la solución por si le sirve a alguien más. Creé la tabla de forma dinámica, generando inputs por medio de un ciclo for, así:

Código PHP:
echo "     <td align=\"center\"><input type=\"text\" name=\"fallas[",$i,"]\" size=\"4\" maxlength=\"4\" /></td>"
Luego, por medio de otro ciclo for, recogí los valores ingresados en los inputs generados, por medio del siguiente código:

Código PHP:
$falla=($_POST['fallas'][$i]); 
Al hacer

Código PHP:
echo $falla
Se puede ver el valor ingresado en el input. Lo comento por si le sirve alguien más.

Muchas gracias por su ayuda!

Etiquetas: creado, formulario, 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 05:36.