Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]niedziałający warunek na admina.
Forum PHP.pl > Forum > Przedszkole
GoOx
Cześć biggrin.gif

Mam panel logowania oraz rejestracji stworzyłem coś co miało działać jak ranga admin czyli poziom 3 w tabeli..

przy logowaniu dodałem taką linijkę.

  1. $loginl = $_SESSION['uzytkownik'];

$loginl to zmienna z pola z nazwą użytkownika.
jest ona wstawiona w warunku zaraz po zalogowaniu.

skrypt który miał działać dla poziomu 3.

  1. $_SESSION['uzytkownik'] = $uzytkownik;
  2. $poziom = "SELECT poziom FROM uzytkownicy WHERE nick = '$uzytkownik' ";
  3. $res = mysql_query($poziom);
  4. $admin = mysql_fetch_row($res);
  5. if($admin[0] == "3") {
  6. if($_SESSION['admin']=='tak');
  7. }
  8. if($_SESSION['admin']=='tak') {
  9. echo "admin";
  10. }
  11.  

napis "admin" nie wyświetla się nie wiem nawet w czym jest problem sad.gif



Proszę o pomoc.
lobopol
if($_SESSION['admin']=='tak'); linia 6 nie powinno być
  1. $_SESSION['admin']='tak';
vokiel
Dziwny kod..

  1. $_SESSION['uzytkownik'] = $uzytkownik;
  2. $poziom = "SELECT poziom FROM uzytkownicy WHERE nick = '$uzytkownik' ";
  3. $res = mysql_query($poziom);
  4. $admin = mysql_fetch_row($res);
  5. print_r($admin); // zobacz co dostales z bazy
  6. if($admin[0] == "3") {
  7. // co to jest? if($_SESSION['admin']=='tak');
  8. // chyba miało być:
  9. $_SESSION['admin']='tak';
  10. }
  11. if($_SESSION['admin']=='tak') {
  12. echo "admin";
  13. }
GoOx
Problem w tym że nie wiem czy pobieranie nazwy użyt do sesji działa.

kod który daliście mi nic nie pokazuje.

print_r nic nie pokazuje nawet echo nic nie pokazuje to chyba nazwa użyt nie jest w sesji.

to jest logowanie.php

  1. <?
  2. include('polaczenie.php');
  3. ?>
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  5. "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <title>Untitled Document</title>
  9. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  10. </head>
  11. <body>
  12. Logowanie:</br>
  13. <form action="logowanie.php?loguje" method="post">
  14. Login:<input type="text" name="loginl"></br>
  15. Haslo:<input type="password" name="haslol"></br>
  16. <input type="submit" name="zaloguj" value="Zaloguj">
  17. </form>
  18. <?
  19. $loginl = $_POST['loginl'];
  20. $haslol = $_POST['haslol'];
  21. $haslom = md5($haslol);
  22. if(isset($_POST['zaloguj'])){
  23. $spr = "SELECT nick FROM uzytkownicy WHERE nick = '$loginl' ";
  24. $sprhaslo = "SELECT haslo FROM uzytkownicy WHERE nick = '$loginl' ";
  25. $res = mysql_query($spr);
  26. $danelogin = mysql_fetch_row($res);
  27. $res1 = mysql_query($sprhaslo);
  28. $danehaslo = mysql_fetch_row($res1);
  29. if(($loginl == $danelogin[0]) && ($haslom == $danehaslo[0]))
  30. {
  31. $_SESSION['zalogowany']='tak';
  32. echo " zalogowano ";
  33. $loginl = $_SESSION['uzytkownik'];
  34. echo '<script>location.href="index.php";</script>';
  35.  
  36. }
  37. else
  38. {
  39. echo "Logowanie nieudane";
  40. }
  41. }
  42. ?>
  43. </body>
  44. </html>
lobopol
daj
  1. var_dump($uzytkownik);
  2. var_dump($_SESSION['uzytkownik']);

przed
  1. $_SESSION['uzytkownik'] = $uzytkownik;

i podaj wynik
GoOx
to mam napis zalogowano i NULL NULL

Proszę o pomoc.
lobopol
Czyli widzisz, że masz złe zmienne.
W tym momencie sprawdzasz czy użytkownik o loginie zalogowany jest adminem
  1. SELECT poziom FROM uzytkownicy WHERE nick = 'zalogowany';

