Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Przekierowanie admina do strony admina
Forum PHP.pl > Forum > Przedszkole
Rapidrapid
Witam wszystkich,

Jestem jeszcze zielony w PHP i dopiero stawiam pierwsze kroki. Poznałem ciekawy skrypt rejestracji i logowania ze strony: [url]http://www.codingcage.com/2015/09/login-registration-email-verification-forgot-password-php.html[/url[size="6"][/size]]. Zrobiłem na jego podstawie panel i system logowania do swojego małego projektu. Niestety mam problem bo nie wiem zupełnie jak, w którym pliku i gdzie dopisać odpowiednią funkcję aby admina przekierowało na jego stronę czyli do pliku admin.php a usera do profil.php. Próbowałem coś tam wykombinować ale to nie działa. Byłbym wdzięczny za rozwiązanie albo chociaż wskazówkę.
Z góry dziękuje.

Poniżej pliki i skrypty

CODE
Class.user.php
<?php

require_once 'Dbconfig.php';

class USER
{

private $conn;

public function __construct()
{
$database = new Database();
$db = $database->dbConnection();
$this->conn = $db;
}

public function runQuery($sql)
{
$stmt = $this->conn->prepare($sql);
return $stmt;
}

public function lasdID()
{
$stmt = $this->conn->lastInsertId();
return $stmt;
}

public function register($uname,$email,$upass,$imie,$nazwisko,$data_urodzenia,$miejscowosc,$wojewodztwo,$panstwo,$zawod,$telefon,$wynagrodzenie,$userRole,$plec,$code)
{
try
{
$password = md5($upass);
$stmt = $this->conn->prepare("INSERT INTO pracownicy_users(userName,userEmail,userPass,imie,nazwisko,data_urodzenia,miejsc
owosc,wojewodztwo,panstwo,zawod,telefon,wynagrodzenie,plec,tokenCode)
VALUES(:user_name, :user_mail, :user_pass, :imie, :nazwisko, :data_urodzenia, :miejscowosc, :wojewodztwo, :panstwo, :zawod, :telefon, :wynagrodzenie, :user_role, :plec, :active_code)");
$stmt->bindparam(":user_name",$uname);
$stmt->bindparam(":user_mail",$email);
$stmt->bindparam(":user_pass",$password);
$stmt->bindparam(":imie",$imie);
$stmt->bindparam(":nazwisko",$nazwisko);
$stmt->bindparam(":data_urodzenia",$data_urodzenia);
$stmt->bindparam(":miejscowosc",$miejscowosc);
$stmt->bindparam(":wojewodztwo",$wojewodztwo);
$stmt->bindparam(":panstwo",$panstwo);
$stmt->bindparam(":zawod",$zawod);
$stmt->bindparam(":telefon",$telefon);
$stmt->bindparam(":wynagrodzenie",$wynagrodzenie);
$stmt->bindparam(":user_role",$userRole);
$stmt->bindparam(":plec",$plec);
$stmt->bindparam(":active_code",$code);
$stmt->execute();
return $stmt;
}
catch(PDOException $ex)
{
echo $ex->getMessage();
}
}

public function login($email,$upass)
{
try
{
$stmt = $this->conn->prepare("SELECT * FROM pracownicy_users WHERE userEmail=:email_id");
$stmt->execute(array(":email_id"=>$email));
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);

if($stmt->rowCount() == 1)
{
if($userRow['userStatus']=="Y")
{
if($userRow['userPass']==md5($upass))
{
$_SESSION['userSession'] = $userRow['userID'];
$_SESSION['userRole'] = $userRow['userRole'];
return true;
}
else
{
header("Location: login.php?error");
exit;
}
}
else
{
header("Location: login.php?inactive");
exit;
}
}
else
{
header("Location: login.php?error");
exit;
}
}
catch(PDOException $ex)
{
echo $ex->getMessage();
}
}


public function is_logged_in()
{
if(isset($_SESSION['userSession']))
{
return true;
}
}

public function redirect($url)
{
header("Location: $url");
}

public function logout()
{
session_destroy();
$_SESSION['userSession'] = false;
}

