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
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
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
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
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
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
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

Ejemplos de php_mysql

  • 1.
    Curso PHP Thales-CICA Ejemplosprá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 Lasentencia 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 Ejerciciosresueltos. 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