Realimentar un formulario

PHP tiene la particularidad de olvidar los valores de las variables cuando el usuario abandona la página. Pero podemos re-alimentar las variables haciendo uso de formularios y del método POST.
El método consiste en enviar todo el formulario usando el método POST y luego recogerlo haciendo uso de isset. A continuación os mostramos un ejemplo de re alimentación de un vector.

Realimentar un vector con PHP

<?php
$vector=NULL;	//Declaración inicial de vector a nulo, sirve para la primera vez

//Si hemos pulsado enviar sin poner ningún elemento simplemente recuperamos los datos antiguos
if ( isset($_POST['elemento']) && $_POST['elemento']=="")
{
	$i=0;
	foreach ($_POST as $NombreElemento => $Valor)   //Recorremos todo el $_POST insertanto en $vector
	{
		if ($NombreElemento<>"elemento") //Para no insertar el input de petición, que está vacio
		$vector[$i]=$Valor;
		$i++;
	}
}

//Si realmente se ha pasado un elemento nuevo, recorremos todo el vector e insertarmos el elemento que tenemos en el input de petición
elseif ( isset($_POST['elemento']) && $_POST['elemento']<>"")
{
	$i=0;
	foreach ($_POST as $NombreElemento => $Valor)
	{
			$vector[$i]=$Valor;
			$i++;
	}
}

/*
Función mostar, recibe un vector y muestra todos sus elementos por pantalla formando una lista.
Retorna TRUE al finalizar.
Muy importante, observar como debemos ir concatenando la variable $i al name para no tener todos los inputs con el mismo nombre. Si tenemos todos los inputs con el mismo nombre no podremos accedera a ellosd.
*/
function mostrar_vector ($vector)
{
	$i=0;
	foreach ($vector as $elemento)
	{
		echo "<li>Elemento$i: <input type=\"text\" name=\"valor$i\" value=\"$elemento\" /></li>\n";
		$i++;
	}
return TRUE;
}

?>
<!DOCTYPE html>
<html>
<head> 
	<meta name="description" content="Retroalimentar un furmulario con PHP"/> 
	<meta name="keywords" content="Retroalimentar formulario PHP"/> 
	<meta name="author" content="Juan Luis Mora Blanco" /> 
	<meta charset="UTF-8"/> 
	<link rel="stylesheet" href="styles.css" type="text/css" media="screen" /> 
	<title>Retroalimentar un furmulario con PHP</title> 
</head> 
<body>
	<section>
	<form action="realimentar.php" method="post">
		<legend><h1>Insertar en vector</h1></legend>
		<fieldset>
		<ol>
		<li>------Nuevo:<input type="text" name="elemento" size="10" autofocus/>
		<input type="submit" value="Insertar" /></li>
		<?php
		mostrar_vector($vector);  //Llamada a la función que nos muestra el vector.
		//Pintamos el botón borrar, que lo que hace es llamar de nuevo a realimentar como si fuera la primera vez. Observar como no funciona el botón reset???
		?>
		</ol>
		<input type="button" onclick="location.href='http://127.0.0.1/realimentar/realimentar.php'" value="borrar"/>
		</fieldset>
	</form>
	</section>
</body>
</html>

Explicación de método

Si observamos el código desde donde comienza el HTML veremos;

  1. Se muestra un formulario donde pedimos un elemento, tras eso el usuario debe presionar el botón que vuelve a llamar a nuestro realimentar.php
  2. Cuando llegamos a realimentar.php lo primero que hacemos es
    • Con isset compruebo que el campo elemento venga en el POST y también comprobamos que este no venga vació
    • Si isset devuelve TRUE y el campo no viene vació se trata de una inserción y lo que haremos será recuperar los valores e insertar el nuevo valor, que viene en el input “elemento” sin terminación numérica
    • Si isset devuelve TRUE pero el campo elemento está vacío, simplemente se recuperan los datos anteriores y no se insertan nuevos.
  3. De otra parte tenemos una función que muestra los elementos del vector dibujando un formulario

Ejercicios

  1. ¿Porque crees que no funciona el típico botón de reset?
  2. Modifica el código para que no inserte repetidos, tendremos que modificar la parte que se encarga de insertar el nuevo elemento, y antes de insertarse debe comprobar que no esta ya en el vector, deberíamos hacer una función que busque dentro del vector y devuelva TRUE si el elemento existe o FALSE en caso contrario. Deberemos usar una función repetido que será más o menos así:
  3. function repetido ($vector, $elemento)
    	{
    	foreach ($vector as $ele)
    		if ($ele==$elemento)
    			return TRUE;
    		else
    			return FALSE;
    	}
    
  4. Optativo¿Cómo haríamos para borrar un elemento

Originally posted 2011-02-13 13:14:51.

2 Responses to “ Realimentar un formulario ”

  1. feliciana martínez dice:

    j.l. no es de este apartado ¿podrías poner cómo hacer el vector ordenado de la práctica que hemos entregado hoy?,GRACIAS

Deja un comentario