Ejercicio de práctica
Base de datos en texto plano. Formato usuario:contraseña.
usuario1:123456
usuario2:123456
Script que muestra el formulario y gestiona los mensajes de error visuales.
<?php
if(isset($_GET['error']) && $_GET['error'] == "1"){
echo "No se ha podido iniciar sesión, inténtelo de nuevo";
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Formulario</title>
</head>
<body>
<form action="chequear_login.php" method="POST">
<label for="usuario">Usuario:</label><br>
<input type="text" name="usuario"><br>
<label for="password">Contraseña:</label><br>
<input type="password" name="password">
<button type="submit">Enviar</button>
</form>
</body>
</html>
Verifica las credenciales y crea la sesión si los datos son correctos.
<?php
session_start();
$usuario = $_POST['usuario'];
$password = $_POST['password'];
$fichero = "accesos.txt";
$login_exitoso = false;
if (file_exists($fichero)) {
// Leemos el archivo quitando saltos de lineas y lineas vacías
$lineas = file($fichero, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lineas as $linea) {
list($u, $p) = explode(":", $linea);
if($u == $usuario && $p == $password){
$login_exitoso = true;
break;
}
}
}
if($login_exitoso){
$_SESSION['usuario'] = $usuario;
header("location: frases.php");
exit();
}else{
header("location:login.php?error=1");
}
}else{
echo "Error: no se encuentra el archivo de usuarios";
}
?>
Este archivo contiene tanto la lógica de manejo de ficheros como la vista HTML para el usuario.
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
session_start();
//SI no hay usuario logueado, lo mandamos fuera
if (!isset($_SESSION['usuario'])) {
header("location: login.php");
exit();
}
//Se define el fichero según el usuario:
$fichero_usuario = "frases_" . $_SESSION['usuario'] . ".txt";
//SI no existe el fichero lo creamos vacío
if (!file_exists($fichero_usuario)) {
touch($fichero_usuario);
}
//Añadir la frase
if ($_POST && !empty($_POST['nueva_frase'])) {
//abrimos el fichero en modo append
//Ponemos el cursor al final para no borrar lo anterior
$archivo = fopen($fichero_usuario, "a");
//escribimos la frase y un salto de línea
fwrite($archivo, $_POST['nueva_frase'] . PHP_EOL);
//cerramos el archivo
fclose($archivo);
}
//Leemos las frases para mostrarlas en la lista
$lista_frases = file($fichero_usuario, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mis frases</title>
</head>
<body>
<h1>Bienvenido, <?php echo $_SESSION['usuario'] ?></h1>
<h3>Tus frases:</h3>
<ul>
<?php
//recorremos el array y pintamos cada frase
foreach ($lista_frases as $frase) {
echo "<li>" . htmlspecialchars($frase) . "</li>";
}
?>
</ul>
<hr>
<form action="frases.php" method="POST">
<label for="nueva_frase">Nueva Frase:</label>
<input type="text" name="nueva_frase">
<button type="submit">Guardar</button>
</form>
<br>
<a href="logout.php">Cerrar sesión</a>
</body>
</html>