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

wartość rekordu tabeli jako uwierzytelnienie, funkcje admina i zwykłego uzytkownika

Object Storage Arubacloud
0 głosów
159 wizyt
pytanie zadane 19 sierpnia 2017 w PHP przez waski Nowicjusz (140 p.)

Witam,

W bazie jest id, login, password, email, rola. w kolumnie rola znajdują sie 2 wartości user i nauczyciel. wartości te są zapisywane do bazy w momencie rejestracji gdzie osoba rejestrująca się wybiera czy jest uczniem czy nauczycielem.

Moglibyście podpowiedzieć jak zrobić aby przy logowaniu, skrypt odczytał czy loguje sie uczeń czy nauczyciel i jeżeli nauczyciel to przekierowuje go do strony takiej samej jak dla zwykłego użytkownika tylko z dodatkowym przyciskiem do kolejnej podstrony? 

Jeżeli potraficie rozwiązać ten problem proszę o jak najprostszą wersje smiley

Pozdrawiam

1 odpowiedź

0 głosów
odpowiedź 19 sierpnia 2017 przez Assasz Nałogowiec (30,460 p.)
Przecież to zwykły if. Pobierasz wartość z kolumny rola, sprawdzasz jej wartość i na jej podstawie robisz odpowiednie przekierowanie.
komentarz 19 sierpnia 2017 przez waski Nowicjusz (140 p.)
Mógłbyś napisać jak ten if miałby wyglądać ?
komentarz 19 sierpnia 2017 przez waski Nowicjusz (140 p.)

<?php
require 'conf.php';
require 'header.php';

// Zabezpiecz zmienne odebrane z formularza, przed atakami SQL Injection
if(isset($_POST['login']) ){
$login = $db->real_escape_string(htmlspecialchars(trim($_POST['login'])));
$password = $_POST['password'];
}
if ($_POST) {
	
    // Podstawowa walidacja formularza
    $errors = array();
if (empty($login) || empty($password)) {
        $errors[] = 'Wypełnij wszystkie pola';
    }
	
    $auth = $user->auth($login, $password);
    if (!$auth) 
	{
        $errors[] = '
		<div class="bs-example">
			<div class="alert alert-danger fade in">
				<h3>Uzytkownik o podanym loginie, haśle lub roli nie istnieje</h3>
			</div>
		</div>
		';
    }

		if (empty($errors))
		{
			// Jeżeli nie ma błędów to przechodzi dalej
			// Zapisujemy ID użytkownika do sesji i tym samym oznaczamy go jako zalogowanego
			$_SESSION['user_id'] = $auth;
			

			echo '
			
			<div class="bs-example">
				<div class="alert alert-success fade in">
					Zostałeś zalogowany. Możesz przejść na <a href="index.php" class="btn btn-success btn-lg">Stronę główną</a>
				</div>
			</div>
			';
			
		}
		
		else 
		{
			foreach ($errors as $error) 
			{
				echo '<p class="error">'.$error.'</p>';
			}
		}
	
}
?>
<div class="container logowanie"
	<div class="row">
		<div class="col-lg-4">
		
		</div>
		<div class="col-lg-4">
			<div class="container">
				
				<div class="panel2">

				  <form class="form-signin" method="post" action="login.php">
					<h2 class="form-signin-heading">LOGOWANIE</h2>
					</br>
					<label for="login" class="sr-only">Login</label>
					<input type="text" name="login" maxlength="32" id="login" class="form-control" placeholder="Login" required autofocus>
					</br>
					<label for="inputPassword" class="sr-only">Hasło</label>
					<input type="password" name="password" id="inputPassword" class="form-control" placeholder="Hasło" required>
				   </br>
								
					<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
				  </form>
				</div>
			</div>
		</div>
		<div class="col-lg-4">
		
		</div>
	</div>
	<script src="js/jquery-2.2.0.min.js"></script>
<?php
require 'footer.php';

plik logowania 

próbowałem zrobić tak że przy logowaniu uźytkownik również wybiera czy jest nauczycielem czy uczniem ale jakby wcale nie czytało z bazy 

komentarz 19 sierpnia 2017 przez Assasz Nałogowiec (30,460 p.)

Co zwraca $auth, rozumiem, że id zalogowanego użytkownika? Gdzie pobierasz dane o użytkowniku z bazy i je zapisujesz? 

Wykonaj zapytanie do bazy, pobierz role, zapisz ją w sesji jeśli potrzebujesz i potem ifem sprawdź zawartość tej zmiennej.

<?php if($_SESSION['role'] == 'nauczyciel'): ?>
//wyswietl button, hiperłącze czy cokolwiek chcesz
<?php endif; ?>

Tak w ogóle, to tek kod działa? Skąd masz zmienną $user i funkcję auth?

