jueves, 29 de marzo de 2012

Catorceava Clase

Formulario para restringir el acceso a páginas

Este formulario es importante sobre todo cuando queremos que cierta página no sea accesada por caulquier usuario, en esta ocación lo haremos de forma sencilla y en una proxima clase veremos como trarbajar con inicios de sesión.

Es bueno aclarar que el código HTML esta azúl, el código PHP esta en rojo y los comentarios en color verde.

Iniciamos PHP y evaluamos que el formulario no contenga datos, se deja abierto el if para mostrar el formulario que esta escrito en HTML.

<?
if(!$_POST) {
?>

Escribimos el código HTML para el formulario que tendrá dos campos de texto una para Usuario y otro para Password.

En mi estructura de tabla he hecho una modificación, agregue un campo usuario para este programa, les dejo la imagen para que puedan hacer este cambio tambien.




<table width="300" border="0">
<form action="<? $_POST ?>" method="post">
  <tr>
    <td colspan="2" align="center"><h3>LOGIN</h3></td>
  </tr>
  <tr>
    <td>Usuario:</td>
    <td><input name="usuario" type="text" size="15" maxlength="15"></td>
  </tr>
  <tr>
    <td>Password:</td>
    <td><input name="password" type="password" size="15" maxlength="10"></td>
  </tr>
  <tr>
    <td colspan="2" align="center"><input name="" type="submit" value="Ingresar"></td>
  </tr>
</form>
</table>

La siguiente porción de código es de PHP y corresponde al cierre de if y al inicio de else.

<?
} else {

Estas dos líneas de código asignan los valores de los datos capturados en el formulario a dos  variables que usaremos para consultar en la tabla.

$usuario = $_POST['usuario'];
$password = $_POST['password'];

Validamos el formulario.

if(!$usuario || !$password) {
    echo "Debe ingresar los datos en todos los campos.";
    exit;
}

Conectamos con el servidor.

$db = mysql_connect("localhost", "root", "123456")
           or die ("No se puede conectar con LOCALHOST");

Seleccionamos la base de datos.

mysql_select_db("colegioprueba")
          or die ("No se puede abrir la base de datos COLEGIOPRUEBA");

Realizamos la consulta.  En este caso condicionamos usando WHERE que el campo Usuario sea igual a la variable $usuario.

$consultar = "select * from datos where Usuario = '$usuario'";

Ejecutamos la consulta.

$resultado = mysql_query($consultar);

Asignamos al array $reg el contenido de la tabla.

$reg = mysql_fetch_array($resultado);

Con este código evaluamos si la consulta falló, de ser así mostramos un mensaje y luego un link (este esta escrito en código javascript) para volver atrás.

if($reg['Usuario'] != $usuario){
    echo "Nombre de usuario incorrecto <br>";
    ?>
    <a href="javascript:history.back(1)">Volver Atrás</a>
    <?
    exit;
}

En este código evaluamos que el password que ingreso el usuario sea igual al password registrado en la tabla, de ser así se le da acceso directo a la pagina llamada formulario.php (el redireccionamiento esta escrito en javascript) en caso contrario se da un mensaje y un link para regresar atrás (este link tambien esta escrito en javascript)

if($password == $reg['Password']) {
    ?>
    <script language="javascript">
        location.href = "formulario.php";
    </script>
<?
} else {
    echo "Password Incorrecto";
    ?>
    <a href="javascript:history.back(1)">Volver Atrás</a>
    <?
}

Finalizamos el if inicial.

}

Finalizamos PHP.

?> 

Como siempre les dejo el código completo para que lo prueben y comenten sus resultados.

<?
if(!$_POST) {
?>
<table width="300" border="0">
<form action="<? $_POST ?>" method="post">
  <tr>
    <td colspan="2" align="center"><h3>LOGIN</h3></td>
  </tr>
  <tr>
    <td>Usuario:</td>
    <td><input name="usuario" type="text" size="15" maxlength="15"></td>
  </tr>
  <tr>
    <td>Password:</td>
    <td><input name="password" type="password" size="15" maxlength="10"></td>
  </tr>
  <tr>
    <td colspan="2" align="center"><input name="" type="submit" value="Ingresar"></td>
  </tr>
</form>
</table>
<?
} else {
$usuario = $_POST['usuario'];
$password = $_POST['password'];

if(!$usuario || !$password) {
    echo "Debe ingresar los datos en todos los campos.";
    exit;
}

$db = mysql_connect("localhost", "root", "123456")
           or die ("No se puede conectar con LOCALHOST");

mysql_select_db("colegioprueba")
          or die ("No se puede abrir la base de datos COLEGIOPRUEBA");

$consultar = "select * from datos where Usuario = '$usuario'";
$resultado = mysql_query($consultar);

$reg = mysql_fetch_array($resultado);

if($reg['Usuario'] != $usuario){
    echo "Nombre de usuario incorrecto <br>";
    ?>
    <a href="javascript:history.back(1)">Volver Atrás</a>
    <?
    exit;
}

if($password == $reg['Password']) {
    ?>
    <script language="javascript">
        location.href = "formulario.php";
    </script>
<?
} else {
    echo "Password Incorrecto";
    ?>
    <a href="javascript:history.back(1)">Volver Atrás</a>
    <?
}
}
?>

3 comentarios:

  1. Profe. No me salio seguire intentando... :) pero seguire tratando. :) Gracias por el aporte.

    ResponderEliminar
  2. Yo creo que este codigo:

    if($reg['Usuario'] != $usuario){

    podriamos evitarlo y simplemente usar:

    if($resultado == 0){

    pues la consulta seleciona la fila con el nombre de usuario buscado, si no existe el usuario el resultado de la consulta es 0, lo cual condicionamos en el if.

    ResponderEliminar
  3. Estuve analizando la propuesta de Alan y creo que tiene toda la razón.

    Atte. Steve

    ResponderEliminar