Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通用登录名_Php_Login Script - Fatal编程技术网

Php 通用登录名

Php 通用登录名,php,login-script,Php,Login Script,是否有一种方法可以使用户名部分同时适用于大写和小写,例如,如果我的用户名是robert,如果您输入robert,它也可以工作?附件是我的登录脚本的副本 <?php session_start(); $username = $_POST['username']; $password = $_POST['password']; if ($username&&$password) { $connect = mysql_connect("localhost","*i****

是否有一种方法可以使用户名部分同时适用于大写和小写,例如,如果我的用户名是robert,如果您输入robert,它也可以工作?附件是我的登录脚本的副本

<?php

session_start();

$username = $_POST['username'];
$password = $_POST['password'];

if ($username&&$password)
{

$connect = mysql_connect("localhost","*i*****5_******","*******") or die ("Couldn't Connect"); //host,username,password
mysql_select_db("virtua15_gateway") or die ("Could not find database");

$query = mysql_query("SELECT * FROM Users WHERE username='$username'");
$numrows = mysql_num_rows($query);
if ($numrows!=0)
{
    while ($row = mysql_fetch_assoc($query))
    {
            $dbusername = $row['username'];
            $dbpassword = $row['password'];
    }
    if ($username==$dbusername&&md5($password)==$dbpassword)
    {
     header( 'Location: index2.php' );
     $_SESSION['username']=$dbusername;
    }
    else
        echo "incorrect username and password";
}
   else
     die ("This user does not exist");

}
else
    die("Please enter a username and a password")


?>
检查strtolower($username)==strtolower($dbusername)

我有点不明白你为什么要检查两次。如果用户名匹配,您已经签入了sql查询。另外,你的用户名不是唯一的吗?为什么要执行while循环而不仅仅是if(false!=($row=mysql\u fetch\u assoc($query)){}

另外,您应该确保定义了$dbusername和$dbpassword,因为如果找不到行,它们将不会被找到,并且当您访问它们时,PHP将发出关于未定义变量的警告

此外,您应该检查是否设置了$u POST键。我倾向于编写有点偏执的代码,但我喜欢很难获得通知/警告。如果您的服务器设置为显示错误,用户可能会看到非常难看的错误消息,甚至可能是敏感数据

此外,虽然我过于挑剔,但根据HTTP规范,位置头需要一个完整的URL,而不仅仅是一个相对文件名(尽管所有浏览器都只支持一个相对文件名)。

检查strtolower($username)==strtolower($dbusername)

我有点困惑为什么要检查两次。如果用户名匹配,您已经检查了sql查询。而且,您的用户名不是唯一的吗?为什么要执行while循环而不仅仅是if(false!=($row=mysql\u fetch\u assoc($query)){}

另外,您应该确保定义了$dbusername和$dbpassword,因为如果找不到行,它们将不会被找到,并且当您访问它们时,PHP将发出关于未定义变量的警告

此外,您应该检查是否设置了$u POST键。我倾向于编写有点偏执的代码,但我喜欢很难获得通知/警告。如果您的服务器设置为显示错误,用户可能会看到非常难看的错误消息,甚至可能是敏感数据

此外,虽然我过于挑剔,但根据HTTP规范,位置头需要一个完整的URL,而不仅仅是一个相对文件名(尽管所有浏览器都只支持一个相对文件名)。

嗨,请尝试strtolower()函数

$username = strtolower($_POST['username']);
选中此函数,然后重试strtolower()函数

$username = strtolower($_POST['username']);

选中此项

转换为小写/大写或进行不区分大小写的匹配

重要

请不要这样做:

$username = $_POST['username'];
$query = mysql_query("SELECT * FROM Users WHERE username='$username'");
因为它将允许黑客执行SQL注入!请清理您的所有输入

重要

编辑::另外,永远不要使用PHP来完成PHP的工作

$query = mysql_query("SELECT * FROM Users WHERE username='$username'");
如果错误,则应使用登录逻辑执行sql查询

那你就这么说吧

if(mysql_num_rows($query)){
   // Login logic
}
编辑::
SQL查询不区分大小写

转换为小写/大写或进行不区分大小写的匹配

重要

请不要这样做:

$username = $_POST['username'];
$query = mysql_query("SELECT * FROM Users WHERE username='$username'");
因为它将允许黑客执行SQL注入!请清理您的所有输入

重要

编辑::另外,永远不要使用PHP来完成PHP的工作

$query = mysql_query("SELECT * FROM Users WHERE username='$username'");
如果错误,则应使用登录逻辑执行sql查询

那你就这么说吧

if(mysql_num_rows($query)){
   // Login logic
}
编辑::
SQL查询是不区分大小写的

如果您的要求是允许登录,不管该情况是什么,我是指罗伯特、罗伯特、罗伯特、罗伯特等。然后,您可以考虑将用户名存储在数据库中的小写中,同时检索将用户名转换为小写,并执行查询

如果您的要求是允许登录权限的话。针对这种情况,我指的是罗伯特、罗伯特、罗伯特、罗伯特等。然后,您可以考虑将用户名存储在数据库中的小写中,同时检索将用户名转换为小写,并执行查询

< P>。
while ($row = mysql_fetch_assoc($query))
    {
            strtoupper($dbusername) = strtoupper($row['username']);
            $dbpassword = $row['password'];
    }

使用其中任何一个。
这将解决您的问题。

您可以通过两种方式进行检查:

while ($row = mysql_fetch_assoc($query))
    {
            strtoupper($dbusername) = strtoupper($row['username']);
            $dbpassword = $row['password'];
    }

使用其中任何一个。
这将解决您的问题。

MySQL中的一个可行替代方案:

mysql_query(
    "SELECT * FROM Users 
         WHERE LOWER( username) = LOWER( '" . mysql_real_escape_string( $username) . "')"
);

MySQL中的一个可行替代方案:

mysql_query(
    "SELECT * FROM Users 
         WHERE LOWER( username) = LOWER( '" . mysql_real_escape_string( $username) . "')"
);

MySQL在WHERE子句上不区分大小写(通常),因此不需要将其存储为小写。MySQL不区分大小写(通常)在WHERE子句上,因此不需要将其存储为小写。这是无效的PHP。也许你指的是带有==?的if子句?我的意思是使用任意一个。对,他可以使用strtolower或strtoupper,但给出的示例是无效语法。为什么人们使用while循环,即使预期只有一个结果?我已经看到了t经常在这里,我只是想知道这背后的逻辑…这个答案是基于他问的问题中的要求。这不是有效的PHP。也许你指的是带有==?的if子句?我的意思是使用其中任何一个。对,他可以使用strtolower或strtoupper,但给出的示例是无效语法。为什么人们使用t即使只期望一个结果,他也会循环?我经常在这里看到,我只是想知道这背后的逻辑…这个答案是基于他问的问题中的要求。这个脚本有很多问题。MD5被破坏了,它非常容易受到SQL注入的影响,如果两个用户可以拥有相同的username只有最后一个会被识别,否则你在一个应该只有一行的resultset上循环。这个脚本有太多问题。MD5被破坏了,它非常容易受到SQL注入的影响,如果两个用户可以拥有相同的用户名,那么只有最后一个会被识别,否则你在一个包含SQL的resultset上循环我们只有一排。