PHP MYSQLI登录允许大写字母

时间:2015-07-14 08:07:34

标签: php login

这个脚本确实有效,但是如果我为用户使用大写字母它不起作用,

在数据库中是用户名Tom。 我可以登录,如果我使用汤姆, 但汤姆不起作用。 我该如何解决?

<?php
$username=$_POST['username'];
$password=md5($_POST['password']);
$login=$_POST['login'];
if(isset($login)){
  $mysqli = new mysqli("localhost", "root", "Tech112!", "ripper");
  if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
  }
  $res = $mysqli->query("SELECT * FROM login where username='$username' and password='$password'");
  $row = $res->fetch_assoc();
  $name = $row['name_login'];
  $user = $row['username'];
  $pass = $row['password'];
  $rank = $row['type_login'];
  if($user==$username && $pass=$password){
    session_start();
    if($rank=="2"){
      $_SESSION['mysesi']=$user;
      $_SESSION['rank']=$rank;
      echo "<script>window.location.assign('index.php')</script>";
    } else if($rank=="1"){
      $_SESSION['mysesi']=$user;
      $_SESSION['rank']=$rank;
      echo "<script>window.location.assign('index.php')</script>";
    } 

    }
  } 
?>
汤姆·拉默斯

1 个答案:

答案 0 :(得分:-1)

将数据库和$_POST用户名转换为小写并进行比较。这将使用户名不区分大小写。

$res = $mysqli->query("SELECT * FROM login where LOWER(`username`)='".strtolower($username)."' and password='$password'");

编辑你的if还要与小写用户名进行比较。

if(strtolower($user) == strtolower($username) && $pass=$password){

NB!您的查询已针对SQL injection打开,请阅读this进行修复。

要避免SQL注入,请使用bind_param

/* Code until query */

$stmt = $mysqli->prepare("SELECT * FROM login where LOWER(`username`) = ? and password = ?");

// Add variables safely
$stmt->bind_param('ss', strtolower($username), $password);

$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();

/* Rest of your code */