function send_mail($email,$message,$subject)
{
require_once('mailer/class.phpmailer.php');
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug = 1;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Host = "smtp.gmail.com";
$mail->Port = 465;
$mail->AddAddress($email);
$mail->Username="radoslawmazurr@gmail.com";
$mail->Password="...";
$mail->SetFrom('radoslawmazurr@gmail.com','Wykwalifikowani.pl');
$mail->AddReplyTo("radoslawmazurr@gmail.com","Wykwalifikowani.pl");
$mail->Subject = $subject;
$mail->MsgHTML($message);
$mail->Send();
}
}<?php

signup.php

<?php
session_start();
require_once 'Class.user.php';

$reg_user = new USER();

if($reg_user->is_logged_in()!="" AND $_SESSION['userRole'] =('user'))
{
$reg_user->redirect('profil.php');
} else if ($reg_user->is_logged_in()!="" AND $_SESSION['userRole'] = ('admin')){
$reg_user->redirect('admin.php');
}


if(isset($_POST['btn-signup']))
{
$uname = trim($_POST['txtuname']);
$email = trim($_POST['txtemail']);
$upass = trim($_POST['txtpass']);
$imie = trim($_POST['txtimie']);
$nazwisko = trim($_POST['txtnazwisko']);
$data_urodzenia = trim($_POST['datedataurodzenia']);
$miejscowosc = trim($_POST['txtmiejscowosc']);
$wojewodztwo = trim($_POST['txtwojewodztwo']);
$panstwo = trim($_POST['txtpanstwo']);
$zawod = trim($_POST['txtzawod']);
$telefon = trim($_POST['txttelefon']);
$wynagrodzenie = trim($_POST['txtwynagrodzenie']);
$userRole = trim($_POST['txtuserRole']);
$plec = trim($_POST['txtplec']);
$code = md5(uniqid(rand()));

$stmt = $reg_user->runQuery("SELECT * FROM pracownicy_users WHERE userEmail=:email_id");
$stmt->execute(array(":email_id"=>$email));
$row = $stmt->fetch(PDO::FETCH_ASSOC);

if($stmt->rowCount() > 0)
{
$msg = "
<div class='alert alert-error'>
<button class='close' data-dismiss='alert'>&times;</button>
<strong>Przepraszamy !</strong> taki adres email już istnieje , Proszę spróbować inny.
</div>
";
}
else
{
if($reg_user->register($uname,$email,$upass,$imie,$nazwisko,$data_urodzenia,$miejscowosc,$wojewodztwo,$panstwo,$zawod,$telefon,$wynagrodzenie,$userRole,$plec,$code))
{
$id = $reg_user->lasdID();
$key = base64_encode($id);
$id = $key;

$message = "
Hello $uname,
<br /><br />
Witamy w Wykwalifikowani.pl!<br/>
Do zakończenia rejestracji prosimy nacisnąć ten link<br/>
<br /><br />
<a href='http://localhost/wykwalifikowani/verify.php?id=$id&code=$code'>Wciśnij TUTAJ by aktywować smile.gif</a>
<br /><br />
Dziękujemy,";

$subject = "Potwierdzenie rejestracji";

$reg_user->send_mail($email,$message,$subject);
$msg = "
<div class='alert alert-success'>
<button class='close' data-dismiss='alert'>&times;</button>
<strong>Gratulacje!</strong> Wysłaliśmy wiadomości na twoją skrzynkę pocztową $email.
Proszę wcisnąc link weryfikujący w twojej skrzynce pocztowej aby utworzyć konto.
</div>
";
}
else
{
echo "Przepraszamy , Zapytanie nie może zostać wykonane...";
}
}
}
?>

fpass.php

<?php
session_start();
require_once 'Class.user.php';
$user = new USER();

