检查用户凭据PHP MySQL

时间:2013-08-12 18:43:40

标签: php mysql pdo

我试图在我的网站上创建一个允许用户登录的用户管理部分。

到目前为止,我有以下PDO Conenction类......

    <?php 

class connection{

private $host = 'localhost';
private $dbname = 'dbname';
private $username = 'liam@';
private $password ='Password';  

public $con = '';

function __construct(){

    $this->connect();   

}

function connect(){

    try{

        $this->con = new PDO("mysql:host=$this->host;dbname=$this->dbname",$this->username, $this->password);
        $this->con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);


    }catch(PDOException $e){

        echo 'We\'re sorry but there was an error while trying to connect to the database';
        file_put_contents('connection.errors.txt', $e->getMessage().PHP_EOL,FILE_APPEND);

    }
}   
}

?>

我的check-login.php看起来像......

<?php

include 'assets/connection.class.php';


$username=$_POST['username']; 
$password=$_POST['password'];


function login(PDO $db, $username, $password) {
$user_id = user_id_from_username($db, $username);
$password = md5($password);
$stmt = $db->prepare('SELECT COUNT(`user_id`) FROM `users` WHERE `username` = ? AND `password` = ?');
$stmt->bindParam(1, $username);
$stmt->bindParam(2, $password);
$stmt->execute();
if($stmt->fetchColumn() > 0) {
    return $user_id;
} else {
    return false;
    echo 'failed';
}
}
?>

我的问题是我没有从check-login.php得到任何结果?我不是一个php程序员,所以如果这看起来模糊,请道歉,任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

这可能是一个问题     $ user_id = user_id_from_username($ db,$ username); 由于我们不知道该函数(user_id_from_username)正在做什么,因此可能是     return $ user_id; 只是返回NULL或空字符串。

答案 1 :(得分:0)

首先,您必须实例化要启动的连接的类。请在包含后放置。

$connection = new connection();

将连接对象设置为变量后,没有理由在函数调用中重新实例化对象。这是重构的代码:

function login($db, $username, $password) {
    $user_id = user_id_from_username($db, $username);
    $password = md5($password);
    $stmt = $db->prepare('SELECT COUNT(`user_id`) FROM `users` WHERE `username` = ? AND `password` = ?');
    $stmt->bindParam(1, $username);
    $stmt->bindParam(2, $password);
    $stmt->execute();
    if($stmt->fetchColumn() > 0) {
        return $user_id;
    } else {
        echo 'failed';
        return false;
    }
}

然后你必须实际用数据库对象user调用该函数并传递:

login($connection, 'USERNAME STRING', 'PASSWORD STRING');

$ connection是先前声明的对象变量,所有大写字符串应该是用户和pass的实际字符串。我不能在环境中测试这段代码,所以我不能保证这个开箱即用,但它至少会让你指向正确的方向。此外,在处理表单提交的数据和SQL查询时,您需要采取一些预防措施。取一些precautions to avoid SQL injection