Ir al contenido


Foto

Sistema de "login" usando php y arrays validados por una funcion php


  • Por favor identifícate para responder
9 respuestas en este tema

#1 jglm210687

jglm210687

    Newbie

  • Miembros
  • Pip
  • 3 mensajes

Escrito 04 mayo 2012 - 07:19

Edito el post con la solución para los que estén interesados.  (y)  :wink:
 
Hola amigos necesito su ayuda para poder solventar este problema:
Necesito hacer un sistema de login pero me lo exigen usando arrays.

Estos son los enunciados a responder:

2. Cree un archivo con el nombre usuarios.inc en dicho archivo contendrá dos vectores php uno con los usuarios y otro con las claves de los usuarios. Cree un usuario y una clave para cada integrande del grupo, además cree un usuario para el usuario docente y la clave será dpweb
3. Cree un archivo con el nombre verificar.inc, dicho archivo contendra una función php como mínimo creada por el grupo, dicha función se encargara de recibir dos vectores y buscar en los mismos el usuario y la clave, es decir, la función recibe como parámetro los vectores usuarios, claves y el usuario y clave a buscar, devolviendo cierto o falso, ya sea cumpla o no cumplan las credenciales. Este archivo lo deberá incluir en la página login.php
4. Cree una página login.php la cual contendrá un formulario en el cual capturar ambos datos, la misma página login.php debe procesar los datos. En esta pagina deberá incluir el archivo usuarios.inc para poder verificar las credenciales del usuario que trata de ingresar. Así mismo debe incluir el archivo verificar.inc el cual contiene la función que verificara si es valido usuario y clave.


Encontre el código para hacerlo desde una misma pagina. Pero debe ser usando include de php. Los usuarios iran en
usuarios.inc
Código PHP:

<?php
<?php
$USERS["jose"] = "1234";
$USERS["janira"] = "janira";
$USERS["docente"] = "dpweb";
?>

verificar.inc.php
Código PHP:

<?php
include("usuarios.inc");
function check_logged(){
    global $_SESSION, $USERS;
    if (!array_key_exists($_SESSION["logged"],$USERS)) {
          header("Location: noautorizado.php");
    };
};
?>

este es mi archivo de login.php
Código PHP:

<?php
session_start();
include("verificar.inc.php");
if ($_POST["ac"]=="log") { /// do after login form is submitted 
    if ($USERS[$_POST["username"]]==$_POST["password"]) { /// check if submitted username and password exist in $USERS array
          $_SESSION["logged"]=$_POST["username"];
    } else {
          echo 'Incorrect username/password. Please, try again.';
    };
};
if (array_key_exists($_SESSION["logged"],$USERS)) { //// check if user is logged or not 
    echo "You are logged in. Tu nombre es:".$_POST["username"]; //// if user is logged show a message
?>
    <a href="logout.php">Cerrar Sesion</a>
    <?php 
} else { //// if not logged show login form
    echo '<form action="login.php" method="post"><input type="hidden" name="ac" value="log"> ';
    echo 'Username: <input type="text" name="username" />';
    echo 'Password: <input type="password" name="password" />';
    echo '<input type="submit" value="Login" />';
    echo '</form>';
};
?>

Me he guiado con este ejemplo:

ejemplo.php
Código PHP:

<?php
$recojeruser = $_POST['user'];
$recojerpassword = $_POST['password'];

$user= array();
$user[0]='jose';
$user[1]='sergi';
$user[2]='dani';
$usersize=count($user);

$password= array();
$password[0]='1234';
$password[1]='sergi';
$password[2]='laquetesalgadeloscojones';

$existe=0;
if ((isset($recojeruser)) && (isset($recojerpassword))){   
  for ($i=0;$i<$usersize;$i++){     
      if(strcmp($user[$i],$recojeruser)==0){
        if(strcmp($password[$i],$recojerpassword)==0)
            $existe=1;
            break;
      }
  }
  if ($existe)
      echo "Usuario: <b>".$recojeruser."</b> y contrasenya: <b>".$recojerpassword." CORRECTOS</b>";
  else
      echo "Usuario: <b>".$recojeruser."</b> y contrasenya: <b>".$recojerpassword." INCORRECTOS</b>";
}

