仅验证来自DB的登录凭据

时间:2016-10-04 04:58:33

标签: php mysql

<?php

session_start();
include("connection.php");

if (mysqli_connect_error()) {
    die("Could not connect to database");
if ($_POST['submit'] == "Login") {
    $query = "SELECT * FROM EmployeeTable WHERE name='"
            . mysqli_real_escape_string($link, $_POST['name'])
            . "'AND password='" 
            . md5(md5($_POST['name']) . $_POST['password'])
            . "'LIMIT 1";
    $result = mysqli_query($link, $query);
    $row = mysqli_fetch_array($result);
    if ($row) {
        $_SESSION['id'] = $row['id'];
        header("Location: http://www.ccm.net/forum/");
    } else {
        $error = "We could not find a user with that email and password. Please try again.";
    }
}    
?>

我上面的代码只是为了登录用户。我有一个用户名和密码的表。我不想创建一个注册按钮,只是一个登录按钮,因为密码将是他们的'id'本身。我能够连接到db。

请帮助我,因为登录后我被带到一个空白页面。

2 个答案:

答案 0 :(得分:1)

首先关闭所有:您使用此代码容易受到SQL注入攻击。请使用参数化查询,这样您就不会忘记转义在查询中使用的值。

$mysqli = new Mysqli($host, $username, $password, $database);
$mysqli->prepare('SELECT * FROM EmployeeTable WHERE name = ? AND password = ? LIMIT 1');
$mysqli->bind_param('ss', $name, $password);
$mysqli->execute();
$result = $mysqli->fetch_array();

您也不应该使用md5进行密码哈希。使用内置的password_*函数。

password_hash可用于散列密码,如下所示:

$hash = password_hash($password, PASSWORD_DEFAULT);

这也适用于所谓的salt来加强对字典攻击的哈希。

如果要验证密码,可以使用password_verify来验证存储哈希的密码,如下所示:

$is_correct = password_verify($password, $hash);

使用这些方法你不太可能弄乱任何东西。

您问题的直接答案可以是:if ($_POST['submit'] == "Login")if($row)。我会使用count()检查找到的结果数量:if(count($row) > 0)

答案 1 :(得分:0)

在没有看到HTML的其余部分的猜测中,它可能不满足if $ _POST [&#34;提交&#34;]声明:

if ($_POST['submit'] == "Login") {

并且只是结束脚本,因为没有其他选项。也许检查你的表单是POST,按钮名称实际上是&#34;提交&#34;它的价值是&#34;登录&#34;

相关问题