md5密码确认失败

时间:2017-04-22 13:18:02

标签: php mysql md5

是的,我知道md5不是一个好选择,我应该使用password_hash(),但我的托管解决方案是在php 5.3.3版本上。无论如何,这绝不应该是一个生产环境,只是为了培训目的,我很快就会改变提供者。

所以我设置了一些代码,我可以看到我注册的凭据,md5格式的密码都记录在db中。但是当我登录相同的凭据时,我收到了我设置的错误消息,"无效的电子邮件或传递"

这是我的代码:

echo 'Current PHP version: ' . phpversion();
include_once("config.php");
session_start();

if(isset($_POST['signup'])){
 $name = $_POST['name'];
 $email = $_POST['email'];
 $pass = md5($_POST['pass']);

$insert = $pdo->prepare("INSERT INTO users (name,email,pass)
values(:name,:email,:pass) ");
$insert->bindParam(':name',$name);
$insert->bindParam(':email',$email);
$insert->bindParam(':pass',$pass);
$insert->execute();
}
 elseif(isset($_POST['signin'])){
 $email = $_POST['email'];
 $pass = $_POST['pass'];

 $select = $pdo->prepare("SELECT * FROM users WHERE email='$email' and pass='$pass'");
 $select->setFetchMode();
 $select->execute();
 $data=$select->fetch();
 if($data['email']!=$email and $data['pass']!=$pass)
 {
  echo "invalid email or pass";
 }
 elseif($data['email']==$email and $data['pass']==$pass)
 {
 $_SESSION['email']=$data['email'];
    $_SESSION['name']=$data['name'];
header("location:aeroplane.php"); 
 }
 }

因此,注册工作正常,然后如果签名失败则其他。我在这里错过了什么?

-Thanks

3 个答案:

答案 0 :(得分:1)

密码在数据库中保存为md5,因此您应该在符号上对其进行哈希处理,以便正确比较它。

解决方案:

只需将此$pass = $_POST['pass']; 更改为$pass = md5($_POST['pass']);

即可

您的代码基本上是将非散列密码与散列密码进行比较,这是没有意义的。

答案 1 :(得分:1)

echo 'Current PHP version: ' . phpversion();
include_once("config.php");
session_start();

if(isset($_POST['signup'])){
 $name = $_POST['name'];
 $email = $_POST['email'];
 $pass = md5($_POST['pass']);

$insert = $pdo->prepare("INSERT INTO users (name,email,pass)
values(:name,:email,:pass) ");
$insert->bindParam(':name',$name);
$insert->bindParam(':email',$email);
$insert->bindParam(':pass',$pass);
$insert->execute();
}
 elseif(isset($_POST['signin'])){
 $email = $_POST['email'];
 $pass = md5($_POST['pass']);

 $select = $pdo->prepare("SELECT * FROM users WHERE email='$email' and pass='$pass'");
 $select->setFetchMode();
 $select->execute();
 $data=$select->fetch();
 if($data['email']!=$email and $data['pass']!=$pass)
 {
  echo "invalid email or pass";
 }
 elseif($data['email']==$email and $data['pass']==$pass)
 {
 $_SESSION['email']=$data['email'];
    $_SESSION['name']=$data['name'];
header("location:aeroplane.php"); 
 }
 }

在签名代码中更新了$pass = md5($_POST['pass']);

您还需要在登录时使用md5

答案 2 :(得分:0)

我看到您的代码并在登录代码后发现错误。
将代码$pass=$_POST['pass'];更新为

$pass = md5($_POST['pass']);
相关问题