if($user->is_logged_in()!="" AND $_SESSION['userRole']= ('user'))
{
$user->redirect('profil.php');
} elseif ($user->is_logged_in()!="" AND $_SESSION['userRole'] = ('admin')){
$reg_user->redirect('admin.php');


if(isset($_POST['btn-submit']))
{
$email = $_POST['txtemail'];

$stmt = $user->runQuery("SELECT userID FROM pracownicy_users WHERE userEmail=:email LIMIT 1");
$stmt->execute(array(":email"=>$email));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount() == 1)
{
$id = base64_encode($row['userID']);
$code = md5(uniqid(rand()));

$stmt = $user->runQuery("UPDATE pracownicy_users SET tokenCode=:token WHERE userEmail=:email");
$stmt->execute(array(":token"=>$code,"email"=>$email));

$message= "
Hello , $email
<br /><br />
Dostaliśmy żadanie aby zresetować twoje hasło, Aby to zrobić wystarczy kliknąć na podany link
<br /><br />
Wciśnij Podany Link Do Zresetowania Twojego Hasła
<br /><br />
<a href='http://localhost/wykwalifikowani/resetpass.php?id=$id&code=$code'>Wciśnij tutaj aby zresetować hasło</a>
<br /><br />
Dziękujemy smile.gif
";
$subject = "Zmieniane Hasła";

$user->send_mail($email,$message,$subject);

$msg = "<div class='alert alert-success'>
<button class='close' data-dismiss='alert'>&times;</button>
Wysłaliśmy wiadomość na $email.
Proszę wcisnąć link aby wygenerować nowe hasło.
</div>";
}
else
{
$msg = "<div class='alert alert-danger'>
<button class='close' data-dismiss='alert'>&times;</button>
<strong>Przepraszamy!</strong> Nie znaleziono email-a.
</div>";
}
}
?>


CODE
login.php

<?php
session_start();
require_once 'Class.user.php';
$user_login = new USER();

if($user_login->is_logged_in()!="" AND $_SESSION['userRole'] = ('user'))
{
$user_login->redirect('profil.php');
} elseif ($user_login->is_logged_in()!="" AND $_SESSION['userRole'] = ('admin')){
$user_login->redirect('admin.php');
}

if(isset($_POST['btn-login']))
{
$email = trim($_POST['txtemail']);
$upass = trim($_POST['txtupass']);

if($user_login->login($email,$upass) AND $_SESSION['userRole'] = ('user'))
{
$user_login->redirect('profil.php');
} elseif ($user_login->login($email,$upass) AND $_SESSION['userRole'] = ('admin')) {
$user_login->redirect('admin.php');
}
}
?>







Zapomniałem dodać jeszcze te dwa pliki

CODE
<?php
require_once 'Class.user.php';
$user = new USER();

if(empty($_GET['id']) && empty($_GET['code']))
{
$user->redirect('login.php');
}

if(isset($_GET['id']) && isset($_GET['code']))
{
$id = base64_decode($_GET['id']);
$code = $_GET['code'];

$statusY = "Y";
$statusN = "N";

$stmt = $user->runQuery("SELECT userID,userStatus FROM pracownicy_users WHERE userID=:uID AND tokenCode=:code LIMIT 1");
$stmt->execute(array(":uID"=>$id,":code"=>$code));
$row=$stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount() > 0)
{
if($row['userStatus']==$statusN)
{
$stmt = $user->runQuery("UPDATE pracownicy_users SET userStatus=:status WHERE userID=:uID");
$stmt->bindparam(":status",$statusY);
$stmt->bindparam(":uID",$id);
$stmt->execute();

$msg = "
<div class='alert alert-success'>
<button class='close' data-dismiss='alert'>&times;</button>
<strong>WoW !</strong> Twoje konto jest teraz aktywne : <a href='login.php'>Zaloguj tutaj</a>
</div>
";
}
else
{
$msg = "
<div class='alert alert-error'>
<button class='close' data-dismiss='alert'>&times;</button>
<strong>Przepraszamy !</strong> Twoje konto już było aktywowane : <a href='login.php'>Zaloguj tutaj</a>
</div>
";
}
}
else
{
$msg = "
<div class='alert alert-error'>
<button class='close' data-dismiss='alert'>&times;</button>
<strong>Przepraszamy!</strong> Nie znaleziono konta : <a href='signup.php'>Zarejestruj się tutaj </a>
</div>
";
}
}

?>