else{
?>


<html>
<head>
  <title>Formularios</title>
</head>
<body>
<br>
<br>
<br>
<form action="ejemplo.php" method="POST">
<label for="user">Usuario</label>
<br>
<input type="text" name="user">
<br>
<label for="password">Password</label>
<br>
<input type="password" name="password">
<br>
<br>
<input type="submit" value="Enviar">
<br>
</form>
</body>
</html>

<?php
}
?>

  • 0

#2 javsolis3

javsolis3

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.380 mensajes
  • LocationPanama

Escrito 05 mayo 2012 - 07:12

Estoy viendo que cuando escribes cualquier password vuelve y te dice que el usuario existe !!!  :|
  • 0

#3 jglm210687

jglm210687

    Newbie

  • Miembros
  • Pip
  • 3 mensajes

Escrito 05 mayo 2012 - 08:33

Estoy viendo que cuando escribes cualquier password vuelve y te dice que el usuario existe !!!  :|


Listo esta corregido. :)
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 06 mayo 2012 - 01:48

A mi entender creo que deberas hacer uso de arrays asociativos en vez de tener dos arrays por separado:

$user = array(
  'Jose' => 'clave',
  'Carlos' => 'clave',
  'Fulo' => 'clave',
);


Se escribe menos no?, digo esa es mi opinion.

Saludos.
  • 0

#5 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 06 mayo 2012 - 02:26

¿No sería más apropiado una matriz? ¿O es que PHP no las soporta?
Desconozco el uso de un array asociativo, pero leyendo en enunciado del problema yo en lo primero que pienso es en una matriz y no en dos vectores.

Una matriz de tamaño (2 x n). La fila 1 es para el usuario, la fila 2 es para la contraseña. De este modo en cada columna representa a un usuario en particular. O bien... (n x 2).

Me parece mucho más prolijo y seguro... y no estar jugando sobre dos vectores independientes y haciendo lo posible por mantenerlos "sincronizados".

Saludos,
  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 06 mayo 2012 - 03:14

Pues eso es lo que se llama array asociativo en php mi estimado delphius. Yo porque no darte una explicacion mas profunda porque estoy desde un movil, tan pronto este frente al portatil tratare de dar algo mas detallado.

Saludos.
  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 06 mayo 2012 - 09:04

Hay.... que me dejas con más dudas  ^o|
Yo ni bien vi tu ejemplo, me vino a la mente el uso de la propiedad Values[] que nos ofrece el TStringList. Básicamente permite hacer cosas como:



delphi
  1. apellido := ListaUsuarios.Values['FERNANDO'];



Pero eso no es una matriz, más bien es un vector. Una matriz técnicamente es un arreglo bidimensional de algún tipo. Aquí tenemos una sola dimensión, el asunto es que en lugar de acceder por un índice se lo hace a través de una cadena y funciona siempre y cuando se conozca y se garantice que esta cadena exista en el TStringList.
Esta técnica la utiliza por ejemplo la clase TIBDatabase en la propiedad Params, para indicar el usuario, contraseña y rol. Cuando se usa Values, se consigue una "dupla" en la forma:
Nombre=Valor

Saludos,
  • 0

#8 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 07 mayo 2012 - 06:29

Hay.... que me dejas con más dudas  ^o


Delphius, lo que pasa es que en PHP los índices de los arrays pueden ser cualquier cosa (incluso diferentes tipos de dato dentro de un mismo array), por lo tanto para este caso en especial no es necesaria la matriz.

Un cordial saludo.


  • 0

#9 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 07 mayo 2012 - 06:44

Delphius, lo que pasa es que en PHP los índices de los arrays pueden ser cualquier cosa (incluso diferentes tipos de dato dentro de un mismo array), por lo tanto para este caso en especial no es necesaria la matriz.

Un cordial saludo.

Vaya, para eso es un peligro y no me animaría a usarlo.

En vista a que el problema original habla de 2 vectores, yo me dije: bueno, para el caso es mejor entonces tener una matriz antes que 2 vectores. Me parece que el profesor allí la pifia  ^o|

Saludos,
  • 0

#10 javsolis3

javsolis3

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.380 mensajes
  • LocationPanama

Escrito 08 mayo 2012 - 06:47


Estoy viendo que cuando escribes cualquier password vuelve y te dice que el usuario existe !!!  :|


Listo esta corregido. :)


Podria ver como lo corregiste amigo si no es mucha molestia. 
  • 0




IP.Board spam blocked by CleanTalk.