PDA

Ver la Versión Completa : Comparar un campo de usuario y password.


alfredosg19
11-03-2005, 12:28:29
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:


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

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:


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


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;