komentarz 19 sierpnia 2017 przez waski Nowicjusz (140 p.)
$zapytanie = 'select rola from users where rola='.$nauczyciel;
  $wynik = mysql_query( $zapytanie );
  $wiersz = mysql_fetch_array( $wynik );

w ten sposób ?

I jak ifem sprawdzić próbowałem na różne sposoby i nic... 

komentarz 19 sierpnia 2017 przez Assasz Nałogowiec (30,460 p.)
Może lepiej zacznij używać PDO do łączenia z bazą... mysql w PHP7 już nie działa. Do tego masz literówkę, where, nie whre. nazwa_pola to faktyczna nazwa kolumny tabeli?

Pobierając dane z bazy zawsze otrzymujesz tablicę asocjacyjną, czyli taką, która posiada indeksy w postaci nazw kolumn tabeli. Czyli rola w Twoim przypadku to $wiersz['rola']. Chyba nie muszę tłumaczyć, jak sprawdzić zawartość takiej zmiennej...
komentarz 19 sierpnia 2017 przez waski Nowicjusz (140 p.)
<?php
	require 'conf.php';
	require 'header.php';
	
	if ($user->check()) 
	{ // pokazuje sie użytkownikom zalogowanym
		// Pobiera dane o użytkowniku i zapisuje je do zmiennej $userData
		$userData = $user->data();
		
		
		
		echo 
		
		'
		<div class="container index1">
			<div class="row">
				<div class="col-lg-1"></div>
					<div class="col-lg-10">
						<div class="jum">
								<div class="jumbotron">
									<div class="container">
										<h1>Witaj '.$userData['login'].' '.$userData['rola'].'!</h1>
										<div class="log">
											<b>Możesz wejść na swój profil</b>
											</br>
											</br>
										<br><a href="profile.php?id='.$userData['id'].'" class="btn btn-success btn-lg">Profil</a>
											
										</div>
										<div class="res">
											<b>Jeżeli nie chcesz przeglądać profilu</b>
											</br>
											</br>
											</br><a href="logout.php" class="btn btn-success btn-lg">wyloguj się</a>
										</div>
									</div>
								</div>
						</div>
					</div>
				<div class="col-lg-1"></div>
					
			</div>
		
		</div>
		';
	}	
	else 
		{
			// pokazuje sie użytkownikom niezalogowanym
			echo 
			'
			<div class="container index">
				<div class="row">
					<div class="col-lg-1"></div>
					<div class="col-lg-10">
						<div class="jum">
							<div class="jumbotron">
								<div class="container">
									<h1>Cześć!</h1></br> <h1>... </h1>
									<h2>...</h2>
									<h3>...</h3>
									</br>
									<div class="log">
										<b>Jęzeli masz już konto, zaloguj się.</b>
										</br>
										</br>
										<br><a href="login.php" class="btn btn-success btn-lg">Zaloguj się</a>
									</div>
									<div class="res">
										<b>Jeżeli nie masz konta, zarejestruj się.</br>To potrwa tylko chwilę :) </b>
										</br>
										</br><a href="register.php" class="btn btn-success btn-lg">Zarejestruj się</a>
									</div>
								</div>
							</div>
						</div>
					</div>
					<div class="col-lg-1"></div>
				</div>
			</div>
			';
			
		}
		require 'footer.php';
?>

Rzeczywiście tam były błędy które poprawiłem najwidoczniej edycja sie nie zapisała.

Jeżeli nie sprawiłoby Ci to kłopotu to pomógłbyś mi to napisać tak żeby zadziałało?

Wstawiłem plik index.php. Pokazuje się w nim treść kiedy użytkownik jest zalogowany i kiedy nie i chciałbym żeby dodatkowy przycisk był po zalogowaniu miedzy przyciskiem Profil a Wyloguj się.

komentarz 19 sierpnia 2017 przez Assasz Nałogowiec (30,460 p.)

Wszystko Ci napisałem. Masz zmienną $userData zawierającą wszystkie dane zalogowanego użytkownika, tak? Czyli masz też coś takiego jak $userData['rola']. Teraz wstaw gdzieś ten kawałek kodu i gotowe.

if($userData['rola'] == 'nauczyciel')
{
     //wyswietl button, hiperłącze czy cokolwiek chcesz
}

Tak na marginesie, raz używasz nazewnictwa angielskiego, raz polskiego... zdecyduj się na jedno - angielskie.

komentarz 19 sierpnia 2017 przez waski Nowicjusz (140 p.)

Dzięki laugh działa !

Podobne pytania

0 głosów
1 odpowiedź 243 wizyt
pytanie zadane 16 października 2017 w PHP przez dominiv2604 Początkujący (350 p.)
0 głosów
0 odpowiedzi 92 wizyt
0 głosów
0 odpowiedzi 276 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...