0

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

到目前为止,我有以下 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 程序员,如果这看起来含糊不清,我深表歉意,任何帮助将不胜感激

4

2 回答 2

0

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

于 2013-08-12T18:51:59.820 回答
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;
    }
}

然后您必须使用您的数据库对象、用户和传递实际调用该函数:

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

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

于 2013-08-12T18:59:26.300 回答