Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

ROZWIĄZANY: [PHP]Logowanie wielopoziomowe


Rekomendowane odpowiedzi

Pytanie dotyczy tylko sposobu rozróżniania przy logowaniu użytkownika, administratora, moderatora. Teraz skrypt pozwala logować się jedynie użytkownikom posiadającym uprawnienia 1 czyli załóżmy, że jest to Admin. Użytkownicy posiadają uprawnienia NULL zalogować się nie mogą. Proszę o porady :)

Obecnie plik zaloguj.php wygląda tak:

<?php
if(isset($_SESSION['session_user'])) 
{
header('location: index.php');
}
else
{
echo "<div class='h3'><h3>Logowanie</h3></div><div class='text'>
<form action='' method='POST'>
<table>
	<tr>
		<td>Nazwa użytkownika:</td><td><input type='text' name='user' class='input' /></td>
	</tr>
	<tr>
		<td>Hasło:</td><td><input type='password' name='password' class='input' /></td>
	</tr>
	<tr>
		<td colspan=2><input type='submit' name='zaloguj' value='Zaloguj' /></td>
	</tr>
</table>
</form>
</div><div class='foot'></div>";

require_once'config_db.php';
if(isset($_POST['zaloguj']))
{
	$user = $_POST['user'];
	$password = $_POST['password'];

	#Sprawdzanie pól formularza
	if(!$_POST['user'] || !$_POST['password'])
	{
		echo "Jedno bądź więcej pól w formularzu jest puste...";
		exit; 
	}

	#Sprawdzanie wprowadzonych danych do usunięcia <-----
	if(!eregi('^[a-zA-z]+', $user)) 
	{
		echo "Nazwa użytkownika może zawierać wyłącznie małe i duże litery...";
		exit; 
	}
	elseif(!eregi('^[a-zA-z0-9]+', $password)) 
	{
		echo "Hasło może zawierać wyłącznie małe i duże litery oraz cyfry...";
		exit;
	} #to jest niepotrzebne <--- bo i tak haslo jest md5
	###############
	## LOGOWANIE ##
	###############
	if(isset($_POST['user']) && isset($_POST['password']))
	{

		$mysqlia = "SELECT * FROM user WHERE user='".$user."' AND password='".md5($password)."' AND uprawnienia=1";
		$mysqlib = $db->query($mysqlia);
		if($echo = $mysqlib->fetch_object()) 
		{	$id = $echo->id;
			$_SESSION['session_id'] = $id; 
			$_SESSION['session_user'] = $user; 
			header('location: index.php'); 
		}
		else 
		{
			echo "Login lub hasło, jest niepoprawne...";
			exit;
		}
			$db->close();
	}
}
}
?>

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Stwórz grupy z przypisanym poziomem dostępu, w trakcie logowania odpytaj do jakiej grupy należy user i takie też prawa mu przydziel.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Stwórz grupy z przypisanym poziomem dostępu, w trakcie logowania odpytaj do jakiej grupy należy user i takie też prawa mu przydziel.

Wiem o co chodzi mniej więcej a że nigdy nie bawiłem się w tak rozbudowany system logowania a jest mi niezbędny, to łażę i szukam.

Natrafiłem na coś takiego nie wiem czy jest to poprawne: Logowanie wielopoziomowe, tyle o ile nie mam problemu z wkomponowaniem tego kodu do swojego skryptu, to mam problem ze zmienną $wartosc, która musi pobierać z bazy danych z rekordu uprawnienia czy jest 1, 2 lub 3. W którym miejscu mam odpytywać o to bazę?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

No w miejscu sprawdzania danych czy zostały wpisane poprawne: login i hasło. Bo przecież pobierasz je z bazy danych..?

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

No w miejscu sprawdzania danych czy zostały wpisane poprawne: login i hasło. Bo przecież pobierasz je z bazy danych..?

Coś nie bardzo chce mi działać ja mam innego rodzaju zapytania niż autor kodu w zamieszczonym linku: u mnie wygląda to tak:

