![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 15.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Jako iż jest to mój pierwszy post na forum pragnę się przywitać - cześć. Do rzeczy. Ostatnio poszukiwałem dobrego i darmowego systemu logowania do systemu, z którego mógłbym zaczerpnąć trochę wiedzy do mojego projektu. Udało mi się znaleźć interesujący a zarazem bardzo prosty w budowie system opierający się na kodzie PHP + bazie MySQL (link do tematu). Niestety brakuje mu podstawowej funkcji, na której mi zależało. Otóż chciałbym, aby użytkownik po zalogowaniu ujrzał swoją stronę, najlepiej o nazwie analogicznej do nicku podanego w systemie. Długo szukałem odpowiedzi w Googlach, niestety wszystkie podawane przykłady po poprawnym zalogowaniu odsyłały wszystkich użytkowników do jednego adresu. Po naprawdę długim przekopywaniu Googli znalazłem rozwiązane przedstawione kodem JavaScript (niestety nie znam się kompletnie na tym języku, dalszą analizę pozostawiam Wam), zamieszczam go poniżej Kod var strona=user+ ".html"; form.action=strona; (link do posta) Nie mam pojęcia czy w ogóle da się zastosować je przy moim kodzie, za przekierowanie po poprawnym zalogowaniu odpowiada funkcja include, nie wiem do końca czy opłaca się bawić w wpychanie JS do tego. Mówiąc krótko szukam w miarę prostego skryptu, który sprawdzałby nick zalogowanego użytkownika po czym otwierał przypisaną mu stronę zaraz po naciśnięciu "Zaloguj". Kwestię wylogowania użytkownika oraz zabezpieczenia strony przed wizytami nie zalogowanych osób mam już z głowy, pozostał mi tylko ten nieszczęsny aspekt opisany wyżej :/. Z góry dziękuję za pomoc. Pozdrawiam |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 175 Pomógł: 0 Dołączył: 19.09.2009 Ostrzeżenie: (10%) ![]() ![]() |
Rozwiń tą wypowiedź:
Cytat Otóż chciałbym, aby użytkownik po zalogowaniu ujrzał swoją stronę, najlepiej o nazwie analogicznej do nicku podanego w systemie. Po kodzie z JS'a domyślam że potrzebujesz się posilić wiedzą o: mod_rewrite Ten post edytował Rewil 15.08.2010, 23:49:55 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 16.07.2007 Skąd: Gorzów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Nie, nie, nie, javascript można wyłączyć (ano zdarzają się idioci którzy to robią
![]()
Odpowiedź na Twoje pytanie: po walidacji usera zrób przekierowanie headerem do jego strony;
Ten post edytował Luneth 16.08.2010, 01:09:28 -------------------- "It's always darkest before the dawn." |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 15.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
@Rewil: Nie, kod JS przytoczyłem dla zobrazowania mojej myśli.
@Luneth: Dziękuję za odpowiedź. Jeżeli dobrze zrozumiałem walidacja następuje w pliku index.php, gdzie też wyświetla się formularz do logowania. Moja sytuacja wygląda aktualnie w ten sposób: Kod <?php include("config.php"); include("sessions.php"); ?> <html> <head> <title>Tytuł</title> </head> <body oncontextmenu="return false"> <h3>Logowanie</h3> <?php if ($_SESSION["USER_AUTH"]==TRUE){ $username = $_POST['szymi2004']; header('Location: /szymi2004.php/'.$username); } else{ include("login.php"); } ?> </body> </html> Pojawiają się pola do logowania, jednakże po wprowadzeniu danych pozostaje czysta strona (z wyjątkiem "Logowanie" u góry). Na logikę w if wziąłem parametr, który był określony już wcześniej, spróbowałem również po prostu "if(user_validation){" efekt identyczny jak aktualny widok po zalogowaniu - całkowicie czysta strona. Jeżeli mógłby ktoś wytłumaczyć mi gdzie popełniam błąd byłbym ogromnie wdzięczny, gdyż w temacie jestem stosunkowo od niedawna (powiedzmy, że miałem dużą przerwę swojego czasu). |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 16.07.2007 Skąd: Gorzów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
1. Najpierw ma się zrobić kod php, potem zostać wyświetlony jakikolwiek html, raz, że header nie zadziała, dwa dla samej estetyki i przejrzystości kodu.
2. Skąd bierzesz zmienną $_SESSION["USER_AUTH"] ? Na moje oko to powinno wyglądać tak: 1. Stwierdzam czy wysłano żądanie POST z formularza logowania: a)wysłano: - walidacja danych, przekierowanie b) nie wysłano: - wyświetlenie htmla z panelem logowania A to moje user_validation() to był po prostu pseudokod - miałem na myśli funkcję, w której zrobisz walidację i zwróci ona true lub false. Nie masz błędów? Na początku skryptu umieść linijkę: Ten post edytował Luneth 16.08.2010, 01:12:02 -------------------- "It's always darkest before the dawn." |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 15.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Więc tak... Pozwolę sobie sporządzić "instrukcję" logowania.
1. Użytkownik wchodzi na stronę główną, index.php. 2. Po wpisaniu poprawnych danych zostaje przeniesiony do panel.php (rezygnuję z bezpośredniego przekierowania z index.php) 3. W panel.php używam zmiennej $_SESSION["USER_ID"]=$login; w celu uzyskania informacji o zalogowanym użytkowniku (zmienne te brałem z pliku session.php). Plik check.php odpowiada za autoryzację użytkownika na podstawie rozpoczętej sesji (jeżeli dobrze zrozumiałem autora skryptu) Kod <?php include("check.php"); if $_SESSION["USER_ID"]=$login; $username = $_POST['szymi2004']; header('Location: /szymi2004.php/'.$username); } else{ echo "Błąd"; } ?> 4. W tym momencie powinno nastąpić przekierowanie na podaną stronę, niestety nic się nie dzieje, pozostaje czysta strona. Po umieszczeniu na początku kodu, przed include podanej przez Ciebie frazy "error_reporting(E_ALL | E_STRICT);" nadal pozostaje czysta strona. Widocznie czegoś nie rozumiem, albo nie umiem zrobić. Jeżeli masz chwilkę prosiłbym abyś zajrzał do podanego przeze mnie tematu w pierwszym poście, po czym zrelacjonował co powinienem poprawić. Dziękuję i pozdrawiam |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 16.07.2007 Skąd: Gorzów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Zamieść proszę kod po kolei wszystkiego jak leci, wtedy znajdziemy przyczynę
![]() -------------------- "It's always darkest before the dawn." |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 207 Pomógł: 17 Dołączył: 4.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 15.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
@Ramzaa: Próbowałem - nadal to samo.
OK w takim razie zamieszczam index.php, panel.php, sessions.php, login.php i check.php, config jest nie istotny dla sprawy. index.php Kod <?php include("config.php"); include("sessions.php"); ?> <html> <head> <title>Tytuł</title> </head> <body oncontextmenu="return false"> <h3>Logowanie</h3> <?php if($_SESSION["USER_AUTH"]==TRUE){ include("panel.php"); } else { include("login.php"); } ?> </body> </html> panel.php Kod <?php include("check.php"); if $_SESSION["USER_ID"]=$login; $username = $_POST['szymi2004']; header('Location: /szymi2004.php/'.$username); } else{ echo "Błąd"; } ?> <a href="index.php?action=logout">Wyloguj</a> sessions.php Kod <?php //2 session_start(); //3 function auth() { return $_SESSION["USER_AUTH"]; } //4 function login( $login ) { $_SESSION["USER_AUTH"]=TRUE; $_SESSION["USER_ID"]=$login; } //5 function logout() { $_SESSION["USER_AUTH"]=FALSE; $_SESSION["USER_ID"]=""; } //6 if( $_GET['action']=="logout" ){ logout(); } ?> login.php Kod <?php //7 echo" <form action=\"index.php?action=login\" method=post> <input class=login type=text name=login></input> <input class=login type=password name=pass></input> <input class=submit type=submit value=OK></input> </form> "; //8 if( $_GET['action']=="login" ) { //9 $login = $_POST['login']; $pass = md5($_POST['pass']); //10 $db = mysql_connect( $db_server, $db_user, $db_pass ); mysql_select_db( $db_name ); $query = "SELECT `password` FROM `users` WHERE `login`='$login'"; $query = mysql_query( $query ); $haslo = mysql_fetch_row( $query ); //11 if( $haslo[0]==$pass ) { login( $login ); echo"<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=index.php\">"; } else{ echo"Podane dane są nie poprawne."; } mysql_close( $db ); } ?> check.php Kod <?php if(!$_SESSION["USER_AUTH"]==TRUE) { echo "Nie jesteś zalogowany."; exit(); } ?> Całość została pisana na podstawie tego poradnika, link zamieściłem również w pierwszym poście. Proszę o pomoc. Pozdrawiam Ten post edytował Szymi_2004 16.08.2010, 16:06:20 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 207 Pomógł: 17 Dołączył: 4.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Ja tego nie łapie, jak można uczyć tak bezsensownie pisać skrypty..
Ok, super fajny kod, ale gdzie tu jest zarejestrowanie sesji? Albo zgłupiałem do reszty, albo tego nie widzę. Dalej.. hmm.. session_start(), gdzie jest? przecież to musi być, bo bez tego nie ruszy w ogóle. Nie chce mi się całego kodu analizować, ale znajdź może inny system logowania, to pomożemy Ci zrobić to co chcesz, bo czyjś kod wątpię, żeby komuś chciało się poprawiać. A jeżeli uparłeś się do bólu na ten skrypt, bo sprawdź może czy dodaje Ci ciasteczko do przeglądarki po poprawnym zalogowaniu. Pozdrawiam. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 15.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
@Ramzaa: Cóż widocznie autor sam za dużo nie wiedział. Naturalnie mogę zmienić skrypt, jednakże większość, których znalazłem wygląda identycznie jak użyty wcześniej. Jeżeli znasz jakiś dobry, godny polecenia skrypt logowania (najprostsza możliwa forma, chodzi mi wyłącznie o logowanie + odsyłanie użytkownika do przydzielonej mu strony), proszę dać mi znać
![]() Ten post edytował Szymi_2004 16.08.2010, 18:19:45 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 207 Pomógł: 17 Dołączył: 4.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Za to, co zobaczysz poniżej, należy się Duże piwo, przez duże "D".
Naszą przygodę z logowaniem zaczynamy od utworzenia odpowiedniej tabeli mysql, wygląda ona tak: 1. Tworzymy tabelę `users`, w której będziemy przechowywali wszystkich użytkowników naszej strony.
No i objaśnienie:
2. Tworzymy plik index.php, a w nim dajemy:
3. Od razu w oczy rzuca się nam linijka z require_once. Tam będziemy trzymali funkcje do łączenia się z naszą bazą danych mysql, która zaraz pod tym wywołujemy (connection() ![]()
Raczej to powinieneś wiedzieć, więc odpuszczę sobie tłumaczenia. 4. Teraz musimy utworzyć plik odpowiedzialny za rejestrację nowego użytkownika, czyli rejestracja.php
4. Dobra, możemy się rejestrować, teraz zrobimy logowanie - logowanie.php.
5. I woala, nasza strona jest już prawie gotowa! Teraz dajmy możliwość wylogowania się, tworzymy wylogowanie.php.
6. Pięknie! Pozostaje nam tylko stworzyć stronę główną naszej strony, czyli glowna.php.
I tak oto nasza strona jest bogatsza o system rejestracji i logowania użytkowników, a także podatność na ataki xss, sql_injection! Ale o tym to już sobie sam doczytaj, bo specjalnie nie zabezpieczałem, żebyś się nauczył. Leniu ![]() Skrypt napisany przeze mnie, można go używać i zmieniać wedle uznania. Pozdrawiam. Ten post edytował Ramzaa 16.08.2010, 20:33:28 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 15.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Na początku chciałbym Ci podziękować za trud włożony w napisanie skryptu, jestem ogromnie wdzięczny
![]() Kod <?php function connection() { $db[] = 'nazwa hosta'; $db[] = 'mysql'; $db[] = 'moje haslo'; $db[] = 'nazwa bazy danych, w moim przypadku - simon'; mysql_connect($db[0], $db[1], $db[2]) or DIE ("Błąd połączenia z bazą danych, czyli złe dane."); mysql_select_db($db[3]) or DIE ("Błąd bazy danych MySQL, czyli prawdopodnie zła nazwa bazy."); } ?> Wydaje mi się, że poprawnie uzupełniłem skrypt, jednakże wciąż wyskakuje komunikat oznajmiający, iż wpisane przeze mnie dane są nie prawidłowe. Logicznie rzecz biorąc "users" w ostatniej zmiennej odnosi się do nazwy tabeli w bazie, jednakże nazwa mojej bazy jest analogiczna do localhost. Próbowałem konfigurację z innym przykładem, dla pewności - logowanie przebiega bez zarzutu. Mógłbym liczyć na ponowną pomoc? Z góry dziękuję Ten post edytował Szymi_2004 16.08.2010, 23:13:16 |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 207 Pomógł: 17 Dołączył: 4.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wybacz, że nie opisałem wszystkiego, ale naprawdę czas na to nie pozwolił.
localhost - nazwa hosta, czyli zostawiasz localhost, root - nazwa użytkownika bazy, domyślnie root, więc jeśli nic nie ustawiałeś, to masz root, hasło - hasło do bazy danych mysql, simon - to już wiesz, nazwa bazy danych Wypełnij to prawidłowo i daj znać jaki efekt. A jeżeli nadal będzie błąd, skopiuj jego pełną treść i wklej tutaj. Pozdrawiam. Ten post edytował Ramzaa 16.08.2010, 23:23:46 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 15.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Poradziłem sobie z konfiguracją (okazało się, że baza i użytkownik nazywają się podobnie, przez co mój błąd), ustawiłem wszystko wedle potrzeb - działa po prostu IDEALNIE! Jednakże wciąż brakuje przekierowania użytkownika do jego własnej strony, wszyscy zostają przeniesieni na jednakową stronę. Czy byłbyś w stanie delikatnie zmodernizować kod, tak aby po zalogowaniu skrypt pobierał wpisany login i przenosił użytkownika do strony podpisanej jego loginem? Chodzi mi dokładnie o taką procedurę, przyjmijmy na to, że logujesz się używając loginu "Ramza", po wypełnieniu pól i naciśnięciu przycisku "Zaloguj" system przekierowuje Cie do Twojej osobistej strony, z której możesz się wylogować. Udałoby się coś takiego wykombinować? To byłaby moja ostatnia prośba
![]() |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 510 Pomógł: 1 Dołączył: 27.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
chyba nie chcesz robic kazdemu uzytkownikow własnej strony zapisanej na serwerze www ?
kazdego przekierowujesz do tej samej strony tylko, że wyswietlasz inna zawartosc pobrana z zmiennych sesji luz bazy danych Ten post edytował kkuubbaa88 17.08.2010, 15:34:55 |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 15.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
@kkuubbaa88: Otóż chcę, taka jest idea projektu. Chciałbym aby użytkownik "user" po zalogowaniu ujrzał stronę "user.php" i żadnej innej. Wydaje mi się, że operacje na bazie danych tutaj nie za dużo się zdadzą, chyba, że przypiszemy stronę do podanego ID, a serwer będzie sprawdzał ID autoryzowanego użytkownika, ale wydaje mi się, że to mija się z celem. A więc, można zaszczepić serwerowi operację sprawdzania wpisanego loginu + dobierania strony odpowiadającej loginowi?
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 207 Pomógł: 17 Dołączył: 4.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zaraz, zaraz. Jak dobrze zrozumiałem, chodzi Ci o to, że po poprawnym zalogowaniu użytkownika, skrypt przenosi go na stronę $nazwa_usera.php, tak? Może powiedz na co Ci to potrzebne to będzie nam łatwiej ocenić sytuację i ew. pomóc rozwiązać problem. Ja zakładam, że chcesz umieścić tam profil użytkownika, a adres żeby był przyjazny. Jeśli tak, to nie tędy droga. No, ale cóż - zakładać to ja mogę sobie w nieskończoność.
Masz to, o co prosiłeś. Zamień plik logowanie.php na ten:
Jednak od razu mówię, że jest to NAJGORSZE wyjście z możliwych. Powiedz dokładnie do czego potrzebny Ci taki skrypt, a postaramy się pomóc. Pozdrawiam. Ten post edytował Ramzaa 17.08.2010, 16:27:32 |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 15.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Tak, chciałbym aby każdy użytkownik w systemie miał swoją stronę z profilem. Zrozumiałem czemu to rozwiązanie określasz najgorszym... Teraz praktycznie każdy znający adres pliku może wejść bez logowania
![]() ![]() Ten post edytował Szymi_2004 17.08.2010, 19:10:51 |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 207 Pomógł: 17 Dołączył: 4.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Szymi, nie do końca o to mi chodziło, bo to zawsze można zabezpieczyć. Chodzi o to, że nie ma najmniejszego powodu, żeby robić plik profilu dla każdego użytkownika, skoro można to w jednym pliku wszystko, dla wszystkich zrobić
![]() Zacznijmy od utworzenia pliku profil.php, w którym będą wyświetlane dane użytkownika. Do tego pliku, za pomocą $_GET, będziemy pobierać nick użytkownika, którego chcemy wyświetlić dane. Czyli nasz przykładowy adres będzie wyglądał tak: index.php?site=profil&name=szymi. Tak więc stwórzmy ten plik - profil.php.
Tak to się prezentuje po stronie skryptu. Teraz do rzeczy. Dajmy w index.php odnośnik, np: <a href="index.php?site=profil&name=szymi">Zobacz profil Szymi</a>. Skrypt pokaże nam informacje o użytkowniku "Szymi", jeśli takowy istnieje. Jeśli nie, nie pokaże nic. Ale dobra, zróbmy więc, żeby zaraz po zalogowaniu, przenosiło nas do naszego profilu. Czyli logowanie.php.
No i pięknie, wszystko idzie po naszej myśli. Załóżmy teraz, że chcemy aby po przejściu do naszego profilu, inni użytkownicy nie mieli do niego dostępu, gdyż będziemy tam trzymali niezwykle ważne informacje typu PIN do karty kredytowej, na której jest kilkaset tysięcy złotych! Tak więc ponownie bierzemy w obrót plik profil.php i dodajemy warunek:
Najpierw sprawdzamy czy osoba odwiedzająca profil jest zalogowana, następnie (jeśli tak) czy jest to profil tej osoby. Jeśli nie, wywołujemy odpowiednie komunikaty i przerywamy działanie skryptu. Dalej musisz już sobie sam radzić, bo w końcu to Ty się uczysz, a nie ja ![]() Mam nadzieję, że przybliżyłem Ci sens działania PHP i wytłumaczyłem podstawowe funkcje. Pozdrawiam. Ten post edytował Ramzaa 17.08.2010, 19:48:00 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 04:32 |