无法使用PHP登录到系统
我可以知道为什么它没有重定向到我一直在寻找的页面,我有一些问题,如果我输入正确的用户名,它仍然显示我输入了错误的用户名/密码。这里是我的代码片段。有人能帮我吗?非常感谢。有人知道怎么做吗无法使用PHP登录到系统,php,Php,我可以知道为什么它没有重定向到我一直在寻找的页面,我有一些问题,如果我输入正确的用户名,它仍然显示我输入了错误的用户名/密码。这里是我的代码片段。有人能帮我吗?非常感谢。有人知道怎么做吗 <?php require('db.php'); session_start(); // If form submitted, insert values into the database. if (isset($_POST['username'])){
<?php
require('db.php');
session_start();
// If form submitted, insert values into the database.
if (isset($_POST['username'])){
$username = stripslashes($_REQUEST['username']); // removes backslashes
$username = mysqli_real_escape_string($con,$username); //escapes special characters in a string
$password = stripslashes($_REQUEST['password']);
$password = mysqli_real_escape_string($con,$password);
//Checking is user existing in the database or not
$query = "SELECT * FROM `user` WHERE username='$username' and password='".md5($password)."'";
$result = mysqli_query($con,$query) or die(mysqli_error());
$rows = mysqli_num_rows($result);
if($rows==1){
$_SESSION['username'] = $username;
header("Location: home.php"); // Redirect user to homeA.php
}else{
echo "<center><div class='form'><br><br><h1>Username/password is incorrect.</h1><br/>Click here to <a href='main.php'>Try Again</a></div></center>";
}
}
else{
?>
首先,请使用准备好的语句而不是字符串连接来构造sql语句。解决这个问题的一个简单方法是使用PDO。其次,永远不要使用MD5对密码进行哈希运算。PHP中的密码散列是使用Password\u hash()
和Password\u verify()
函数完成的。
下面是一个使用前面提到的方法登录页面如何工作的示例
创建用户时,您还需要使用password\u hash()
散列密码
您是否尝试了带outstripslah
和'mysqli\u real\u escape\u string'的代码?而且,您直接在SQL
中使用变量的方式也会给代码带来风险。请更改它并开始使用准备好的语句。不要使用stripslashes
,也不要转义、参数化。不要使用md5。另外,在标题后退出
。输出$query
,并在数据库上执行它,它是否工作并返回结果?回答这样的问题很难,因为你没有回答一件事,你需要解决SQL注入问题,停止使用stripslashes,不要将密码存储为md5,不要使用$\u请求,在使用前检查VAR,在设置位置标题后退出,为这么少的代码和1
rep用户覆盖这么多内容。应在返回教程时关闭。。My2CentIt是否显示任何错误?那么您在谈论哪些安全缺陷?“您真的不应该使用mysqli。它存在一些安全缺陷”应该说“请使用而不是字符串连接来构造sql语句”。不幸的是,这可能无法回答“问题”——主要是因为问题的根源并不明显。从技术上讲,不是直接的安全缺陷,而是造成安全漏洞的巨大风险。Mysqli需要许多步骤来确保没有注入查询和类似操作的风险。PDO为您处理逃逸和更多问题,因此有可能错过重要步骤。
// Create a new PDO object using host (might be 127.0.0.1), dbname (your database name), user (your database username) and pass (your database password)
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
if (isset($_POST['username'])) {
$stmt = $dbo->prepare('SELECT * FROM user WHERE username = :username');
$stmt->bindParam(':username', $_POST['username']);
if ($stmt->execute()) {
$row = $stmt->fetch();
if (password_verify($_POST['password'], $row['password'])) {
// User password matched. Log them in
} else {
// User password didn't match
}
} else {
// There was a problem executing query
}
}
password_hash($password, PASSWORD_DEFAULT)