Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: #Aitor en 28 Febrero 2017, 17:24 pm



Título: Distingue de mayusculas y minusculas.
Publicado por: #Aitor en 28 Febrero 2017, 17:24 pm
Tengo una base de datos y a la hora de registrar en ella el tipico login, distingue entre mayúsculas y minúsculas, es decir, que podría crear dos usuarios llamados "Aitor" y "aitor" sin problema.

Código
  1. <?php
  2.  
  3. if(isset($_POST['user']) && strlen($_POST['user'])>0 &&
  4. isset($_POST['password']) && strlen($_POST['password'])>0 &&
  5. isset($_POST['password2']) && strlen($_POST['password2'])>0 &&
  6. isset($_POST['email']) && strlen($_POST['email'])>0){
  7.  
  8. if($_POST['password'] == $_POST['password2']){
  9.  
  10.  
  11. $user = $_POST['user'];
  12. $password = $_POST['password'];
  13. $password2 = $_POST['password2'];
  14. $email = $_POST['email'];
  15.  
  16. if (!isset($_REQUEST['showemail'])){$showemail = false;}else{$showemail = true;}
  17.  
  18.  
  19. try {
  20.    $con = new PDO('mysql:host=***********;dbname=**********', "****", "******");
  21.  
  22.    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  23.  
  24.    $nombre_repetido = $con->query('SELECT USER FROM registro');
  25.    $usuario_repetido = false;
  26.  
  27.    foreach($nombre_repetido as $row){
  28.     if($row[0] == $user){
  29.     $usuario_repetido = true;
  30. break;}
  31.     }
  32.  
  33. if($usuario_repetido == false){
  34.  
  35.    $return = $con->query("INSERT INTO registro (USER,PASSWORD,EMAIL,SHOWEMAIL)
  36.    VALUES ('$user','$password','$email','$showemail')");
  37.  
  38. header("Location:Registrado.php");
  39.  
  40. }else{header("Location:Existente.php");}
  41.  
  42.  
  43. }catch (PDOException $e) {
  44.  
  45.    print "Error!: " . $e->getMessage() . "<br/>";
  46.  
  47.    die();
  48. }}else{
  49. header("Location:Diferente.php");
  50. }
  51.  
  52. }else{
  53.  
  54. header("Location:index.php");
  55. }
  56. ?>
  57.  

¿Qué falla?

EDIT:

He hecho la siguiente estupidez para saber que es lo que está fallando:

Código
  1. <?php
  2.  
  3. $user = "casa";
  4.  
  5. $comparar = "caSa";
  6.  
  7. if($user === $comparar)
  8. {echo 'Misma palabra';}else{echo 'No es la misma palabra';}
  9.  
  10. ?>

El resultado:

Código
  1. No es la misma palabra.

De modo qué, tenemos que la culpa la tiene el if, que no lo compara bien. (En verdad si lo compara bien, pero no como yo quiero) ¿alguna idea?

VUELVO A EDITAR:
SOLUCIÓN: Usar la función strnatcasecmp http://php.net/manual/es/function.strnatcasecmp.php (http://php.net/manual/es/function.strnatcasecmp.php) tal que así

Código
  1.  if(strnatcasecmp($row[0], $user) == 0){
  2. (...)
  3. }