Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Login y Diferenciar Mayúsculas, Minúsculas, Acentos.. ETC (https://www.clubdelphi.com/foros/showthread.php?t=89564)

Gusso 14-12-2015 08:49:58

Login y Diferenciar Mayúsculas, Minúsculas, Acentos.. ETC
 
Buenas Noches Colegas!!

Nuevamente solicitando de su valiosa ayuda....

Les cuento tengo un programa donde la ventana principal es un login, ya lo tengo funcionando, el único problema que tengo es que no diferencía entre mayúsculas y minúsculas (es decir uso un password almacenado como "Hola", pero si escribo todo con mayúscula o minúscula aún me da acceso, quisiera saber como puedo hacer para que solicite que el password lo escriba exactamente como se almaceno), uso una BD MySQL almacenada como varchar, ya intenter como tipo BLOB pero tuve problemas no pude hacer ningun login ¿Alguna sugerencia? De ante mano agradezco su ayuda

Casimiro Notevi 14-12-2015 10:54:02

Pon el código que lo veamos ;)

Gusso 14-12-2015 12:38:38

Codigo
 
Cita:

Empezado por Casimiro Notevi (Mensaje 500462)
Pon el código que lo veamos

Aqui esta mi codigo lo ejecuto un boton "aceptar"
Código Delphi [-]
procedure TForm1.IniciarClick(Sender: TObject);
begin
with datamodule2 do
begin
ql.SQL.Text:='Select idEmpleados, Password, AreaTrab from empleados where AreaTrab=:"box" and idEmpleados=:log and Password=:"pass"';
ql.Parameters.ParamByName('log').Value:=Edit1.Text;
ql.Parameters.ParamByName('pass').Value:=Edit2.Text;
ql.Parameters.ParamByName('box').Value:=Box.Text;
ql.Open;
  if ql.RecordCount=1 then
    begin
      ShowMessage('BIENVENIDO');
      Form1.hide;
      //Form3.Show;
        if box.Text= 'Medicina' then Form3.Show;
        if box.Text= 'Farmacia' then Form7.Show;
        if box.Text= 'Administrativo' then Form8.Show;
    end
    else
      begin
        ShowMessage('Error en usuario y/o contraseña');
        e:=e+1;
      end;
if e=3 then
  begin
    Button2.Click;
  end;
edit2.Text:='';
end;

Casimiro Notevi 14-12-2015 12:50:38

Código Delphi [-]
ql.SQL.Text:='Select idEmpleados, Password, AreaTrab from empleados where AreaTrab=:"box" and idEmpleados=:log and Password=:"pass"';
Para empezar, quita esas comillas de los parámetros.
Código Delphi [-]
ql.SQL.Text:='Select idEmpleados, Password, AreaTrab from empleados where AreaTrab=:box and idEmpleados=:log and Password=: pass';

Y recuerda poner los tags al código fuente, ejemplo:



Gracias :)

Gusso 15-12-2015 08:41:38

Muchas gracias, lo hare... pero alguna sugerencia con mi problema?

Casimiro Notevi 15-12-2015 11:04:43

Cita:

Empezado por Gusso (Mensaje 500515)
Muchas gracias, lo hare... pero alguna sugerencia con mi problema?

Pero si te he puesto la solución :confused:

Gusso 15-12-2015 11:15:26

Cita:

Empezado por Casimiro Notevi (Mensaje 500519)
Pero si te he puesto la solución

Pero el quitar las comillas no me resolvio mi problema, aun sigue sin diferenciar en el password minusculas y mayusculas, y en el RAD 10 studio no tengo esta opcion en el tag u.u, quede igual, disuculpen... pero aun soy novato

Casimiro Notevi 15-12-2015 11:21:23

¿Pero en box.text qué valor hay? ¿no lo convertirás todo a mayúsculas, por ejemplo, al guardarlo y al leerlo?
Es que no vemos más que el trozo de código que has puesto, tenemos que intentar adivinar.
¿Has seguido el programa con el debug para ver qué valor hay en box.text y en la base de datos?

Gusso 15-12-2015 11:38:43

Cita:

Empezado por Casimiro Notevi (Mensaje 500521)
¿Pero en box.text qué valor hay? ¿no lo convertirás todo a mayúsculas, por ejemplo, al guardarlo y al leerlo?
Es que no vemos más que el trozo de código que has puesto, tenemos que intentar adivinar.
¿Has seguido el programa con el debug para ver qué valor hay en box.text y en la base de datos?

