New question

Question:

Date: 26-04-2019 13:37:55 (In Spanish)

Comparar variables de texto diferenciando mayúsculas y minúsculas[Unresolved]

Saludos amigos, tengo el siguiente código para verificar en un formulario de entrada a una aplicación el usuario y contraseña, pero este no distingue entre mayúsculas y minúsculas, ejemplo si la contraseña almacenada en la tabla es "aaBB" y escribo en el formulario "aabb" me permite iniciar sesión,

Agradezco su ayuda, gracias:

..............................................................................

$usuario = strtoupper($_POST['usu']);
$clave = $_POST['cla'];
.....................
$enlace=cargar_conexion();
$consulta="Select *,coalesce(empresas,0) as empresas from tab_usuario where usuario='".$usuario."' and clave='".$clave."'";

$resultado = mysql_query($consulta) or die('Verificación del Código falló

............................................................................
gracias...
Tags: MySQL - PHP - Question - Web Votes: 0 - Answers: 7 - Views: 12 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 26-04-2019 14:59:56 Hola Miguel:

    strtoupper — Convierte un string a mayúsculas

    www.php.net/manual/es/function.strtoupper.php

    Pases como pases el texto, el resultado es como si escribieras todo en mayúsculas
      Votes: -1 - Link answer
     
  • Date: 27-04-2019 08:21:10 Hola

    Por lo que entiendo quieres que además que sean iguales los string, quieres que sea case sensitive, es decir que distinga mayúsculas y minúsculas.

    En php puedes utilizar la función strcmp()
    (PHP 4, PHP 5, PHP 7)
    strcmp — Comparación de string segura a nivel binario
    strcmp ( string $str1 , string $str2 ) : int
    Tenga en cuenta que esta comparación considera mayúsculas y minúsculas.

    Código de ejemplo

    <?php
    $dataDataBase = "aaBB";
    $dataForm = "aabb";
    if (strcmp($dataDataBase, $dataForm)==0) {
        echo 'Los string son iguales';
    }else{
        echo 'Los string son distintos';
    }
    // Respuesta: Los string son distintos
    ?>
    

    <---Para verlo en funcionamiento Online


    O bien lo puedes hacer en la misma consulta de MySQL anteponiendo la cláusula BINARY para que sea case sensitive.

    En mi ejemplo te puedo mostrar las query que he realizado para que puedas interpretarlo.

    Una consulta simple Sin utilizar BINARY

    El string del password en la consulta and.678
    En este caso no es case sensitive por lo tanto no importa si el string del password está escrito en mayúsculas o en minúsculas, siempre arrojará el resultado misntras que sean iguales.


    Ahora Utilizando BINARY
    El string del password en la consulta es and.678
    En este caso es case sensitive por lo tanto la respuesta de la consulta es nula al no ser idénticos los string del password


    El string del password en la consulta es And.678
    En este caso es case sensitive por lo tanto la respuesta de la consulta devuelve un registro al ser idénticos los string del password



    En tu caso la query utilizando BINARY sería algo como:
    $consulta="Select *,coalesce(empresas,0) as empresas from tab_usuario where usuario='".$usuario."' and  BINARY clave='".$clave."'";
    

    Si los string del password son idénticos te devuelve el resultado en caso contrario no devuelve nada

    Prueba y nos cuentas.

    Espero que te haya servido.

    Saludos
      Votes: 2 - Link answer
     
  • Date: 30-04-2019 10:37:13 No te lies, paso a md5 antes de comparar, ejemplo:
    $passendviado = md5(trim($_POST['passwordenviado']));
    y cuando haces la consulta y comparas:
    $passwordusuario = md5();
    y luego comparas los md5

    Y quitate de problemas... Saludos...

    Stryfe™
      Votes: 0 - Link answer
     
  • Date: 30-04-2019 11:32:44 Gracias Walter Sánchez

    Fue la forma más sencilla y funciona....!
      Votes: 1 - Link answer
     
  • Date: 30-04-2019 15:13:24 Miguelangel que bueno que te halla servido.

    Es bueno aclarar que en un proyecto en producción no se debe guardar los password en texto plano deberá encriptarse

    Por ejemplo usando password_hash() y password_verify() entre otros metodos de encriptacion.
    Evitar el uso de md5() por recomendación de la doc oficial de PHP

    Advertencia md5()
    No se recomienda utilizar esta función para contraseñas seguras debido a la naturaleza rápida de este algoritmo de «hashing». Véase las Preguntas más frecuentes de «hash» de contraseñas para más detalles y el empleo de mejores prácticas.

    Además deberás evitar el uso de mysql_query()

    Advertencia mysql_query
    Esta extensión fue declarada obsoleta en PHP 5.5.0 y eliminada en PHP 7.0.0. En su lugar debería utilzarse las extensiones MySQLi o PDO_MySQL. Véase también la guía MySQL: elegir una API y sus P+F relacionadas para más información.

    Espero que te sirva la información.

    Saludos
      Votes: 1 - Link answer
     
  •  
      0  
     
    Date: 02-05-2019 06:46:11 Solo cambia esto:
    $usuario = strtoupper($_POST['usu']);

    Por esto:
    $usuario = $_POST['usu'];

    Y listo
      Votes: 0 - Link answer
     
  • Date: 02-05-2019 10:51:29 Te recomiendo por un tema de seguridad no guardar las claves en la base de datos, sino un hash de las mismas.
    Parecido a lo que dijo Ernesto más arriba, pero yo guardaría un "salted hash" para evitar el ataque de "rainbow table", y usar una función más segura que MD5, en lo posible más lenta para evitar el ataque por "fuerza bruta" y de la cual no hayan encontrado ya formas de obtener colisiones.
    Aquí recomiendan algunas:
    (en el apartado "Good Password Hashing Functions")
    https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com