Crear sesiones usando cookies en un formulario en PHP

Si necesitamos controlar quiénes usan nuestro sistema, podemos tener un grupo de usuarios en una base de datos.

Para acceder al sistema, pedimos al usuario que se identifique, creando una sesión con los datos recibidos en el formulario de login, y guardamos cada dato del usuario en una cookie. La creación de cookies debe ser lo primero que se escribe, incluso antes que las cabeceras de HTML:

<?php
session_start();
$_SESSION['nombre'] = $_POST['Nombre'];
$_SESSION['apellido'] = $_POST['Apellido'];
?>

Cada vez que se accede al formulario, nos fijamos si existe la cookie. Si existe, mostramos el contenido de la página. Si no, invitamos a navegante a identificarse o a pedir la creación de un usuario nuevo:

<?php
session_start();
if (isset($_SESSION['Nombre])){
 echo "Hola, ";
 echo $_SESSION['nombre'];
 echo " ";
 echo $_SESSION['apellido'];
echo "<p>Contenido de la página, que se muestra sólo a los usuarios logueados</p>";
}else{
echo '<p>Todavía no ingresó al sistema.</p>
<p><a href="login.html">Acceder con un nombre de usuario y contraseña</a>
 o <a href="solicitar.html">Solicitar un usuario nuevo</a></p>';
}
?>

¿Cómo sabemos si el usuario está registrado y si ingresó correctamente su password? (Gracias a esta entrada en forosdelweb lo pude hacer sin dificultad)

<?php 
$usuario = $_POST['campousuario'];
$clave = $_POST['campoclave'];

include('abre_conexion.php'); // Se conecta a la base de datos

$query = "SELECT * FROM `usuarios` WHERE usuario = '$usuario'"; // Esta linea hace la consulta 
$result = mysql_query($query); // Almaceno el resultado de la consulta en la variable result

if( mysql_num_rows($result) == 0){
// mysql_num_rows <- esta funcion me imprime el numero de registro que encontro 
// si el numero es igual a 0 es porque el registro no existe, 
en otras palabras ese usuario no esta en la tabla.
echo "<p>El usuario no existe</p>";
echo "<a href='solicitar.html'>Solicitar un usuario</a>";}
else
{
//ese usuario ya esta registrado y entonces me fijo si el password es correcto
   while ($registro = mysql_fetch_array($result)){ 
      if ($registro['password']==$clave) { 
              echo "<h1>Bienvenido al sistema</h1>";
              echo "<h2>2016</h2>";
            } 
      else 
          { echo "<p>Contraseña incorrecta</p>";}
   }
}
include('cierra_conexion.php'); 
?>

Crear un formulario utilizando PHP

Aquí voy a explicar los mínimos conocimientos que se necesitan para crear un formulario simple utilizando lenguaje HTML y procesarlo con PHP.

Primero, es importante saber que el lenguaje PHP se puede ejecutar únicamente en un servidor.

Es decir, si nunca hiciste nada con PHP, y no tenés una página web subida en un hosting con acceso por FTP, vas a necesitar comenzar por un tutorial de “Primeros pasos en PHP“, o un poco más difícil los que se explican en “La manera correcta”

Es decir que empezamos pensando que ya hiciste algún programita mínimo con PHP.

También, que ya practicaste un poco creando un formulario que no utilice PHP.

Primer paso, el formulario

Para crear un formulario de contacto, por ejemplo, vamos a necesitar dos archivos. En uno va a estar el formulario en sí, en lenguaje HTML. Este podría ser el código:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <title>Enviar mensaje</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form action="enviamail.php" method="post" id="formulario_contacto">
 <label for="nombre">Nombre</label>
 <input name="nombre" id="nombre" type="text" size="40" value=" " />
 
 <label for="correo">Correo electrónico</label>
 <input name="correo" id="correo" type="text" size="40" value=" " />
 
 <label for="mensaje">Escriba su mensaje</label>
 <textarea name="mensaje" id="mensaje" rows="5" cols="30" ></textarea>
 
 <div><input name="enviar" id="enviar" type="submit" value="Enviar mensaje" /></div>
 </form>
</body>
</html>

Los encabezados de HTML y tipo de codificación son obligatorios para crear un documento válido. La parte del formulario comienza en la sentencia form, y en la acción se utiliza el nombre del archivo que va a procesar el formulario (enviarmail.php), que está en lenguaje PHP.

Segundo paso, el programa que procesa los datos del formulario

Este archivo (enviarmail.php) recibe la información enviada al pulsar el botón “Enviar mensaje”. ¿Cómo utiliza esa información? Utilizando $_POST y el nombre del objeto en el formulario. Aquí guardamos los tres valores en tres variables:

$nombre = $_POST[‘nombre‘];
$mail = $_POST[‘correo‘];
$mensaje = $_POST[‘mensaje‘];

Este sería el contenido completo del archivo PHP, al cual le falta mucho trabajo todavía, porque no controla la validez de los datos, no da error si algo sale mal, etc.:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Enviar mensaje</title>
</head>
<body>
<?php
////Tomar el valor recibido y almacenarlo en variables/////
$nombre = $_POST['nombre'];
$mail = $_POST['correo'];
$mensaje = $_POST['mensaje'];
 
///////Configuración del mensaje: destinatario y asunto/////
$mail_destinatario = 'blablablablabla@gmail.com';
$asunto = "Mensaje enviado desde el formulario";
///////Fin configuración//
///En esta próxima línea es donde verdaderamente se envía el mail///
mail ($mail_destinatario, $asunto, $mensaje);
echo "Mensaje enviado"
?>
</body>
</html>

Tercer paso, aprender mucho más

Hacer un formulario que no permita código HTML (para evitar códigos maliciosos), que valide datos (para obligar a completar algunos campos o evaluar el contenido), o que guarde la información de diversas maneras (creando un archivo PDF, un archivo de texto o una base de datos) serán nuestros próximos pasos.

Artículos sobre cómo crear formularios accesibles:

Mi primer formulario: simple pero inútil

Crear un formulario completamente en HTML es bastante sencillo, aunque no es muy útil porque lo único que hace es enviar un mail con un formato plano, sólo si quien utiliza el formulario tiene configurado un cliente de correo, lo cual no es nada habitual en estos días.
Para empezar, se puede copiar el siguiente ejemplo y pegar en un editor de texto, guardando el archivo con extensión .html

<FORM Action="mailto:direccion@blabla.com?Subject=Formulario" METHOD="POST">
 <p>Su nombre:</p>
 <p><INPUT id="Nombre" name="Nombre" type="text"></p>
 <p>Mensaje:</p>
 <p><TEXTAREA name="mensaje" id="mensaje"></TEXTAREA></p>
 <INPUT type="submit" value="Enviar el formulario">
 </FORM>

Debemos copiar este código en un archivo de texto plano (no un procesador de textos sino un editor como Geany o el bloc de notas) y guardarlo con extensión .html. Después, hacemos doble clic en ese archivo y se abrirá el formulario en el navegador.

Formulario inútil visto en el navegador

La estructura del formulario es:

<FORM Action=……..aquí la acción que realizará el formulario……….. METHOD=”POST”>

……….aquí los elementos del formulario: botones, textos simples, áreas de texto….

</FORM>

En el primer renglón se define la acción que se realizará al pulsar “Enviar”. En este caso se intentará enviar un mail (Mail To = mailto) a la dirección indicada, con un asunto (Subject):

<FORM Action=”mailto:direccion@blabla.com?Subject=Formulario” METHOD=”POST”>

Después se define un cuadro de texto simple (type=”text”), de un solo renglón:

<p>Nombre:</p>
<p><INPUT id=”Nombre” name=”Nombre” type=”text”></p>

Y otro cuadro de texto pero de múltiples líneas (TEXTAREA):

<p>Mensaje:</p>
<p><TEXTAREA name=”mensaje” id=”mensaje”></TEXTAREA></p>

El último elemento es el botón “Enviar” (type=”submit”), que realizará la acción indicada en la apertura del formulario:

<INPUT type=”submit” value=”Enviar el formulario”>
</FORM>

Este formulario es bastante inútil porque el navegador puede intentar abrir una ventana en un cliente de correo electrónico que no esté configurado, pero es la primera aproximación para comprender cómo funcionan. Para hacer un formulario que realmente sirva, el próximo post muestra un primer paso para crear un formulario PHP.

Artículos sobre cómo crear formularios accesibles: