这是我在尝试登录网站时编写的代码。每次登录时,我都会得到错误的详细信息,我已经检查了好几次详细信息,以便它们匹配,我确实得到了一个清晰的数据库连接,所以也没有问题。我没有md5加密,所以我也想过。。。我在mysql数据库中使用LONGTEXT作为数据类型来存储名称和密码。我在数据库的users表中得到了3行信息。ID,姓名,密码,按照我写的名字命名。
我希望这是足够的信息来获得一些帮助?提前感谢!
<?php
session_start();
include_once 'dbconnect.php';
if(isset($_SESSION['user'])!=""){
header("Location: index.php");
}
if(isset($_POST['login'])){
$email = mysql_real_escape_string($_POST['email']);
$upass = mysql_real_escape_string($_POST['pass']);
$res = mysql_query("SELECT * FROM users WHERE Name='$email'");
$row = mysql_fetch_array($res);
if($row['password']==$upass){
$_SESSION['user'] = $row['user_id'];
header("Location: index.php");
} else {
?>
<script>alert('wrong details');</script>
<?php
}
}
?>
您不需要这样做,因为无论如何都不会将其传递给查询。
$upass = mysql_real_escape_string($_POST['pass']);
密码的值不等于转义密码的值。所以这是不准确的。
if($row['password']==$upass){}
你可以做一些类似的事情
if($row['password']==$_POST['pass']){}
我建议对您的脚本进行以下修复。。
1) 请确保该名称在数据库表中是唯一的。。例如,如果某人已经以"admin"的名称注册,则不允许任何其他人将其用作用户名(或您的姓名)。
2) 在查询中检查名称和密码本身。
请参阅以下修改后的代码。。
<?php
session_start();
include_once 'dbconnect.php';
if(isset($_SESSION['user'])!="")
{
header("Location: index.php");
}
if(isset($_POST['login']))
{
$email = mysql_real_escape_string($_POST['email']);
$upass = mysql_real_escape_string($_POST['pass']);
$res = mysql_query("SELECT * FROM users WHERE Name='$email' AND password = '$upass' ");
if($res) // check if there is any error in the query
{
if(mysql_num_rows($res) == 1) // check for the number of Name - password pair
{
$row = mysql_fetch_array($res);
$_SESSION['user'] = $row['user_id'];
header("Location: index.php");
}
else
{
?>
<script>alert('wrong details');</script>
<?php
}
}
else
{
echo "Error while log in: ".mysql_error();
}
}
?>
注意:1) 停止使用mysql_。不赞成使用mysqli_或PDO
2) 确保在PHP代码中使用了正确的列名,类似于db表中的列名。