Php 登录不太好
我试图在我的新登录系统中工作,我用做了一个简单的密码,并用下一个代码将哈希传递到我的MySQL表 makepass.php dologin.php 所以我试着用testpass和whoala登录:无效密码 有什么想法吗?如果可以,我看不出任何语法或其他问题。$dbconn=mysqli\u query$query,选择*FROM cm\u users,其中Username='$Username'或diemysqli\u error$query 应该看起来更像 $userQuery=mysqli\u query$variableToConnectToDatabase,从cm\u用户中选择*用户名=“$Username”和密码=“$Password”限制1 不确定你的主要目标是什么。您希望用户能够输入自己的密码,还是密码应该是恒定的?$dbconn=mysqli\u query$query,选择*FROM cm\u users,其中Username='$Username'或diemysqli\u error$query 应该看起来更像 $userQuery=mysqli\u query$variableToConnectToDatabase,从cm\u用户中选择*用户名=“$Username”和密码=“$Password”限制1 不确定你的主要目标是什么。您希望用户能够输入自己的密码,还是密码应该是恒定的?您不应该是这方面的foreach,但首先要查询,获取您不使用的数组,然后将其与行的密码进行比较 旁注:用您自己的凭证替换xxx,xxx,xxx。然而,使用$query并不是一个应该用作连接变量的词,因为它非常容易混淆 甚至我在写我的答案时也感到困惑。使用$connection或$conn,我在这里更改了它们,请改用它Php 登录不太好,php,mysql,Php,Mysql,我试图在我的新登录系统中工作,我用做了一个简单的密码,并用下一个代码将哈希传递到我的MySQL表 makepass.php dologin.php 所以我试着用testpass和whoala登录:无效密码 有什么想法吗?如果可以,我看不出任何语法或其他问题。$dbconn=mysqli\u query$query,选择*FROM cm\u users,其中Username='$Username'或diemysqli\u error$query 应该看起来更像 $userQuery=mysqli\
$conn = new mysqli("xxx", "xxx", "xxx", "xxx");
if ($conn->connect_error) {
die('Connect Error (' . $conn->connect_errno . ') '
. $conn->connect_error);
}
if(isset($_POST['login'])) {
$username = $_POST['username']; // you could use a conditional !empty() here
$password = $_POST['password']; // here also
$query = "SELECT * FROM cm_users WHERE Username = '".$conn->real_escape_string($username)."';";
$result = $conn->query($query);
// error checking on the query
if (!$result) {
echo "<p>There was an error in query: $query</p>";
echo $conn->error;
}
$row_hash = $result->fetch_array();
if (password_verify($password, $row_hash['Password'])) {
echo "Welcome!";
}
else{
echo "Invalid";
}
}
检查您的查询是否有错误:
和错误报告:
您不应该是foreach,但首先要查询,获取您不使用的数组,然后将其与行的密码进行比较
旁注:用您自己的凭证替换xxx,xxx,xxx。然而,使用$query并不是一个应该用作连接变量的词,因为它非常容易混淆
甚至我在写我的答案时也感到困惑。使用$connection或$conn,我在这里更改了它们,请改用它
$conn = new mysqli("xxx", "xxx", "xxx", "xxx");
if ($conn->connect_error) {
die('Connect Error (' . $conn->connect_errno . ') '
. $conn->connect_error);
}
if(isset($_POST['login'])) {
$username = $_POST['username']; // you could use a conditional !empty() here
$password = $_POST['password']; // here also
$query = "SELECT * FROM cm_users WHERE Username = '".$conn->real_escape_string($username)."';";
$result = $conn->query($query);
// error checking on the query
if (!$result) {
echo "<p>There was an error in query: $query</p>";
echo $conn->error;
}
$row_hash = $result->fetch_array();
if (password_verify($password, $row_hash['Password'])) {
echo "Welcome!";
}
else{
echo "Invalid";
}
}
检查您的查询是否有错误:
和错误报告:
请尝试将dologin.php编辑为
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
include('includes/functions.php');
if(isset($_POST['login'])) {
if(isset($_POST['username'])) {
if(isset($_POST['password'])) {
$username = $_POST['username'];
$hash = password_hash($_POST['password'], PASSWORD_DEFAULT);
$dbconn = mysqli_query($query, "SELECT * FROM cm_users WHERE Username = '$username'") or die(mysqli_error($query));
foreach ($dbconn as $user) {
if ($hash == $user['Password']) {
$_SESSION['user'] = $user['Username'];
} else {
echo 'Invalid password!';
}
}
} else {
echo 'Invalid username!';
}
}
}
?>
请尝试将dologin.php编辑为
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
include('includes/functions.php');
if(isset($_POST['login'])) {
if(isset($_POST['username'])) {
if(isset($_POST['password'])) {
$username = $_POST['username'];
$hash = password_hash($_POST['password'], PASSWORD_DEFAULT);
$dbconn = mysqli_query($query, "SELECT * FROM cm_users WHERE Username = '$username'") or die(mysqli_error($query));
foreach ($dbconn as $user) {
if ($hash == $user['Password']) {
$_SESSION['user'] = $user['Username'];
} else {
echo 'Invalid password!';
}
}
} else {
echo 'Invalid username!';
}
}
}
?>
规则1。。。。使用准备好的语句/绑定变量来防止SQL注入。规则2。。。。对于无效用户名和无效密码,不要有不同的消息,这是在告诉潜在的黑客对他们有用的信息,你在查询中有错误$dbconn=mysqli_query$query,从cm_用户中选择*用户名=“$Username”。以过程方式使用mysqli_查询时需要2个参数;+始终在语句中添加“{$variable}”。@MilosM它们的方法没有任何问题。您不应该在这里使用foreach。另外,我们不知道您的POST数组是否有值。@MilosM其中Username='$Username'有效。除非用户名是john's barber,否则他们需要避开它。规则1。。。。使用准备好的语句/绑定变量来防止SQL注入。规则2。。。。对于无效用户名和无效密码,不要有不同的消息,这是在告诉潜在的黑客对他们有用的信息,你在查询中有错误$dbconn=mysqli_query$query,从cm_用户中选择*用户名=“$Username”。以过程方式使用mysqli_查询时需要2个参数;+始终在语句中添加“{$variable}”。@MilosM它们的方法没有任何问题。您不应该在这里使用foreach。另外,我们不知道您的POST数组是否有值。@MilosM其中Username='$Username'有效。除非用户名是john's barber,否则他们需要转义。你怎么知道$query不是他们的连接?不!在查询中使用密码将永远找不到匹配项,您需要使用查询检索哈希密码值以使用Password_verifyNope,之前刚刚使用过md5,我想使用哈希密码,以确保系统安全。这是登录部分,它检查散列密码是否与用户密码相匹配$2y$10$SJKb1N88oDhU83iNQ4SR6uMujG8Q3jcqKc0jX851lMgohleQEDiFi密码在表中看起来像这样。密码验证函数声明在哪里?这真是一团糟。。真正的问题是。。。你到底想对代码做什么?你怎么知道$query不是他们的连接?不!在查询中使用密码将永远找不到匹配项,您需要使用查询检索哈希密码值以使用Password_verifyNope,之前刚刚使用过md5,我想使用哈希密码,以确保系统安全。这是登录部分,它检查散列密码是否与用户密码相匹配$2y$10$SJKb1N88oDhU83iNQ4SR6uMujG8Q3jcqKc0jX851lMgohleQEDiFi密码在表中看起来像这样。密码验证函数声明在哪里?这真是一团糟。。真正的问题是。。。你到底想用代码做什么??
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
include('includes/functions.php');
if(isset($_POST['login'])) {
if(isset($_POST['username'])) {
if(isset($_POST['password'])) {
$username = $_POST['username'];
$hash = password_hash($_POST['password'], PASSWORD_DEFAULT);
$dbconn = mysqli_query($query, "SELECT * FROM cm_users WHERE Username = '$username'") or die(mysqli_error($query));
foreach ($dbconn as $user) {
if ($hash == $user['Password']) {
$_SESSION['user'] = $user['Username'];
} else {
echo 'Invalid password!';
}
}
} else {
echo 'Invalid username!';
}
}
}
?>