masz
GoOx
nie działa ;/ skąd się wzięło to zalogowany?
lobopol
A skąd mamy wiedzieć co do tego przypisałeś? Nie mamy całego skryptu, a to co podałem to jest zapytanie jakie w tym momencie puszczasz
GoOx
Proszę.
index.php
  1. <?
  2. include('polaczenie.php');
  3. ?>
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  5. "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <title>Untitled Document</title>
  9. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  10. </head>
  11. <body>
  12. <form method="GET">
  13. <a href="rejestracja.php">Rejestracja</a>
  14. <a href="logowanie.php">Zaloguj sie</a>
  15. </form>
  16. <?
  17. if(isset($_GET['zalogowany']) && $_GET['zalogowany']=='wyloguj')
  18. {
  19. $_SESSION['zalogowany']='';
  20. }
  21. if($_SESSION['zalogowany']=='tak') {
  22. ?>
  23. Tresc widoczna tylko dla zalogowanego.
  24. <?
  25. }
  26. if($_SESSION['zalogowany']=='tak')
  27. {
  28. echo '<br /><br /><a href="index.php?zalogowany=wyloguj" name="wyloguj">Wyloguj</a>';
  29. }
  30. if(isset($_GET['wyloguj'])){
  31. }
  32. $_SESSION['uzytkownik'] = $uzytkownik;
  33. $poziom = "SELECT poziom FROM uzytkownicy WHERE nick = '$uzytkownik'";
  34. $res = mysql_query($poziom);
  35. $admin = mysql_fetch_row($res);
  36. if($admin[0] == "3") {
  37. $_SESSION['admin']='tak';
  38. }
  39. if($_SESSION['admin']=='tak') {
  40. echo "admin";
  41. }
  42.  
  43. ?>
  44. </body>
  45. </html>
  46.  


logowanie.php jest powyżej.
lobopol
  1. $_SESSION['uzytkownik'] = $uzytkownik;

Przypisujesz nieistniejącą zmienną użytkownik do sesji i to sprawdzasz
GoOx
Wiec jak zrobić by zmienna użytkownik zaistniała w sesji?
lobopol
Czytaj ze zrozumieniem, nigdzie nie masz przypisanej żadnej wartości do zmiennej $uzytkownik, ogólnie wszystko masz pokręcone gdzie ty masz przypisanie czegokolwiek również do $_SESSION['uzytkownik'] popatrz sobie na kolejności przypisywania zmiennych..
GoOx
$_SESSION['uzytkownik'] = $uzytkownik;

a to więc jest co? do zmiennej z sesji jest przypisana w logowaniu wartość zalogowanego.
lobopol
a co masz w $uzytkownik nic...
Jedyne użycie jakie zauważyłem $_SESSION['uzytkownik'] poza przypisaniem do niego nieistniejącej zmiennej $uzytkownik to
  1. $loginl = $_SESSION['uzytkownik'];

czyli nadpisanie $loginl nieistniejącą zmienną
GoOx
czyli

$_SESSION['uzytkownik'] = $uzytkownik;

zamienić na:

$_SESSION['loginl'] = $uzytkownik;

i tak samo w logowanie.php tak?



questionmark.gif
Mackos
Jaaa.... no masz cokolwiek w tej sesji $_SESSION['uzytkownik'] albo $_SESSION['loginl'] ? NIE.
Żeby jakiekolwiek przypisanie Ci działało musisz do zmiennej np. $uzytkownik przypisać login użytkownika z bazy danych.
GoOx
Aaaaa w końcu zrozumiałem zaraz zrobię biggrin.gif

edit/

ok zamiast $loginl dałem $danelogin[0] czyli z bazy danych i nadal nic co zrobić?

PS sprawdziłem czy w zmiennej $_SESSION['loginl'] cokolwiek jest dałem echo i jest. więc teraz chyba trzeba szukać błędu w index.php
lobopol
Ech napiszę Ci jak powinien wyglądać proces logowania:

1. Sprawdzamy czy użytkownik jest zalogowany, jeżeli nie krok 2
  1. if(!isset($_SESSION['logged'])) {
  2. //niezalogowany trza działać
  3. } else {
  4. //zalogowany jakaś tam akcja
  5. }

2. Sprawdzamy czy został uzupełniony formularz logowania
  1. if(isset($_POST['login']) && isset($_POST['password'])) {
  2. //przesłano login i hasło krok 3
  3. } else {
  4. //nie przesłano hasła i loginu jakaś akcja
  5. }

3. Sprawdzamy czy mamy takiego użytkownika w bazie z takim hasłem
  1. $login = $_POST['login'];
  2. $password = md5($_POST['password']); //md5 dla przykłądu trzeba to lepiej zabezpieczyć
  3. $sql = 'SELECT * FROM baza WHERE user="'.mysql_real_escape_string($login).'" AND password = "'.$password.'" LIMIT 1';
  4. //tu pobranie z bazy jeżeli jest wynik to hasło+login jest dobre
  5. //zapisujemy do sesji potrzebne rzeczy czyli
  6. $_SESSION['logged'] = true;
  7. $_SESSION['login'] = $login;
  8. $_SESSION['access_lvl'] = //poziom z bazy wyciągnięty

