Gestión de formularios
Una de las características más potentes de PHP es la forma de gestionar formularios HTML. El concepto básico que es importante entender es que cualquier elemento de un formulario estará disponible automáticamente en sus scripts de PHP.
Al crear un formulario en el html, hay 2 propiedades importantes que definen como van a gestionarse los datos:
- action; indica la url del archivo que va a recibir estos datos.
- method: define el método en el que van a ser enviados esos datos.
Diferencias entre get y post
Los métodos GET y POST se utilizan para enviar los datos al servidor, y la principal diferencia entre ellos es que el método GET añade los datos a la URI definida en el atributo de acción del formulario. Por el contrario, el método POST adjunta datos al organismo solicitado.
El uso del método GET es inapropiado cuando la información sensible necesita ser llenada en el formulario. El método POST es útil cuando el usuario requiere rellenar las contraseñas u otra información confidencial.
Creando el formulario html básico
<form action="formulario.php" method="post">
<label>Nombre
<input type="text" name="nombre" />
</label
<br>
<label>Edad
<input type="number" name="edad" />
</label>
<br>
<input type="submit" value="Enviar los datos" />
</form>
Script php que recibe los datos
<?php
$name = $_POST["nombre"];
$age = $_POST["edad"];
echo "Hola $name. Supuestamente tienes $age años de edad";
?>
Dentro de php la variable súper global $_POST contiene un array asociativo con los datos del formulario. Dentro de los corchetes indicamos el valor del atributo name de cada elemento input del formulraio html. En este caso hemos utilizado el método post en el formulario. Sin embargo si en su lugar el atributo hubiese sido get, dentro de php el array a utilizar es $_GET
Capturar la fecha, y guardar todos los datos en un documento
Al obtener directamente la fecha y la hora con el script se capturan los datos del servidor. Y si este se encuentra en otra zona horaria estamos en problemas.
Agregar lo siguiente en la parte superior del script, y problema solucionado.
ini_set('date.timezone', 'America/Argentina/Buenos_Aires');
Hay que cambiar el segundo argumento por la zona horaria deseada.
Listado de zonas horarias admitidas
<?php
ini_set('date.timezone','America/Argentina/Buenos_Aires');
$fecha = date("d.m.Y");
$hora = date("g:i A");
$nombre = htmlspecialchars($_POST["nombre"]);
$edad = (int)$_POST["edad"];
$datos = "$hora del $fecha\nNombre: $nombre\nEdad: $edad\n\n";
file_put_contents('datos.txt', $datos, FILE_APPEND);
echo "Datos guardados correctamente<br><br>";
echo "<button onClick='window.history.go(-1)'>Volver a la página anterior</button>";
?>?>
Aquí hemos agregado algunos elementos nuevos:
- htmlspecialchars: garantiza que cualquier carácter que sea especial en html se codifique adecuadamente, de manera que nadie pueda inyectar etiquetas HTML o Javascript en la página.
- (int): convierte el contenido en un valor de tipo integer que automáticamente se deshará de cualquier carácter no numérico.
- file_put_contents(): Función que escribe datos en un archivo. El prinmer argumento es el nombre del archivo, el segundo el contenido. Y el tercero las banderas; FILE_APPEND crea o escribe seguidamente al texto existente.
- window.history.go(): Función javascript que permite activar algún elemento del historial de páginas. -1 vuelve a la página anterior.