1
我想在使用Slim的php中設置會話變量。我希望將用戶標識存儲爲其他地方使用的變量。我認爲我的函數中有語法或順序錯誤。
這裏是我的功能設置變量:
function loadAdmin()
{
//Set new session and save user id to variable
if (!isset($_SESSION)) {
session_start();
}
$app = \Slim\Slim::getInstance();
$token = $app->request->headers->get('token');
$token_exists = getToken_Validate();
if($token_exists) {
$sql = "SELECT id, title AS admin_title, last_name AS admin_last_name
FROM admin WHERE token=:token";
try {
$db = getDB();
$stmt = $db->prepare($sql);
$stmt->bindValue(':token', $token);
$stmt->execute();
$admin = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo json_encode($admin);
$_SESSION['uid'] = $stmt['id'];
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
} else {
echo '{"err": "failed"}';
}
}
這裏是我的函數獲取特定數據時使用的變量:
function loadDashboard()
{
session_start();
$uid = $_SESSION['uid'];
$token_exists = getToken_Validate();
if ($token_exists) {
//Get number of rows from multiple tables
$sql = "SELECT
(SELECT COUNT(*) FROM users WHERE id=:uid) AS total_students,
(SELECT COUNT(*) FROM subjects) AS total_subjects,
(SELECT COUNT(*) FROM notes) AS total_notes";
try {
$db = getDB();
$stmt = $db->prepare($sql);
$stmt->bindValue(':uid', $uid);
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo json_encode($users);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
} else {
echo '{"err": "failed"}';
}
}
苗條的錯誤嘗試後,我得到loadDashboard是:
未定義的索引:uid
對不起,如果我的PHP是可怕的,任何幫助表示讚賞。
所以它告訴我uid還沒有設置。在將其分配給變量(在使用之前)之前,您需要檢查它是否存在。如果不存在,則需要運行該過程以首先進行設置。 – smozgur
你是否試圖用'var_dump()'檢查'$ _SESSION'?您也可以考慮採用[Slim的會話/ cookie管理](http://docs.slimframework.com/sessions/cookies/) – phaberest
您正在使用什麼版本的Slim?看起來像2.x由:: getInstance() –