![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 9.05.2017 Ostrzeżenie: (0%) ![]() ![]() |
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'>×</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ć (IMG:style_emoticons/default/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'>×</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 (IMG:style_emoticons/default/smile.gif) "; $subject = "Zmieniane Hasła"; $user->send_mail($email,$message,$subject); $msg = "<div class='alert alert-success'> <button class='close' data-dismiss='alert'>×</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'>×</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'>×</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'>×</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'>×</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; |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
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ć (IMG:style_emoticons/default/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... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 9.05.2017 Ostrzeżenie: (0%) ![]() ![]() |
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 (IMG:style_emoticons/default/sciana.gif) , jestem chyba za głupi:/ Proszę o pomoc bądź nakierowanie. Z góry dziękuje. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
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: ("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) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 21:25 |