Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Comparar un campo de usuario y password. (https://www.clubdelphi.com/foros/showthread.php?t=19346)

alfredosg19 11-03-2005 12:28:29

Comparar un campo de usuario y password.
 
Hola, estoy haciendo un formulario de validación de usuario y password, ya puedo leer la base de datos pero ¿como comparar ambos campos? y ¿como validarla si se corresponden?. Supongo que primero tengo que comparar lo que está en el Tedit con cada campo al que corresponda y si el campo1(usuario) y el campo2(password) se corresponden dentro del mismo registro el resultado es TRue y si no False. ¿como puedo hacer esto?. Muchas gracias.

@-Soft 11-03-2005 13:12:08

hola

mira a ver con esto:
Código Delphi [-]

// Aqui, se busca el usuario en la tabla de acuerdo al criterio escrito
// y despues verifica que el campo clave de la tabla sea el mismo que
// el ecrito
if (Tuser.Locate(TUserusuario.FieldName, Edit1.Text, []) and (Tuser.clave = Edit2.Text) then
begin
   ShowMessage('Aqui debes hacer lo que tu quieras.');
end else
   ShoeMessage('Mi#@}, este usuario no esta aqui, revise');
end;

espero que te pueda servir, salu23

P.D. si utilizas password encriptado, primero debes desencriptar el password y comparar

alfredosg19 11-03-2005 15:46:48

No entiendo...
 
Hola, te agradezco tu ayuda, pero tengo una duda, no me acaba de funcionar por esto 'TUserusuario.FieldName' que quiere decir,¿ es la tabla y el campo que quiero?, y el ¿Tuser.clave?. Gracias.

maguib 11-03-2005 21:51:50

Otra alternativa
 
Hola, vi tu problema y te sugiero que utilices un query para ver que tanto el usuario como el password corresponden a una misma persona, y si el query te arroja un valor verdadero pues ya está.

Pon estas líneas:

with Query1 do
begin
close;
sql.clear;
sql.add('select * from Tabla where usuario='+chr(39)+Edit1.text+chr(39)+' and password='+chr(39)+Edit2.text+chr(39)+'');
execSQL;
open;
if not isempty then // aquí es donde verificas si coinciden ambos datos
//código
else
//código
end;

roman 11-03-2005 22:24:26

Cita:

Empezado por maguib
'select * from Tabla where usuario='+chr(39)+Edit1.text+chr(39)+' and password='+chr(39)+Edit2.text+chr(39)+''

Hay que tener un poco de cuidado con este tipo de consultas. Suponte que el usuario escribe:

Edit1: roman
Edit2: ' or '1'='1 (con todo y apóstrofes)

La consulta queda así:

select * from Tabla where usuario='roman' and password='' or '1'='1'

Como '1' siempre es igual a '1', cualquiera que sepa mi nombre de usuario podrá entrar. Por ello es más seguro como propone @-Soft; primero buscas al usuario y luego comparas las contraseñas.

Más seguro aún sería guardar la contraseña encriptada y compararla con la encriptación del password que escribe el usuario.

// Saludos

@-Soft 12-03-2005 13:01:11

hola

Cita:

Empezado por alfredosg19
Hola, te agradezco tu ayuda, pero tengo una duda, no me acaba de funcionar por esto 'TUserusuario.FieldName' que quiere decir,¿ es la tabla y el campo que quiero?, y el ¿Tuser.clave?. Gracias.


[TUser][usuario][.][Fieldbybame], he separado por segmento para explicarte mejor.

TUser ---> es el nombre de la tabla usuarios
usuario--> es el nombre del campo usuario
. -------> es el operador de enlace con la propiedad
Fieldbyname ---> es una propiedad que identifica o declara ese campo de la tabla, asi cuando realice la consulta sabra que se esta hablando del campo usuario del dataset Tuser.

pero para no complicarte mucho, ya que esto son mejoras para mis codigos, te voy a poner a lo clasico.

asumiendo que usas DataModule y que este se llama DM, te explico lo siguiente:

Código Delphi [-]
// Aqui, se busca el usuario en la tabla de acuerdo al criterio escrito
// y despues verifica que el campo clave de la tabla sea el mismo que
// el ecrito
if (DM.Tuser.Locate('usuario', Edit1.Text, []) and (DM.Tuser.clave = Edit2.Text) then
begin
   ShowMessage('Aqui debes hacer lo que tu quieras.');
end else
   ShoeMessage('Mi#@}, este usuario no esta aqui, revise');
end;

al escribir DM. la opcion de autocompletar de delphi te trae los nombres de las tablas y/o propiedades que vas ha usar.

Salu2

alfredosg19 12-03-2005 15:53:16

Me falta un dato.
 
Hola a todos, seguro que lo que me falta es una tonteria pero no puedo hacer la comparación, lo he intentado de todas las maneras pero no puedo, hasta el and va bien seguro. Después hice lo mismo para la contraseña que para lo del usuario y resultó pero me valida a cualquier usuario con cualquier contraseña. Les pido el último empujón. MUCHAS GRACIAS.
Código:

procedure TFrmUsuari.BitBtn1Click(Sender: TObject);
 begin
 if (ADOtable1.Locate('usuari', meUsuari.Text, []) and (ADotable1.????? = meCodi.Text))) then
 begin
    ShowMessage('Aqui debes hacer lo que tu quieras.');
 end else
    ShowMessage('Mi#@}, este usuario no esta aqui, revise');
 end;


marcoszorrilla 12-03-2005 17:05:17

Código Delphi [-]
  procedure TFrmUsuari.BitBtn1Click(Sender: TObject);
  begin
  if (ADOtable1.Locate('usuari', meUsuari.Text, []) and (ADotable1MiCampo.Value = meCodi.Text)) then
  begin
     ShowMessage('Aqui debes hacer lo que tu quieras.');
  end else
     ShowMessage('Mi#@}, este usuario no esta aqui, revise');
  end;

Un Saludo.

@-Soft 15-03-2005 13:21:00

hola

donde vas a sustituir la MiCampo por el nombre del campo que tiene la clave en la tabla.

Código Delphi [-]
procedure TFrmUsuari.BitBtn1Click(Sender: TObject);
  begin
  if (ADOtable1.Locate('usuari', meUsuari.Text, []) and   (ADotable1Password.Value = meCodi.Text)) then
  begin
     ShowMessage('Aqui debes hacer lo que tu quieras.');
  end else
     ShowMessage('Mi#@}, este usuario no esta aqui, revise');
  end;


La franja horaria es GMT +2. Ahora son las 19:10:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi