• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ranga Admin/User w PHP

Object Storage Arubacloud
0 głosów
834 wizyt
pytanie zadane 14 grudnia 2016 w PHP przez tysiek Użytkownik (560 p.)
Witam,

Dziś postanowiłem zrobić rangę dla użytkownika. Kolumna to: "rank", domyślna wartość kolumny to "0", jeżeli ktoś będzie miał admin to będzie pokazywać mu "1". I teraz mam pytanie, jak zrobić to w PHP? Mam coś takiego: if($_SESSION["rank"] == 0) {
echo "Nie posiadasz praw administratora.";
} else {
echo "Jesteś zalogowany jako administrator.";
}

Sprawdza rank czy jest 0, jeżeli tak to wyświetla wiadomość, że Nie posiadasz praw administratora. Jeżeli jest inaczej to: Jesteś zalogowany jako administrator.

Lecz cały czas nie ważne czy ktoś ma 0 czy 1 pokazuje: Nie posiadasz praw administratora.

Jak to naprawić?

2 odpowiedzi

+1 głos
odpowiedź 14 grudnia 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)
wybrane 14 grudnia 2016 przez tysiek
 
Najlepsza

Lecz cały czas nie ważne czy ktoś ma 0 czy 1 pokazuje: Nie posiadasz praw administratora.

A wyświetlałeś sobie to $_SESSION['rank']? Na pewno taka wartość jest gdzieś do sesji wrzucana?

Poza tym nie jestem przekonany czy trzeba takie informacje trzymać w sesji. Nie prościej byłoby zapisywać tylko id użytkownika i na jego podstawie przy każdym ładowaniu strony wyciągać odpowiednie dane o użytkowniku z bazy?

komentarz 14 grudnia 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)
No raczej nie, to jest pobranie z sesji wartości rank (której jak ustaliliśmy nie posiadasz) i przypisanie do zmiennej $rank - niewiele by Ci to dało, skoro i tak $_SESSION['rank'] nie będzie istniało.

Pokaż kod z miejsca gdzie przypisujesz pozostałe dane do sesji (pewnie logowanie).
komentarz 14 grudnia 2016 przez tysiek Użytkownik (560 p.)

To?:

<?php

	session_start();
	
	if ((!isset($_POST['login'])) || (!isset($_POST['haslo'])))
	{
		header('Location: index.php');
		exit();
	}

	require_once "connect.php";
	mysqli_report(MYSQLI_REPORT_STRICT);
		
	try 
	{
		$polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
		if ($polaczenie->connect_errno!=0)
		{
			throw new Exception(mysqli_connect_errno());
		}
		else
		{
			$login = $_POST['login'];
			$haslo = $_POST['haslo'];
			
			$login = htmlentities($login, ENT_QUOTES, "UTF-8");
		
			if ($rezultat = $polaczenie->query(
			sprintf("SELECT * FROM uzytkownicy WHERE user='%s'",
			mysqli_real_escape_string($polaczenie,$login))))
			{
				$ilu_userow = $rezultat->num_rows;
				if($ilu_userow>0)
				{
					$wiersz = $rezultat->fetch_assoc();
					
					if (password_verify($haslo, $wiersz['pass']))
					{
						$_SESSION['zalogowany'] = true;
						$_SESSION['id'] = $wiersz['id'];
						$_SESSION['user'] = $wiersz['user'];
						$_SESSION['email'] = $wiersz['email'];
						
						unset($_SESSION['blad']);
						$rezultat->free_result();
						header('Location: gra.php');
					}
					else 
					{
						$_SESSION['blad'] = '<span style="color:red">Nieprawidłowy login lub hasło!</span>';
						header('Location: index.php');
					}
					
				} else {
					
					$_SESSION['blad'] = '<span style="color:red">Nieprawidłowy login lub hasło!</span>';
					header('Location: index.php');
					
				}
				
			}
			else
			{
				throw new Exception($polaczenie->error);
			}
			
			$polaczenie->close();
		}
	}
	catch(Exception $e)
	{
		echo '<span style="color:red;">Błąd serwera! Przepraszamy za niedogodności i prosimy o wizytę w innym terminie!</span>';
		echo '<br />Informacja developerska: '.$e;
	}
