1. Curso PHP Thales-CICA
Ejemplos prácticos.
Login sencillo.
En este ejemplo crearemos una pequeña aplicación de lo que comunmente
recibe el nombre de módulo de login.
Será una aplicación insegura y muy sencilla, en temas posteriores la haremos
segura y la iremos complicando. Ahora el objetivo básico es ver los pasos para
la creación de este login.
Pasos: - Diseño de la base de datos para el login.
- Implementación de la tabla en SQL.
- Creación del formulario para la entrada de los datos.
- Realización del código que tratará la información recibida.
Paso 1. Diseño de la base de datos para el login.
En nuestro caso se trata de una aplicación sencilla, simplemente
necesitaremos una tabla con los campos usuario y clave a la que llamaremos
login.
Paso 2. Implementación de la tabla en SQL.
CREATE TABLE login ( usuario VARCHAR( 20 ) NOT NULL ,
clave VARCHAR( 20 ) NOT NUL );
y para hacer las pruebas añado un par de entradas a la tabla:
INSERT INTO login ( usuario , clave ) VALUES ( 'prueba', '123');
INSERT INTO login ( usuario , clave ) VALUES( 'prueba2', '123456' );
1
2. Curso PHP Thales-CICA
Paso3. Creación del formulario para la entrada de los datos.
Será un formulario sencillo. Pasaremos los datos con POST y trataremos la
información en la pagina tratar.php.
El formulario será mostrado en la pagina login.php que contendrá el siguiente
codigo:
<html>
<title>Formulario de Login</title>
</head>
<body>
FORMULARIO DE LOGIN:
<form method="POST" action="tratar.php">
<table>
<tr>
<td width="8%">Usuario:</td>
<td width="92%"><input type="text" name="user" size="20"></td>
</tr>
<tr>
<td width="8%">Clave:</td>
<td width="92%"><input type="text" name="pass" size="20"></td>
</tr>
</table>
<p><input type="submit" value="Enviar" name="B1">
<input type="reset" value="Limpiar" name="B2"></p>
</form>
</body>
</html>
Paso 4. Realización del código que tratará la información recibida.
Lo primero que debermos hacer es meter la información del formulario en
variables para facilitar el manejo de los datos:
$user = $_POST['user']; // Leo de la variable $_POST y voy guardando
$pass = $_POST['pass'];
Ahora $user y $pass contienen los datos, tendremos que comprobar ahora si
esos datos son correctos, es decir si existe en la tabla un usuario con ese
nombre y esa clave.
Lo que hacemos es hacer un select en la tabla con esos datos, si el resultado
del select es vacío, significa que no se ha encontrado ninguna entrada en la
tabla y por tanto esos datos son incorrectos. Si por el contrario obtenemos
una entrada significa que ese usuario es correcto.
2
3. Curso PHP Thales-CICA
La sentencia sql sería:
$sql = "SELECT * FROM login WHERE usuario LIKE 'prueba'
AND clave LIKE '123' ";
Dependediendo del resultado obtenido indicaremos al usuario si el proceso de
login fue correcto o no.
Veamos ta el código completo del tratar.php
<?
// Conexión previa con la base de datos //
$host = "localhost";
$usuario = "prueba";
$password = "pruebita";
$bd = "aplicacion";
if (! $link = mysql_connect($host,$usuario,$password) )
{
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db($bd,$link) )
{
echo "Error seleccionando la base de datos.";
exit();
}
/* Nota: Tendreis que poner el host, user , pass y bd
de vuestro servidor de base de datos */
$user = $_POST['user'];
$pass = $_POST['pass'];
$sql = " SELECT * FROM login WHERE usuario LIKE '".$user."' ";
$sql .= " AND clave LIKE '".$pass."' ";
$result = mysql_query($sql,$link);
if ( !$result ) // $result == null || $result == false , ojo false sin comillas
{
echo "Se produjo un error: ".mysql_error();
exit();
}
3
4. Curso PHP Thales-CICA
else
{
if ( mysql_num_rows($result) > 0 )
{
$row = mysql_fetch_array($result);
echo "Bienvenido ".$row['usuario']; // Con $row['usuario'] accedo al
} // campo user de la tabla.
/* ...... Alternativa ......
$enc = false;
while ($row = mysql_fetch_array($result) )
{
$u = $row['usuario']; // Con $row['usuario'] accedo al
$enc = true; // campo user de la tabla.
}
if ($enc)
{
echo "Bienvenido ".$u;
}
*/
else
{
echo "Usuario Incorrecto";
echo "<br><br><a href='login.php'>Volver</a>";
}
}
?>
NOTA IMPORTANTE
$host = "localhost";
$usuario = "prueba";
$password = "pruebita";
$bd = "aplicacion";
El usuario prueba con clave pruebita es un usuario, que habremos creado con
el phpmyadmin, que tendrá privilegios sobre la base de datos aplicacion, que
es la que contiene las diferentes tablas.
No confundir este usuario con los posibles usuarios de la aplicación,
prueba/pruebita es un administrador de la base de datos aplicación.
4
5. Curso PHP Thales-CICA
Ejercicios resueltos.
Ejemplo 1. Función que pasado un $link y un nombre de la base de
datos detecte si esa base de datos existe o no.
function detecta_bd ($link,$nombre_bd)
{
$result= mysql_list_dbs($link); // Consulto las bases de datos
if ( $result == false)
{
echo "Se produjo un error: ".mysql_error();
exit();
}
else
{
while ( $row = mysql_fetch_array($result) ) // Meto en una array las bd
{
$lista_bd[]=$row['Database'];
}
return in_array($nombre_bd,$lista_bd) ; // Devuelve true si la base de datos
} // se encuentra en el sistema
Importante
• En este ejercicio devolvemos true si se encuentra la base de datos pasada
por parametro en el servidor y falso en caso contrario.
• En caso de que la operación mysql_list_dbs($link) tenga un error,
informaremos de que hubo un error y saldremos de la ejecución con el
comando exit() puesto que no dispongo de la información necesaria, en
este caso la de los nombres de las bases de datos en el sistema y por tanto
no podré devolver ni cierto ni falso.
• Para convertir un resultado en una array utilizo el siguiente código:
while ( $row = mysql_fetch_array($result) )
{
$lista_bd[]=$row['Database'];
}
Con row['Database'] accedo al campo Database de cada fila del resultado, el
cual voy añadiendo dinamicamente al array $lista_db[]
5
6. Curso PHP Thales-CICA
Ejemplo2 . Función que imprime la lista de las bases de datos
disponibles.
function listar_db($link)
{
$result = mysql_query('SHOW DATABASES;',$link);
if ($result == false) // Por si se producen errores en la query
{
echo "Se produjo un error: ".mysql_error();
}
else
{
while( $data = mysql_fetch_row($result) )
{
$array[] = $data[0]; // Va añadiendo las entradas del resultado a la array
}
$tam = sizeof($array); // En array tendré ahora todas las entradas
if ( $tam == 0)
{
echo "No se encontraron bases de datos en el servidor";
}
else // Imprimo las bases de datos encontradas
{
echo "Se encontraron ".$tam." bases de datos en el servidor<br>";
for( $i = 0 ; $i < $tam ; $i++)
{
echo $array[$i]."<br>";
}
}
}
}
Importante:
• Comprobar si el query se hizo correctamente y en caso contrario
dvuelve un false, indicar que error se produjo con la función
myqsl_error().
• Para convertir un resultado en una array utilizo el siguiente código:
while( $data = mysql_fetch_row($result) )
{
$array[] = $data[0]; // Va añadiendo las entradas del resultado a la array
}
6
7. Curso PHP Thales-CICA
Cada fila de resultado es introducida dinamicamente en la array
Comprobar la importancia del [] del array y del [0] del data.
• Para recorrer un array simplemente calculo su tamaño con la función sizeof
y utilizo un sencillo bucle for. También podría haber utilizado lo siguiente:
echo current($array)."<br>";
while ( next($array) )
{
echo current($array)."<br>";
}
y no hubiese necesitado conocer el tamaño del array.
Notese que ya comprobé que tiene al menos un elemento, por lo que el
primer current($array) delante del while no daría error.
También podría hacerlo empezando desde el final:
end ($array); // sitúo el puntero en el ultimo elemento del array
echo current($array)."<br>";
while ( prev ( $array) )
{
echo current($array)."<br>";
}
7