Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/config.php on line 61

Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/config.php on line 61
Creación de un formulario para solicitar credenciales al usuario
Source Code

Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/main/articles.php on line 18

Creación de un formulario para solicitar credenciales al usuario


Tiempo de lectura: 2 minutos

Cuando tenemos que de acceder a datos de usuario que son privados, entonces es necesario identificar al usuario antes de mostrar los datos. Para ello vamos a crear un formulario web para dar acceso a la parte privada de una web.



HTML

Utilizaremos HTML para crar el formulario en una página y verificaremos los datos con un script de PHP que accede a la base de datos del servidor y valida el usuario y una contraseña.

Empezamos con el código HTML, creamos un contenedor DIV, con un titulo H1 y un formulario FORM

<div class="login">
	<h1>Login</h1>
	<form action="validar.php" method="post">
		<label for="username">
			<i class="fas fa-user"></i>
		</label>
		<input type="text" name="username" 
placeholder="Usuario" 
id="username" required>
		<label for="password">
			<i class="fas fa-lock"></i>
		</label>
		<input type="password" name="password" 
placeholder="Contraseña" 
id="password" required>
		<input type="submit" value="Login">
	</form>
</div>

El formulario llamará a un script PHP que se enciargará de validar y aceptar los datos de la credencial del usuario.

Tabién necesiatremos un código de estilo en CSS para dar el aspecto deseado al formulario. El formato que queremos conseguir es el siguiente:

Modelo de formulario para identificar al usuario 

CSS

He utillizado Font Awesome para los iconos que representan las casillas de usuario y constraseña.

El formato lo conseguimos con el siguiene codigo CSS. Primero la clase LOGIN nos formatea el contenedor;

.login {
  width: 400px;
  background-color: #eee;
  box-shadow: 0 0 9px 0 rgba(0, 0, 0, 0.3);
  margin: 100px auto;
}

Un título para el formulario

.login h1 {
  text-align: center;
  color: #5b6574;
  font-size: 24px;
  padding: 20px 0 20px 0;
  border-bottom: 1px solid #dee0e4;
}

Centramos el formulario

.login form {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  padding-top: 0px;
}

Y definimos los estilos de las etiquetas LABEL

.login form label {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 50px;
  height: 50px;
  background-color: #4f5458;
  color: #ffffff;
}

Las casillas de entrada de los datos de usuario y contraseña que son los INPUT

.login form input[type="password"], 
.login form input[type="text"] {
  width: 310px;
  height: 50px;
  border: 1px solid #dee0e4;
  margin-bottom: 20px;
  padding: 0 15px;
}

Y no olvidemos el botón de envío SUBMIT, al que le daremos un cambio de colo al pasar por encima con el cursor

.login form input[type="submit"] {
  width: 100%;
  padding: 15px;
  margin-top: 20px;
  background-color: #4f5458;
  border: 0;
  cursor: pointer;
  font-weight: bold;
  color: #ffffff;
  transition: background-color 0.2s;
}
.login form input[type="submit"]:hover {
  background-color: #363e49;
  transition: background-color 0.2s;
}

PHP

Una vez tenemos estos elementos, pasamos al script en PHP que hará el trabajo duro. En este ejemplo vamos a crear un página WRONG.PHP que nos va a dar el mensaje de error en caso que haya algun dato que no sea correcto o que falle la validación del usuario. En caso contrario, iremos directamente a la página principal del contenido privado.

Validamos que el usuario haya enviado la información

if ( !isset($_POST['username'], 
   $_POST['password']) ) 
{
   message("Cal entrar l'usuari i la contrasenya", 
      $stmt);
   Header("Location: wrong.php");
}

Preparamos una query a la base de datos para recuperar a password de este usuario. La password la tenemos guardada en la base de datos transformada en un HASH. Utilizamos prepare para evitar inyección SQL y dar seguridad. Ejecutamos

if ($stmt = $db->prepare("select username, password".
      " from users where username = ?")) 
{
	$stmt->bind_param("s", $_POST['username']);
	$stmt->execute();
	$stmt->store_result();

Si encontramos que hay un registro para este usuario es porque está registrado, ahora recupearmos la password

	if ($stmt->num_rows > 0) 
	{
		$stmt->bind_result($id, $password);
		$stmt->fetch();

Comprovamos que la contraseña entrada en el formulario corresponde al hash que tenemos guardado. Utilizamos PASSWORD_VERIFY para realizar esta comprobación. Recuerda que todo esto se ejecuta en el servidor.

	if (password_verify($_POST['password'], $password)) 
	{

Y finalmente, si pasa la verificación, informamos en la sesión los datos pertinentes para saber que el usuario está identificado correctamente y navegamos a la página principal

			session_regenerate_id();
			$_SESSION['loggedin'] = TRUE;
			$_SESSION['name'] = $_POST['username'];
			$_SESSION['id'] = $id;
			$stmt->close();

			Header("Location: MainPage.php");

A partir de aquí cerramos e informamos del error que se ha producido con nuestra página de errores.

		} 
	} 
	$stmt->close();
	Header("Location: wrong.php");
}

Todo junto

Llegados a este punto tendremos los archivos login.html, login.css, validar.php y wrong.php, además de la página MainPage.php que a donde queremos llevar al usuario.

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Login</title>		
		<link rel="stylesheet" href="login.css">
    </head>
	<body>
		<h1>Login</h1>
		<form action="validar.php" method="post">
			<label for="username">
				<i class="fas fa-user"></i>
			</label>
			<input type="text" name="username" 
placeholder="Usuario" 
id="username" required>
			<label for="password">
				<i class="fas fa-lock"></i>
			</label>
			<input type="password" name="password" 
placeholder="Contraseña" 
id="password" required>
			<input type="submit" value="Login">
		</form>
	</body>
</html>

Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/navigation.inc.php on line 10

Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/navigation.inc.php on line 21
Xavier es un desarrollador senior full stack y opera desde la ciudad mediterránea de Barcelona. Le encantan las tecnologías de software y está convencido que el desarrollo de software es un proceso colaborativo y abierto.
Y es un apasionado de la astronomía y de la fotografía. Lo puedes encontrar en:
Comparte este post


Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/footer.inc.php on line 24