?>

 

komentarz 14 grudnia 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)

Tak, to to.

$_SESSION['zalogowany'] = true;
$_SESSION['id'] = $wiersz['id'];
$_SESSION['user'] = $wiersz['user'];
$_SESSION['email'] = $wiersz['email'];

w tym miejscu wpisujesz do sesji dane pobrane z bazy, jeśli chcesz dalej pozostać na przekazywaniu danych przez sesję to musisz również tutaj dodać rank i przypisać do niego wartość pobraną z bazy.

komentarz 14 grudnia 2016 przez tysiek Użytkownik (560 p.)
edycja 14 grudnia 2016 przez tysiek
Jednak wszystko działa, dzięki wielkie! :)
komentarz 14 grudnia 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)

Pierwsze echo? A masz w bazie ustawione, że ten użytkownik jest administratorem (czyli wartość w kolumnie rank jest inna niż 0)?
(swoją drogą dość dziwna konwencja, osobiście ustawiłbym że administrator to 1 i tylko jeśli jest 1 to mamy admina, a w else, że nie posiada praw administratora)

To super, cieszę się ;)

–2 głosów
odpowiedź 14 grudnia 2016 przez Chess Szeryf (76,710 p.)
edycja 14 grudnia 2016 przez Chess
$link = mysqli_connect("localhost", "root", "", "baza");

if(mysqli_query($link, "select rank from tabela where id=1")==1){

    echo "Jesteś zalogowany jako admin";

}

 

Chyba mniej więcej tak.

komentarz 14 grudnia 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)

Nie, prezentujesz całkowicie złe podejście... 

Rzuciłeś linkiem do dokumentacji, a przeczytałeś sam co tam jest napisane?
http://php.net/manual/en/mysqli.query.php

Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.

W przypadku powodzenia zapytania SELECT zwracany jest cały obiekt mysqli_result, nie jedna kolumna z zapytania. Jak się domyślam pomyślałeś, że dostaniesz z tej funkcji zwróconą wartość pola rank, przyrównasz ją sobie i będzie fajnie, a tu niestety nie. Dostajesz cały obiekt, z którego trzeba odpowiednio wyciągnąć dane przy użyciu np. mysqli_fetch_assoc czy mysqli_fetch_row.

komentarz 14 grudnia 2016 przez Chess Szeryf (76,710 p.)
Chodzi mi właśnie o to, że to trzeba będzie pętlą wyciągnąć przy użyciu jednej z tych funkcji, które ty wyżej podałeś.
komentarz 14 grudnia 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)

To cóż, nie załapałem

Jeśli mój warunek jest błędny to niech go przerobi na prawidłowy

Tu była mowa tylko o warunku, a tu trzeba dodać kolejną funkcję i odpowiednio wszystko zapisać, nie chodzi więc o sam warunek.

Dlaczego pętlą?

komentarz 14 grudnia 2016 przez tysiek Użytkownik (560 p.)
Poprawiłem, brak błędów, lecz nie wyświetla się echo.
komentarz 14 grudnia 2016 przez Chess Szeryf (76,710 p.)
Dopisz else, bo może warunek nie jest spełniony. Tak jak pisał przedmówca musisz* użyć jakiejś z tych dwóch funkcji, co podał.

Podobne pytania

+1 głos
2 odpowiedzi 250 wizyt
pytanie zadane 8 lutego 2022 w PHP przez gatka84 Bywalec (2,150 p.)
+2 głosów
10 odpowiedzi 957 wizyt
pytanie zadane 19 czerwca 2016 w Offtop przez Mr Popcorn Bywalec (2,340 p.)
0 głosów
2 odpowiedzi 2,207 wizyt
pytanie zadane 13 lutego 2017 w SQL, bazy danych przez Siwobrody Nowicjusz (180 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...