oraz baza danych
Kod
CREATE TABLE `pracownicy_users` (
  `userID` int(11) NOT NULL,
  `userName` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `userEmail` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `userPass` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `imie` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `nazwisko` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `data_urodzenia` date NOT NULL,
  `miejscowosc` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `wojewodztwo` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `panstwo` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `zawod` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `telefon` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `wynagrodzenie` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `userRole` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `plec` enum('kobieta, mężczyzna') COLLATE utf8_polish_ci NOT NULL,
  `userStatus` enum('Y','N') COLLATE utf8_polish_ci NOT NULL DEFAULT 'N',
  `tokenCode` varchar(100) COLLATE utf8_polish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;



bostaf
Wskazówka.
Przetestuj to w takiej formie w jakiej masz, i sprawdź co się dzieje po zalogowaniu się kogokolwiek - do jakiej strony jest user odsyłany.
Poszukaj odwołania do tej strony w całym swoim kodzie. Jeśli jest dużo odwołań, to poszukaj tego, które jest zagnieżdżone w kodzie określającym co dzieje się po udanym zalogowaniu. Jeśli nie wiesz który kawałek kodu za to odpowiada, to daj znać smile.gif
Jeśli uda Ci się namierzyć ten fragment, to wstaw tam warunek: jeśli admin to ->redirect('admin.php'), jeśli nie admin to...
Rapidrapid
Witam, dziękuje za zainteresowanie się problemem. Po testach jest tak że jedynie użytkownicy w tym admin logują się do pliku profil.php. Warunku do redirect('admin.php') w ogóle nie działa. Coś mi mówi że powinienem coś zmienić w pliku class.user.php w tej części.

Kod
public function login($email,$upass)
{
  try
  {
   $stmt = $this->conn->prepare("SELECT * FROM pracownicy_users WHERE userEmail=:email_id");
   $stmt->execute(array(":email_id"=>$email));
   $userRow=$stmt->fetch(PDO::FETCH_ASSOC);
  
   if($stmt->rowCount() == 1)
   {
    if($userRow['userStatus']=="Y")
    {
     if($userRow['userPass']==md5($upass))
     {
      $_SESSION['userSession'] = $userRow['userID'];
      $_SESSION['userRole'] = $userRow['userRole'];
      return true;
     }
     else
     {
      header("Location: login.php?error");
      exit;
     }
    }
    else
    {
     header("Location: login.php?inactive");
     exit;
    }
   }
   else
   {
    header("Location: login.php?error");
    exit;
   }  
  }
  catch(PDOException $ex)
  {
   echo $ex->getMessage();
  }
}


public function is_logged_in()
{
  if(isset($_SESSION['userSession']))
  {
   return true;
  }
}

public function redirect($url)
{
  header("Location: $url");
}

public function logout()
{
  session_destroy();
  $_SESSION['userSession'] = false;

Albo w pliku login.php w tym fragmencie

Kod
<?php
session_start();
require_once 'Class.user.php';
$user_login = new USER();

if($user_login->is_logged_in()!="" AND $_SESSION['userRole'] = ('user'))
{
    $user_login->redirect('profil.php');
} elseif ($user_login->is_logged_in()!="" AND $_SESSION['userRole'] = ('admin')){
    $user_login->redirect('admin.php');
}

if(isset($_POST['btn-login']))
{
    $email = trim($_POST['txtemail']);
    $upass = trim($_POST['txtupass']);
    
    if($user_login->login($email,$upass) AND $_SESSION['userRole'] = ('admin'))
    {
        $user_login->redirect('admin.php');
    }
    if  ($user_login->login($email,$upass) AND $_SESSION['userRole'] = ('user'))
    {
$user_login->redirect('profil.php');
    }
}
?>

Ale nie wiem czy dobrze myśle i w ogóle jaki warunek wpisać i w którym miejscu sciana.gif , jestem chyba za głupi:/

Proszę o pomoc bądź nakierowanie. Z góry dziękuje.
bostaf
No to sprawdź, czy dobrze myślisz.
Skoro chcesz uzależnić przekierowanie od roli usera, to rzeczywiście powinieneś szukać tam, gdzie rola jest sprawdzana, czyli gdzieś w okolicach " if $_SESSION['userRole'] = ..."
Tam w login.php masz instrukcję warunkową która sprawdza, czy is_logged_in() i czy ma daną rolę. Dla admina spodziewasz się przekierowania na admin.php. A tak się nie dzieje. Sprawdź zatem, czy admin ma faktycznie rolę "admin". Sprawdź w bazie, albo tuż przed tym warunkiem dodaj sobie coś takiego dla testu:

  1. die($_SESSION['userRole']);


("die" zatrzymuje wykonywanie skryptu a to co w parametrze zostanie wyświetlone tuż przed zatrzymaniem.
Żeby testować wartości zmiennych w locie możesz też używać funkcji var_dump)
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.