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 . { { $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['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"); exit; } } 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"); exit; } } { { { $_GET['action'] = ""; } . . // tu nieistotny fragment kodu . switch ($_GET['action']) { default: { $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"); ?>
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ę.