Witam
Działanie mojego skryptu ma być proste, ma polegać na tym, że po zalogowaniu się danego użytkownika wyświetli mu się lista kursów ze statusami do których ma dostęp a do których nie.
Mam w bazie między innymi takie tabele jak:
- users (id, name, login, password) - tabela przechowuje dane użytkownika
- courses (id, lp, name, url, category_id) - tabela przechowuje kursy, linki do nich i id kategorii do jakiej należy dany kurs
- access_courses (id, id_user, id_course, status) - tabela przechowuje informacje który użytkownik ma dostęp do którego kursu i wyświetla odpowiedni status
To mi działa w połączeniu z kodem, który sobie napisałem, ale problem jest w linii 75. Dokładnie w zapytaniu
SELECT * FROM courses c, access_courses ac WHERE ac.id_user = $_SESSION['id'] && ac.id_course = c.id ORDER BY lp ASC
Jeżeli to wstawię to jest problem, natomiast jeżeli wstawię na sztywno id użytkownika np. tak
SELECT * FROM courses c, access_courses ac WHERE ac.id_user = 1 && ac.id_course = c.id ORDER BY lp ASC
to wszystko jest idealnie. Jednak tak jak wspomniałem będzie więcej użytkowników i id chcę pobierać z sesji.
Poniżej umieszczam swój fragment kodu. Proszę o przeanalizowanie go i podpowiedź jak to naprawić.
<?php
.
. // tu nieistotny fragment kodu
.
if (isset($_POST['login']) && isset($_POST['password'])) {
if (!empty($_POST['login']) && !empty($_POST['password'])) {
$stmt = $pdo->prepare("SELECT * FROM users where login = '".$login."' && password = '".$password."';");
$stmt->execute();
if ($row = $stmt->fetchAll(PDO::FETCH_ASSOC))
{
$_SESSION['id'] = $row['id'];
$_SESSION['online'] = 1;
$_SESSION['time'] = time(); $_SESSION['user'] = $login;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
else
{
$logon = new cTemplate;
$logon->assign['msg'] = "podałeś błędny login lub hasło!<br>spróbuj ponownie";
$page->assign['container'] = $logon->parse("templates/logon.html");
$page->assign['title'] = "Logowanie";
$main->assign['page'] = $page->parse("templates/page.html");
echo $main->parse("templates/index.html"); }
}
else
{
$logon = new cTemplate;
$logon->assign['msg'] = "nie wprowadziłeś wszystkich danych<br>spróbuj ponownie";
$page->assign['container'] = $logon->parse("templates/logon.html");
$page->assign['title'] = "Logowanie";
$main->assign['page'] = $page->parse("templates/page.html");
echo $main->parse("templates/index.html"); }
}
if (isset($_SESSION['online']) && isset($_SESSION['time']) && $_SESSION['user'] && ($_SESSION['online']===1
)) {
if (time()-$_SESSION['time'] < 900
) {
$_SESSION['time'] = time();
if (!isset($_GET['action'])) {
$_GET['action'] = "";
}
.
. // tu nieistotny fragment kodu
.
switch ($_GET['action'])
{
default:
if (isset($_GET['cat_id'])) {
$cat_id = $_GET['cat_id'];
$stmt = $pdo->prepare("SELECT * FROM courses c, access_courses ac WHERE ac.id_user = 1 && ac.id_course = c.id && c.category_id = $cat_id ORDER BY lp ASC");
$stmt->execute();
}
else
{
$stmt = $pdo->prepare("SELECT * FROM courses c, access_courses ac WHERE ac.id_user = $_SESSION['id'] && ac.id_course = c.id ORDER BY lp ASC");
$stmt->execute();
}
.
. // tu fragment wyświetlający listę kursów dostępnych dla danego użytkownika
.
}
$page->assign['container'] = $panel->parse("templates/panel.html");
}
else
{
$logon = new cTemplate;
$logon->assign['msg'] = "przekroczono czas bezczynności<br>zaloguj się ponownie";
$page->assign['container'] = $logon->parse("templates/logon.html");
$page->assign['title'] = "Logowanie";
}
}
else
{
$logon = new cTemplate;
$logon->assign['msg'] = "<br>podaj login i hasło<br>";
$page->assign['container'] = $logon->parse("templates/logon.html");
$page->assign['title'] = "Witaj na portalu";
}
$main->assign['page'] = $page->parse("templates/page.html");
echo $main->parse("templates/index.html"); ?>
Wydaje mi się że problem może być z tym że sesja nie jest globalna, ale może się mylę. Proszę o pomoc.
Z góry bardzo dziękuję.