Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Panel klientów
Forum PHP.pl > Forum > Przedszkole
lukas123
Witam!

Szukam rozwiązania mojego problemu.
Otóż chciałbym, aby klient po zalogowaniu miał dostęp do swojego panelu pod adersem np. http://nazwa.pl/panel.php?user=login ale inny użytkownik, z panelem pod adresem np. http://nazwa.pl/panel.php?user=nick już nie miał dostępu do jego panelu. Strona http://nazwa.pl/panel.php?user=login miała byb być generowana automatycznie przy logowaniu. Każdy inny panel miałby inną treść.

Moje skrypty:

Baza danych
  1. CREATE TABLE IF NOT EXISTS `user` (
  2. `id_user` smallint(6) NOT NULL AUTO_INCREMENT,
  3. `login` varchar(128) COLLATE utf8_polish_ci NOT NULL,
  4. `password` varchar(128) COLLATE utf8_polish_ci NOT NULL,
  5. PRIMARY KEY (`id_user`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2 ;
  7.  
  8. INSERT INTO `user` (`id_user`, `login`, `password`) VALUES
  9. (1, 'admin', '21232f297a57a5a743894a0e4a801fc3');


Plik index.php
  1. <?php session_start();
  2. require_once('db.php');
  3. ?>
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <link href="css/style.css" rel="stylesheet" type="text/css" />
  8. <title>Panel klienta</title>
  9. </head>
  10.  
  11. <body>
  12.  
  13. <?php
  14. /* jeżeli nie wypełniono formularza - to znaczy nie istnieje zmienna login, hasło i sesja auth
  15.   * to wyświetl formularz logowania
  16.   */
  17. if (!isset($_POST['login']) && !isset($_POST['password']) && $_SESSION['auth'] == FALSE) {
  18. ?>
  19.  
  20. <form name="form-logowanie" action="index.php" method="post">
  21. Login: <input type="text" name="login" /><br />
  22. Hasło: <input type="password" name="password" />
  23. <input type="submit" name="zaloguj" value="Zaloguj" />
  24. </form>
  25.  
  26. <?php
  27. }
  28. /* jeżeli istnieje zmienna login oraz password i sesja z autoryzacją użytkownika jest FALSE to wykonaj
  29.   * skrypt logowania
  30.   */
  31. elseif (isset($_POST['login']) && isset($_POST['password']) && $_SESSION['auth'] == FALSE) {
  32.  
  33. // jeżeli pole z loginem i hasłem nie jest puste
  34. if (!empty($_POST['login']) && !empty($_POST['password'])) {
  35.  
  36. // dodaje znaki unikowe dla potrzeb poleceń SQL
  37. $login = mysql_real_escape_string($_POST['login']);
  38. $password = mysql_real_escape_string($_POST['password']);
  39.  
  40. // szyfruję wpisane hasło za pomocą funkcji md5()
  41. $password = md5($password);
  42.  
  43. /* zapytanie do bazy danych
  44.   * mysql_num_rows - sprawdzam ile wierszy odpowiada zapytaniu mysql_query
  45.   * mysql_query - pobierz wszystkie dane z tabeli user gdzie login i hasło odpowiadają wpisanym danym
  46.   */
  47. $sql = mysql_num_rows(mysql_query("SELECT * FROM `user` WHERE `login` = '$login' AND `password` = '$password'"));
  48.  
  49. // jeżeli powyższe zapytanie zwraca 1, to znaczy, że dane zostały wpisane poprawnie i rejestruję sesję
  50. if ($sql == 1) {
  51.  
  52. // zmienne sesysje user (z loginem zalogowanego użytkownika) oraz sesja autoryzacyjna ustawiona na TRUE
  53. $_SESSION['user'] = $login;
  54. $_SESSION['auth'] = TRUE;
  55.  
  56. // przekierwuję użytkownika na stronę z ukrytymi informacjami
  57. echo '<meta http-equiv="refresh" content="1; URL=hide.php">';
  58. echo '<p style="padding-top:10px";><strong>Proszę czekać...</strong><br />Trwa logowanie i wczytywanie danych</p>';
  59. }
  60.  
  61. // jeżeli zapytanie nie zwróci 1, to wyświetlam komunikat o błędzie podczas logowania
  62. else {
  63. echo '<p style="padding-top:10px;color:red";>Błąd podczas logowania do systemu<br />';
  64. echo '<a href="index.php">Wróć do formularza</a></p>';
  65. }
  66. }
  67.  
  68. // jeżeli pole login lub hasło nie zostało uzupełnione wyświetlam błąd
  69. else {
  70. echo '<p style="padding-top:10px;color:red";>Błąd podczas logowania do systemu<br />';
  71. echo '<a href="index.php">Wróć do formularza</a></p>';
  72. }
  73. }
  74.  
  75. // jeżeli sesja auth jest TRUE to przekieruj na ukrytą podstronę
  76. elseif ($_SESSION['auth'] == TRUE && !isset($_GET['logout'])) {
  77. echo '<meta http-equiv="refresh" content="1; URL=panel.php">';
  78. echo '<p style="padding-top:10px"><strong>Proszę czekać...</strong><br />Trwa wczytywanie danych</p>';
  79. }
  80.  
  81. // wyloguj się
  82. elseif ($_SESSION['auth'] == TRUE && isset($_GET['logout'])) {
  83. $_SESSION['user'] = '';
  84. $_SESSION['auth'] = FALSE;
  85. echo '<meta http-equiv="refresh" content="1; URL=index.php">';
  86. echo '<p style="padding-top:10px"><strong>Proszę czekać...</strong><br />Trwa wylogowywanie</p>';
  87. }
  88. ?>
  89.  
  90. </body>
  91.  
  92. </html>


plik db.php
  1. <?php
  2. /*Połączenie z bazą danych*/
  3. $dbhost = 'localhost';
  4. $dblogin = 'root';
  5. $dbpass = '';
  6. $dbselect = 'baza';
  7. mysql_connect($dbhost,$dblogin,$dbpass);
  8. mysql_select_db($dbselect) or die("Błąd przy wyborze bazy danych");
  9. mysql_query("SET CHARACTER SET UTF8");
  10. ?>


i plik panel.php
  1. <?php session_start();
  2. require_once('db.php');
  3. ?>
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <link href="css/style.css" rel="stylesheet" type="text/css" />
  8. <title>Panel klienta</title>
  9.  
  10. </head>
  11.  
  12. <body>
  13.  
  14. <?php if ($_SESSION['auth'] == TRUE) {
  15. echo 'UKRYTA TREŚĆ!<br />';
  16. echo '<a href="index.php?logout">Wyloguj się</a>';
  17. }
  18. else {
  19. echo '<meta http-equiv="refresh" content="0; URL=index.php">';
  20. echo '<p style="padding-top:10px;color:#ff0";><strong>Próba nieautoryzowanego dostępu...</strong><br />Trwa przenoszenie do strony głównej</p>';
  21. }
  22. ?>
  23.  
  24. </body>
  25.  
  26. </html>


Proszę o pilną pomoc!
nospor
Strona panelu nie potrzebuje zadnego usera w linku
czyli nie: http://nazwa.pl/panel.php?user=nick
a poprostu: http://nazwa.pl/panel.php

Skoro panel ma sie wyswietlac dla zalogowanego usera, to wchodzac w panel, przeciez wiesz kto jest zalogowany i wyswietlasz tylko jego dane
lukas123
Mógłbyś mi to przybliżyć jakimś kodzikiem? smile.gif
nospor
No ale czego nie wiesz? Jak pobrac z sesji danych aktualnego usera?
$_SESSION['user']
Dobrze by bylo, zebys zapisywac do sesji tez ID usera

Czegos innego? To napisz czego. Jak oczekujesz, ze ktos za Ciebie to zrobi, to dzial Gielda Ofert sie klania.
lukas123
Nie chcę pobierać danych sesji tylko osobne informacje.
nospor
facepalmxd.gif

Ale w sesji masz info, dla jakiego usera chcesz te dane pobrac. Przeciez ci to tlumacze od poczatku. Majac te dane z sesji, czyli na chwile obecna login usera, wyswietlaj mu teraz co chcesz.

ps: i nie zakladaj 100 watkow na forum o tym samym.
lukas123
Czyli muszę w bazie dodać
  1. `info` varchar(128) COLLATE utf8_polish_ci NOT NULL,


a w php
  1. $_SESSION['info']


?
Turson
Czy ty w ogóle nadążasz z rozumowaniem tego co nospor pisze? Masz w sesji zachowany np. nick usera - $_SESSION['user'] czy id - $_SESSION['user_id'] i na podstawie tego budujesz panel.
nospor
piszac "info" mialem na mysli, ze wiesz jaki user jest aktualnie zalogowany. W sesji masz zapisany jego LOGIN. Zacznij prosze czytac w koncu z troche wiekszą uwagą.
Mając ten LOGIN wiesz dla jakiego usera wyswietlasz panel i co masz wyswietlic.
lukas123
Nie jestem w tym temacie ogarnięty i nie wiem jak to zrobić :/
phpion
Przecież do $_SESSION['user'] zapisujesz login zalogowanego użytkownika, czyli możesz go wyświetlić:
  1. echo 'UKRYTA TREŚĆ dla '.$_SESSION['user'].'!<br />';

Do sesji zapisuj też ID użytkownika (nie tylko login), dzięki czemu w zapytaniach do bazy będziesz mógł ograniczyć dane do zalogowanego użytkownika:
  1. $query = 'SELECT * FROM tabela WHERE user_id = '.$_SESSION['user_id'];

W powyższym pominąłem kwestie zabezpieczeń, ale generalnie tak mogłoby to działać.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.