4. sprawdzenie czy ktoś ma uprawnienia admina
  1. if(isset($_SESSION['logged']) && $_SESSION['access_lvl'] == 3) {
  2. //jej to admin działaj
  3. }

5. wylogowanie
  1. $_SESSION = array();

GoOx
wszystko dobrze zrobiłem?

  1. <?
  2. include('polaczenie.php');
  3. ?>
  4. <?
  5.  
  6. if(!isset($_SESSION['logged'])) {
  7. ?>
  8. <body>
  9. Logowanie:</br>
  10. <form action="logowanie.php?loguje" method="post">
  11. Login:<input type="text" name="login"></br>
  12. Haslo:<input type="password" name="haslo"></br>
  13. <input type="submit" name="zaloguj" value="Zaloguj">
  14. </form>
  15. <?
  16.  
  17. } else {
  18. echo "Jesteś juz zalogowany.";
  19. }
  20.  
  21. if(isset($_POST['login']) && isset($_POST['password'])) {
  22. $login = $_POST['login'];
  23. $password = md5($_POST['password']);
  24. $spr = 'SELECT * FROM uzytkownicy WHERE nick="'.mysql_real_escape_string($login).'" AND haslo = "'.$password.'" LIMIT 1';
  25. $res = mysql_query($spr);
  26. $dane = mysql_fetch_row($res);
  27.  
  28. $_SESSION['logged'] = true;
  29. $_SESSION['login'] = $login;
  30. $_SESSION['access_lvl'] = "3" ;
  31. } else {
  32. echo "Nie podałeś loginu i hasla";
  33. $_SESSION = array();
  34. }
  35.  
  36.  
  37.  
  38.  


questionmark.gif bo ciągle mi pisze że nie podałem loginu i hasła ale wpisuję klikam zaloguj i nic się nie dzieje.

myślę że tam powinno być jeszcze

  1. $poziom = mysql_query("SELECT poziom FROM uzytkownicy WHERE nick = '$loginl' );
  2. $poziom3 = mysql_fetch_row($poziom);
lobopol
Nie przesyłasz tutaj zmiennej password tylko haslo. Podmień i sprawdzaj sobie zmienne masz funkcje takie jak print_r od tego czy var_dump
GoOx
ok jest super tylko wylogowywanie nie działa.

i
  1. if(isset($_SESSION['logged']) && $_SESSION['access_lvl'] == 3) {
  2. echo "admin";
  3. }


pokazuje się każdemu zalogowanemu ;/
lobopol
to się może pokazać tylko tym którzy mają
$_SESSION['access_lvl'] == 3
puść sobie print_r($_SESSION) i sprawdź

$_SESSION = array() na 100% czyści sesje, tylko pamiętaj, że dopiero po wyczyszczeniu sesji będzie uznana za pustą
  1. $_SESSION['a'] = 1;
  2. print_r($_SESSION);
  3. $_SESSION = array();
  4. print_r($_SESSION);
GoOx
ok dzięki admin działa

ale wylogowywanie nadal nie ;/

  1. if($_SESSION['logged']=='true')
  2. {
  3. echo '<br /><br /><a href="index.php?zalogowany=wyloguj" name="logout">Wyloguj</a>';
  4. }
  5. if(isset($_POST['logout'])){
  6. $_SESSION = array();
  7. }


wskakuje zalogowany=wyloguj ale sesji nie niszczy.

GET tez nie działa.

questionmark.gif jak to zrobić?

a i jeszcze przy logowaniu nawet jak zostawi się pola puste to i tak loguje.
lobopol
Nic dziwnego, że każdego loguje.
To powinno być w ifie
  1. if(mysql_num_rows($res ) >0){
  2. $_SESSION['logged'] = true;
  3. $_SESSION['login'] = $login;
  4. $_SESSION['access_lvl'] = //tu masz z bazy wartość wstawić a nie 3 na sztywno wklepać...
  5. }


a wylogowanie bez jaj masz ponad 100 postów i nie wiesz jak odróżniać zmienne...
link dałeś w formie <a href="index.php?zalogowany=wyloguj" name="logout">Wyloguj</a>
To przesyłasz getem zmienną
  1. $_GET['zalogowany'];

i ma ona wartość wyloguj

Wybacz, że to napiszę ale usiądź do poradnika dla początkujących i poświęć czas na naukę podstaw.
GoOx
Pytałem się ponieważ wcześniej dawałem session_destroy(); do if i działało wcześniej...
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.