我很喜欢RBAC系统,但是prlomlem无法获得id并存储在会话中 在以下代码错误中:
致命错误:在非对象中调用成员函数prepare() 第19行的C:\ wamp \ www \ CRM \ login.php
<?php
require('connection.inc.php');
require_once "Role.class.php";
require_once "User.class.php";
session_start();
$username = $_POST['username'];
$password = $_POST['userpwd'];
if(!empty($username) ) // && $_SESSION['username'] == ''
{
try
{
$stmt = $dbhandle->prepare('SELECT `user_id` FROM `user` WHERE `username` = :username');
$stmt->execute(array('username' => $username));
$result = $stmt->fetchAll();
if (count($result))
{
foreach ($result as $row)
{
echo $row['user_id'];
$_SESSION['user_id'] = $row['user_id'];
}
}
else
{
echo "No rows returned.";
}
}
catch(PDOException $e)
{
echo $e->getMessage();
}
if(isset($_SESSION["user_id"]))
{
$user = new User($_SESSION["user_id"]);
if ($user->hasPermission("permission"))
{
//This user is allowed to do this
header("Location: dashbord.php");
exit();
}
if ($user->hasPermission("no_permission"))
{
//This user is NOT allowed to do this
header("Location: index.php");
}
}
}
else
{
?>
<script type="text/javascript">
alert('ERROR:Please enter your username and password');
//window.location=".html";
</script>
<?php
}
?>
答案 0 :(得分:0)
绑定您要搜索的值,并检查是否返回了行。
$stmt = $this->db->conn->prepare('SELECT `user_id` FROM `user` WHERE `username`=:username');
$stmt->execute(array('username' => $username));
$result = $stmt->fetchAll();
if (count($result)) {
foreach ($result as $row) {
echo $row['user_id'];
$_SESSION['user_id'] = $row['user_id'];
}
} else {
echo "No rows returned.";
}
答案 1 :(得分:0)
<强> UPDATE-1:强>
首先更新 connection.inc.php 文件,如下所示:
<?php
$hostname = "localhost";
$username = "root";
$password = "";
$db = "test";
try{ //connection to the database
// you missed 'mysql:host=$hostname;dbname=$dbname'.
$dbhandle = new PDO("mysql:host=$hostname;dbname=$db", $username, $password);
}
catch(PDOException $e) { echo $e->getMessage(); }
?>
现在,您的主要查询页面
try{
$query ="SELECT user_id FROM user WHERE username = ?";
$stmt = $dbhandle->prepare($query);
$stmt->bindParam(1, $username ); // bind the username
$stmt->execute(); // execute query
// returning rows form database
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['user_id']; // echo to varify the row data
$_SESSION['user_id'] = $row['user_id']; // can not understand why you make session for each user_id
}
}
catch(PDOException $e){ echo $e->getMessage();}