gpt4 book ai didi

php - 为什么如果条件不处理 php-mysql 中的用户名字段?

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:03 24 4
gpt4 key购买 nike

如果我输入错误的密码,它会显示“错误的用户名或密码”,但如果输入错误的用户名和正确的密码,它什么也不会显示。为什么 ?我应该在代码中更改什么?

<?php
$name = $_POST['username'];
$password=$_POST['pwd'];

$dbc = mysql_connect('localhost', 'username', 'password') or die();

mysql_select_db("dbname") or die();

$result = mysql_query("SELECT * FROM table WHERE uname='$name'") or die(mysql_error());
while($row = mysql_fetch_array($result))
{
if($row['uname']==$name && $row['pword']==$password)
{
echo 'Successfully logged in <br />';
break;
}
else
{
echo 'Wrong username or password';
}
}
mysql_close($dbc);
?>

最佳答案

因为如果您输入错误的用户名,查询将不会返回任何内容。

那么你就不会进入 while 循环。

您可以更改查询:

$result = mysql_query("SELECT * FROM table WHERE uname='".addslashes($name)."' and pword='".addslashes($password)."'");

然后只使用 mysql_fetch_row() 一次(删除你的 while 循环)。

编辑

<?php
function hash_password($password){
$myVerySecretSalt = "pREkeSw2"; //don't use this string, create your own random one!
return md5($myVerySecretSalt.$password.$myVerySecretSalt);
}

$name = $_POST['username'];
$password = hash_password($_POST['pwd']);

$dbc = mysqli_connect('localhost', 'username', 'password') or die();

mysqli_select_db("dbname") or die();

$mysql_result = mysqli_query("SELECT * FROM table WHERE uname='".addslashes($name)."' and pword='".$password."'");
$result = mysqli_fetch_row($mysql_result);
mysqli_close($dbc);

if(!$result){
echo "Wrong username or password.";
}else{
var_dump($result);
echo "Successfully logged in.";
}

?>

已编辑 MySQLi 的用法,因为 mysql 自 PHP 5.5 起已弃用

编辑为明文密码。

在数据库中以明文形式存储密码从来都不是一件好事,因为它们可能在 sql 注入(inject)的情况下被盗。

保护用户密码的一种方法是对它们进行哈希处理,下面是一个基本实现:

首先创建一个散列密码的函数:

function hash_password($password){
$myVerySecretSalt = "pREkeSw2"; //don't use this string, create your own random one!
return md5($myVerySecretSalt.$password.$myVerySecretSalt);
}

然后将第三行 $password = $_POST['pwd']; 替换为这一行:$password = hash_password($_POST['pwd']);

给你! (请记住在创建用户帐户时对密码使用相同的功能)

关于php - 为什么如果条件不处理 php-mysql 中的用户名字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22101284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com