Cierto debi ser mas espécifico, mil disculpas, el box.text es un combobox, pero ese no es el problema, en el edit2.text es el campo donde se escribira la contraseña, ahora en mi BD de MySQL tengo este campo Password como varchar... no quiero convertir a mayusculas, quiero saber como puedo hacer que se solicite la contraseña exactamente como se almaceno en la BD, es decir si escribo como Password "HoLa" que se escriba exactamente para que permita el acceso, ya que asi como tengo funcionando mi software si da acceso, pero no diferencia entre mayusculas y minusculas el password, no se si me explico, lo que pasa es que no tengo aún permitido subir imagenes en mis redacciones aqui en el foro, pero finalmente, es un form con los campos usuario y contraseña

Casimiro Notevi 15-12-2015 11:56:06

Bien, entonces insisto,
1. Lo guardado en la base de datos ¿está en mayúsculas, minúsculas o tal y como se tecleó? míralo y asegúrate.
2. Lo tecleado en edit1 y edit2 ¿está en mayúsculas, minúsculas o tal y como se tecleó? míralo y asegúrate.

Debes poner un 'breakpoint' antes de q1.Open, por ejemplo, y mira qué valor tiene.

Gusso 15-12-2015 12:23:32

Cita:

Empezado por Casimiro Notevi (Mensaje 500523)
Bien, entonces insisto,
1. Lo guardado en la base de datos ¿está en mayúsculas, minúsculas o tal y como se tecleó? míralo y asegúrate.
2. Lo tecleado en edit1 y edit2 ¿está en mayúsculas, minúsculas o tal y como se tecleó? míralo y asegúrate.

Debes poner un 'breakpoint' antes de q1.Open, por ejemplo, y mira qué valor tiene.


Asi es, la BD el usuario es numeral, entonces no tengo problema con este... en el password la BD esta almacenado como Hola, la "H" es mayuscula, pero escribo "hola" asi en minuscula aún me da acceso... y bueno ¿como es el breakpoint?

Casimiro Notevi 15-12-2015 12:31:29

Pones el cursor en la línea indicada. Le das a F5 y luego ejecutas el proprama. Se detendrá en esa línea y puedes poner la flecha del ratón encima de las distintas variables para ver sus valores.

movorack 15-12-2015 13:56:16

Hola,

Aparte de hacer el debug como te indican y verificar como estás pasando los parámetros, abres la consulta y validas el resultado debes tener en cuenta un detalle de seguridad y en este caso es no almacenar contraseñas en texto en la DB.

Puedes usar muchos métodos. Uno sencillo en MySQL sería guardar el hash MD5 en lugar de la contraseña al momento de crear el usuario y al validar calculas el MD5 de la contraseña ingresada y lo validas con lo almacenado en la DB.

AgustinOrtu 15-12-2015 14:31:16

Como esta el collate del campo de la BD?

Revisa esto

Edito:

Otra forma

Código SQL [-]
SELECT * FROM `table` WHERE BINARY `column` = 'value'

Gusso 16-12-2015 06:47:30

Cita:

Empezado por AgustinOrtu (Mensaje 500533)
Como esta el collate del campo de la BD?

Revisa esto

Edito:

Otra forma

Código SQL [-]SELECT * FROM `table` WHERE BINARY `column` = 'value'

Excelente, me resulto como lo queria, te agradezco infinitamente

Casimiro Notevi 16-12-2015 08:53:28

Entonces, ¿qué quiere decir eso? ¿que mysql busca de forma predeterminada en mayúsculas y minúsculas al mismo tiempo?

AgustinOrtu 16-12-2015 13:37:34

No, depende del collate

La solución #2 es mala porque convertis el texto de un tipo a otro (en una tabla temporal): no sólo puede ser lento sino que hasta se podrían perder caracteres

La realidad es que nadie lee sobre collates ni encodings, dejan todo por defecto

Lo ideal es que si necesita diferenciar los caracteres se use el collate indicado para definir el campo

Es como guardar todo en blobs por poner un ejemplo estupido

Casimiro Notevi 16-12-2015 14:05:29

Pues no lo entiendo, la verdad :confused:

AgustinOrtu 16-12-2015 15:44:23

En firebird pasa lo mismo:

Cita:

Examples:

Simplest form, using the name as found in the .conf file (case-insensitive):

create collation iso8859_1_unicode for iso8859_1

Characters sets and collation

Es como pretender guardar una ñ en una columna ASCII

Casimiro Notevi 16-12-2015 16:05:21

En firebird, si almacenas "Hola" y lo comparas con "hola", te dirá que no existe, porque no existe, claro.
Eso no tiene nada que ver con "Ññáéííoú...", es un tema distinto.
O eso, o es que todavía no me he enterado del problema :)


La franja horaria es GMT +2. Ahora son las 21:24:10.

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