这个脚本确实有效,但是如果我为用户使用大写字母它不起作用,
在数据库中是用户名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>";
}
}
}
?>
汤姆·拉默斯
答案 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 */