<?php
if(isset($_SESSION['session_user'])) 
{
header('location: index.php');
}
else
{
echo "<div class='h3'><h3>Logowanie</h3></div><div class='text'>
<form action='' method='POST'>
<table>
	<tr>
		<td>Nazwa użytkownika:</td><td><input type='text' name='user' class='input' /></td>
	</tr>
	<tr>
		<td>Hasło:</td><td><input type='passwordwordword' name='passwordwordword' class='input' /></td>
	</tr>
	<tr>
		<td colspan=2><input type='submit' name='zaloguj' value='Zaloguj' /></td>
	</tr>
</table>
</form>
</div><div class='foot'></div>";

require_once'config_db.php';
if(isset($_POST['zaloguj']))
{
	$user = $_POST['user'];
	$passwordwordword = $_POST['passwordwordword'];

	#Sprawdzanie pól formularza
	if(!$_POST['user'] || !$_POST['passwordwordword'])
	{
		echo "Jedno bądź więcej pól w formularzu jest puste...";
		exit; 
	}

	#Sprawdzanie wprowadzonych danych do usunięcia <-----
	if(!eregi('^[a-zA-z]+', $user)) 
	{
		echo "Nazwa użytkownika może zawierać wyłącznie małe i duże litery...";
		exit; 
	}
	elseif(!eregi('^[a-zA-z0-9]+', $passwordwordword)) 
	{
		echo "Hasło może zawierać wyłącznie małe i duże litery oraz cyfry...";
		exit;
	} #to jest niepotrzebne <--- bo i tak haslo jest md5
	###############
	## LOGOWANIE ##
	###############

		$mysqlia = "SELECT * FROM user WHERE user='".$user."'";
		$mysqlib = $db->query($mysqlia);
		$echo = $mysqlib->fetch_object();
		$wartosc = $echo->uprawnienia;
		if(isset($_POST['user']) && isset($_POST['passwordwordword'])) {
		if($user == $echo->user && $passwordword == $echo->password ) {
		if($wartosc == 1) {
		$_SESSION['prawa']='1';
		$_SESSION['user']=''.$echo->user.'';
		header("Location: index.php");
		}
		if($wartosc == 2) {
		$_SESSION['prawa']='2';
		$_SESSION['user']=''.$echo->user.'';
		header("Location: index.php");
		}
		if($wartosc == 3) {
		$_SESSION['prawa']='3';
		$_SESSION['user']=''.$echo->user.'';
		header("Location: index.php");
		}
		}
		}
		else 
		{
			echo "user lub hasło, jest niepoprawne...";
			exit;
		}
			$db->close();

}
}
?>

Odnośnik do komentarza
Udostępnij na innych stronach

Poprawiłem wszystkie błędy logiczne ale i tak nie działa:

<?php
if(isset($_SESSION['user'])) 
{
header('location: index.php');
}
else
{
echo "<div class='h3'><h3>Logowanie</h3></div><div class='text'>
<form action='' method='POST'>
<table>
	<tr>
		<td>Nazwa użytkownika:</td><td><input type='text' name='user' class='input' /></td>
	</tr>
	<tr>
		<td>Hasło:</td><td><input type='password' name='password' class='input' /></td>
	</tr>
	<tr>
		<td colspan=2><input type='submit' name='zaloguj' value='Zaloguj' /></td>
	</tr>
</table>
</form>
</div><div class='foot'></div>";

require_once'config_db.php';
if(isset($_POST['zaloguj']))
{
	$user = $_POST['user'];
	$password = $_POST['password'];

	#Sprawdzanie pól formularza
	if(!$_POST['user'] || !$_POST['password'])
	{
		echo "Jedno bądź więcej pól w formularzu jest puste...";
		exit; 
	}

	#Sprawdzanie wprowadzonych danych do usunięcia <-----
	if(!eregi('^[a-zA-z]+', $user)) 
	{
		echo "Nazwa użytkownika może zawierać wyłącznie małe i duże litery...";
		exit; 
	}
	elseif(!eregi('^[a-zA-z0-9]+', $password)) 
	{
		echo "Hasło może zawierać wyłącznie małe i duże litery oraz cyfry...";
		exit;
	} #to jest niepotrzebne <--- bo i tak haslo jest md5
	###############
	## LOGOWANIE ##
	###############

		$mysqlia = "SELECT * FROM user WHERE user='".$user."'";
		$mysqlib = $db->query($mysqlia);
		$echo = $mysqlib->fetch_object();
		$wartosc = "SELECT uprawnienia FROM user WHERE=user='".$user."'"; #<---- Nie wiem jak wartosc wyciagnac
		if(isset($_POST['user']) && isset($_POST['password'])) {
		if($user == $echo->user && $password == $echo->password) {
		if($wartosc == 1) {
		$_SESSION['prawa']=1;
		$_SESSION['user']=$echo->user;
		header("Location: index.php");
		}
		if($wartosc == 2) {
		$_SESSION['prawa']=2;
		$_SESSION['user']=$echo->user;
		header("Location: index.php");
		}
		if($wartosc == 3) {
		$_SESSION['prawa']=3;
		$_SESSION['user']=$echo->user;
		header("Location: index.php");
		}
		}
		}
		else 
		{
			echo "user lub hasło, jest niepoprawne...";
			exit;
		}
			$db->close();

}
}
?>

Odnośnik do komentarza
Udostępnij na innych stronach

Po 1. widać, że uczysz się ze staroci:

eregi

This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.

Po 2. kod strasznie nieczytelny - tabulacja wstawiana jak popadnie.

Po 3. to zapytanie jest chyba po to, by je wykonać a nie przyrównywać do 1,2 czy 3

$wartosc = "SELECT uprawnienia FROM user WHERE=user='".$user."'";
  • Lubię to 1
Odnośnik do komentarza
Udostępnij na innych stronach

Po 1. widać, że uczysz się ze staroci:

eregi

This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.

Po 2. kod strasznie nieczytelny - tabulacja wstawiana jak popadnie.

Po 3. to zapytanie jest chyba po to, by je wykonać a nie przyrównywać do 1,2 czy 3

$wartosc = "SELECT uprawnienia FROM user WHERE=user='".$user."'";

Już sobie poradziłem i działa tak jak sobie tego życzyłem :) Tak wiem o eregi :). Temat można zamknąć.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Problem ROZWIĄZANY. Jeśli są jakiekolwiek wątpliwości, pytania proszę o założenie nowego tematu.

Wszelkie uzasadnione reklamacje/pretensje/sugestie/rady przyjmuje ekipa forum.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.