Pregunta:
Fecha: 12-05-2017 11:11:04
(En Español)
Solicito colaboración: tengo un script en PHP con un input en un formulario, necesito que me imprima las n entradas pero solo me aparece la última. Necesito que aparezcan todas, tengo un for en comentario para validar.
Adjunto script:
Ejercicio: formulario con n entradas[Resuelta]
Buenas TardesSolicito colaboración: tengo un script en PHP con un input en un formulario, necesito que me imprima las n entradas pero solo me aparece la última. Necesito que aparezcan todas, tengo un for en comentario para validar.
Adjunto script:
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" httpequiv="content-type">
<title>Ejercicio 4.13</title>
</head>
<body>
<form method="POST" action="#" />
<label> digita empleados</label>
<input type="text" name="numero"/>
<input type="submit" />
</form>
<br> <br>
<?php
@$numero = $_POST['numero'];
echo '<form name="formulario" action="#" method="POST">';
for ($i=1; $i<=$numero; $i++){
echo 'Introduce tu nombre: <input type="text" name="nombre"><br>';
echo 'Introduce la edad <input type="text" name="edad"><br>';}
echo '<input type="submit" value="Enviar">
</form>';
@$dos = array(Nombre => $_POST['nombre'], Edad => $_POST['edad']);
if($_POST)
{
foreach ($dos as $clave=>$valor)
{
echo "El valor de $clave es: $valor<br>";
}
}
?>
</body>
</html>
Votos: 0 -
Respuestas: 5 -
Vistas: 17
Compartir en: Google
Facebook
Twitter
LinkedIn
Link
Respuestas:
-
Fecha: 12-05-2017 12:21:30 Espero que sea para una tarea escolar
Para que funcione como quieres agrega lo siguiente al atributo name de los elementos input del formulario: []
Queda algo como:
<input type="text" name="nombre[]"> <input type="text" name="edad[]">
Votos: 2 - Link respuesta -
Fecha: 12-05-2017 12:58:49 Buenas Tardes, si es para una tarea escolar estudio ADSI en Colombia en un Instituto llamado SENA.
Gracias, ya lo había intentado, el me recorre toda la información ingresada pero solo imprime el ultimo, se que debo ingresar un "for" antes del echo pero ya no me reconoce el valor.
<html> <head> <meta content="text/html; charset=ISO-8859-1" httpequiv="content-type"> <title>Ejercicio 4.13</title> </head> <body> <form method="POST" action="#" /> <label> digita empleados</label> <input type="text" name="numero"/> <input type="submit" /> </form> <br> <br> <?php @$numero = $_POST['numero']; echo '<form name="formulario" action="#" method="POST">'; for ($i=1; $i<=$numero; $i++){ echo 'Introduce tu nombre: <input type="text" name="nombre[]" value""><br>'; echo 'Introduce la edad <input type="text" name="edad[]"><br>';} echo '<input type="submit" value="Enviar"> </form>'; @$dos = array(Nombre => $_POST['nombre'], Edad => $_POST['edad']); if($_POST) { foreach ($_POST as $clave=>$valor) { for($valor=1; $valor<=$numero; $valor++) { echo "El valor de $clave es: $valor<br>"; } } } ?> </body> </html>Votos: 0 - Link respuesta -
Fecha: 13-05-2017 06:03:10 Hola John, estuve viendo tu código y tienes algunos puntos a corregir, veamos:
Siempre incluye el doctype en tu html, aquí algo de info: https://www.w3schools.com/tags/tag_doctype.asp
En conclusión, agrega como primera línea el doctype de HTML5
<!DOCTYPE html>
No debes auto cerrar la etiqueta form (self-closed tag) y si el "action" es el mismo script, obvia este atributo.
Remplaza esta línea:
<form method="POST" action="#" />
Por esta:
<form method="POST">
Auto cierra las etiquetas "br":
<br/>
Nunca uses @, es una mala práctica y pude ocultar errores que luego serán muy dificiles de detectar (entre otros problemas), mejor valida:
Remplaza esta línea:
@$numero = $_POST['numero'];
Por esta:
$numero = (isset($_POST['numero']))?$_POST['numero']:0;
Nota: observa que estoy validando la existencia del índice con la función isset() y utilizo el operador ternario para simplificar en una línea la estructura IF ELSE
Como regla, todo lo que pueda ser HTML que lo siga siendo, o sea, no es necesario que hagas "echo" de algo que puede estar fuera del parser de PHP, por ejemplo:
Remplaza esta línea:
echo '<form name="formulario" action="#" method="POST">';
Por esta:
<form name="formulario" method="POST">
Nota: deberás reordenar tu código y la apertura y cierre de etiquetas PHP para que esto funcione.
En el array de nombre y edad encierra las claves entre comillas simples y quita el @
Remplaza esta línea:
@$dos = array(Nombre => $_POST['nombre'], Edad => $_POST['edad']);
Por esta:
$dos = array('Nombre' => isset($_POST['nombre']) ? $_POST['nombre'] : '', 'Edad' => isset($_POST['edad']) ? $_POST['edad'] : '', );
Nota: observa que también estoy validando la existencia de los índices con la función isset() y nuevamente utilizo el operador ternario.
Observación de tu último ejemplo: no creo que sea correcto el for dentro del foreach, me daría la impresión que no tienes claro (o tal vez nadie te clarifico) cual es el objetivo del ejercicio, trataré explicarlo (según mis especulaciones).
Que se espera:
1) primera ejecución: se muestra un input con un botón para ingresar la cantidad de empleados, se ingresa la cantidad y se hace clic en el botón.
2) segunda ejecución: como ahora se tiene el dato $numero seteado con algún valor mayor a 0, entonces se muestran los campos dinámicos "Introduce tu nombre" y "Introduce tu edad", la cantidad de veces que corresponda según $numero. Luego se completan los campos y se presiona el botón enviar.
3) tercera ejecución: finalmente debe recorrerse el array $_POST['nombre'] y array $_POST['edad'], y hacer un echo de "El empleado XXXX tiene ## edad."
No te quiero dar la solución porque sino no aprenderás nada, prefieron invertir el doble o triple de tiempo y ayudarte a que lo resulevas tu. Estudia los puntos mencionados, relee varias veces lo "que se espera" y trata de armar la lógica para que funcione.
Espero que mi respuesta te sea de ayuda.
Saludos y buen código! Votos: 4 - Link respuesta -
Fecha: 16-05-2017 11:20:19 Buenas Tardes
Fernando gracias por tu respuesta, valide la informacion que me diste y ya lo puede solucionar. Era una actividad de clase.
De nuevo te agradezco mucho. Votos: 0 - Link respuesta -
Fecha: 16-05-2017 12:47:37 Buenisimo John, se agradece que puedas compartir tu solución, tal vez podamos aportarte alguna mejora.
Saludos y buen código! Votos: 0 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
