Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Pewien problem z formularzem logowania...
Forum PHP.pl > Forum > Przedszkole
Szymi_2004
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
Rewil
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
Luneth
Nie, nie, nie, javascript można wyłączyć (ano zdarzają się idioci którzy to robią smile.gif). Ta linijka kodu łączy stringi, znak "+" oznacza tam coś na wzór tego w php:
  1. $var = 'string'.'string2';


Odpowiedź na Twoje pytanie: po walidacji usera zrób przekierowanie headerem do jego strony;
  1. if(user_validation()){
  2. $username = $_POST['username'];
  3. header('Location: /nazwastrony.php/'.$uername);
  4. }
  5. else{
  6. echo "Błąd";
  7. }
Szymi_2004
@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).
Luneth
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ę:
  1. error_reporting(E_ALL | E_STRICT);
Szymi_2004
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
Luneth
Zamieść proszę kod po kolei wszystkiego jak leci, wtedy znajdziemy przyczynę winksmiley.jpg
Ramzaa
A spróbuj może tak:

  1. header("Location: /nazwastrony.php/", $uername);
Szymi_2004
@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
Ramzaa
Ja tego nie łapie, jak można uczyć tak bezsensownie pisać skrypty..

  1. if( $haslo[0]==$pass )
  2. {
  3. login( $login );
  4. echo"<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=index.php\">";
  5. }


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.
Szymi_2004
@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ć smile.gif. Sam jeszcze trochę poszperam, jeżeli coś sensownego znajdę - zwrócę się do Was. Dziękuję za dotychczasową pomoc, póki co wystawiam wam zasłużone "Pomógł" i udaję się w celu znalezienia lepszego przykładu. Pozdrawiam
Ramzaa
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.

  1. CREATE TABLE `users` (
  2. `uid` INT( 11 ) NOT NULL AUTO_INCREMENT ,
  3. `name` VARCHAR( 24 ) NOT NULL ,
  4. `password` VARCHAR( 24 ) NOT NULL ,
  5. PRIMARY KEY ( `uid` )
  6. ) ENGINE = MYISAM ;


No i objaśnienie:

  • uid - będziemy tu przechowywali unikalne ID każdego użytkownika
  • name - nazwa użytkownika
  • password - hasło użytkownika


2. Tworzymy plik index.php, a w nim dajemy:

  1. <?php
  2.  
  3. ob_start();
  4. session_start();
  5. require_once("functions.php");
  6.  
  7. connection();
  8.  
  9. ?>
  10.  
  11. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  12. "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  13. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
  14.  
  15. <head>
  16. <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
  17. <title>Logowanie, by Ramza ;)</title>
  18. <link rel="stylesheet" type="text/css" href="styles.css" />
  19. </head>
  20.  
  21. <body>
  22.  
  23. <?php
  24.  
  25. $site = $_GET['site'];
  26.  
  27. if ($site=="") {
  28. include ("glowna.php");
  29. }
  30.  
  31. else {
  32.  
  33. if (is_file("$site.php")) {
  34. include ("$site.php");
  35. }
  36. }
  37.  
  38. ?>
  39.  
  40. </body>
  41.  
  42. </html>


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()winksmiley.jpg. No dobra, więc stwórzmy ten plik - functions.php

  1. <?php
  2.  
  3. function connection() {
  4.  
  5. $db[] = 'localhost';
  6. $db[] = 'root';
  7. $db[] = '';
  8. $db[] = 'users';
  9.  
  10. mysql_connect($db[0], $db[1], $db[2]) or DIE ("Błąd połączenia z bazą danych, czyli złe dane.");
  11. mysql_select_db($db[3]) or DIE ("Błąd bazy danych MySQL, czyli prawdopodnie zła nazwa bazy.");
  12.  
  13. }
  14.  
  15. ?>

Raczej to powinieneś wiedzieć, więc odpuszczę sobie tłumaczenia.

4. Teraz musimy utworzyć plik odpowiedzialny za rejestrację nowego użytkownika, czyli rejestracja.php

  1. <a href="index.php">Strona główna</a><br /><br />
  2.  
  3. <?php
  4.  
  5. if (isset($_POST['submit'])) {
  6.  
  7. $login = $_POST['login'];
  8. $password = $_POST['password'];
  9. $password2 = $_POST['password2'];
  10.  
  11. if ((empty($login)) OR (empty($password))) {
  12.  
  13. echo 'Musisz wypełnić wszystkie pola!';
  14. return false;
  15.  
  16. }
  17.  
  18. if ($password == $password2) {
  19.  
  20. $usersp = mysql_query("SELECT * FROM `users` WHERE `name` = '$login'");
  21.  
  22. if (!mysql_num_rows($usersp) == 0) {
  23.  
  24. echo 'Taki użytkownik już istnieje!<br /><a href="index.php?site=rejestracja">Powrót</a>';
  25. return false;
  26. }
  27.  
  28. else {
  29.  
  30. echo 'Zostałeś poprawnie zarejestrowany!<br />
  31. <a href="index.php?site=logowanie">Zaloguj się</a>';
  32.  
  33. mysql_query("INSERT INTO `users` (uid, name, password) VALUES (null, '$login', '$password')");
  34. return false;
  35.  
  36. }
  37.  
  38. }
  39.  
  40. else {
  41.  
  42. echo 'Hasła muszą być takie same!';
  43. return false;
  44.  
  45. }
  46.  
  47. }
  48.  
  49. else {
  50.  
  51. echo '<h3>Tworzenie nowego konta:</h3>
  52. <form action="index.php?site=rejestracja" method="POST">
  53. Login: <input type="text" name="login"><br />
  54. Hasło: <input type="password" name="password"><br />
  55. Powtórz hasło: <input type="password" name="password2"><br /><br />
  56. <input type="submit" name="submit" value="Zaloguj się">
  57. </form>';
  58.  
  59. }
  60.  
  61. ?>

4. Dobra, możemy się rejestrować, teraz zrobimy logowanie - logowanie.php.

  1. <a href="index.php">Strona główna</a><br /><br />
  2.  
  3. <?php
  4.  
  5. if (isset($_POST['submit'])) {
  6.  
  7. $login = $_POST['login'];
  8. $password = $_POST['password'];
  9.  
  10. $query = mysql_query("SELECT * FROM `users` WHERE `name` = '$login' AND `password` = '$password'");
  11.  
  12. if(@mysql_num_rows($query)) {
  13.  
  14. echo 'Zostałeś poprawnie zalogowany, jako <strong>'.$login.'</strong>. Witaj!<br />
  15. <a href="index.php">Przejdź na stronę główną.</a>';
  16.  
  17. $_SESSION['zalogowany'] = true;
  18. $_SESSION['login'] = $login;
  19. }
  20.  
  21. else {
  22.  
  23. echo 'Podane dane są błędne!';
  24. return false;
  25.  
  26. }
  27.  
  28.  
  29. return false;
  30.  
  31. }
  32.  
  33. if ($_SESSION['zalogowany']) {
  34. echo ('Witaj <strong>'.$_SESSION['login'].'<br />');
  35. }
  36.  
  37. else {
  38. echo '<h3>Logowanie do serwisu:</h3>
  39. <form action="index.php?site=logowanie" method="POST">
  40. Login: <input type="text" name="login"><br />
  41. Hasło: <input type="password" name="password"><br /><br />
  42. <input type="submit" name="submit" value="Zaloguj się">
  43. </form>';
  44. }
  45.  
  46. ?>

5. I woala, nasza strona jest już prawie gotowa! Teraz dajmy możliwość wylogowania się, tworzymy wylogowanie.php.

  1. <?php
  2.  
  3. header("Location: index.php");
  4.  
  5. ?>

6. Pięknie! Pozostaje nam tylko stworzyć stronę główną naszej strony, czyli glowna.php.

  1. <?php
  2.  
  3. if ($_SESSION['zalogowany']==true) {
  4.  
  5. echo 'Witaj <strong>'.$_SESSION['login'].'</strong> na swojej stronie!<br /><br />
  6. <a href="#">Jakaś strona</a> |
  7. <a href="index.php?site=wylogowanie">Wyloguj się</a>';
  8.  
  9. }
  10.  
  11. else {
  12.  
  13. echo 'Witaj gościu na swojej stronie!<br /><br />
  14. <a href="index.php?site=logowanie">Zaloguj się</a> |
  15. <a href="#">Jakaś strona</a> |
  16. <a href="index.php?site=rejestracja">Rejestracja</a>';
  17.  
  18. }
  19.  
  20. ?>

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 smile.gif

Skrypt napisany przeze mnie, można go używać i zmieniać wedle uznania.

Pozdrawiam.
Szymi_2004
Na początku chciałbym Ci podziękować za trud włożony w napisanie skryptu, jestem ogromnie wdzięczny smile.gif. Naturalnie Duże piwo się należy. Niestety widocznie nieszczęścia lubią chodzić parami, dlatego też mam kolejny problem, tym razem z konfiguracją. Mój plik functions.php wygląda następująco:

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ę
Ramzaa
Wybacz, że nie opisałem wszystkiego, ale naprawdę czas na to nie pozwolił.

  1. $db[] = 'localhost';
  2. $db[] = 'root';
  3. $db[] = 'haslo';
  4. $db[] = 'simon';

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.
Szymi_2004
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 tongue.gif. Naprawdę jestem ogromnie wdzięczny za pomoc. Pozdrawiam
kkuubbaa88
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
Szymi_2004
@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?
Ramzaa
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:

  1. <a href="index.php">Strona główna</a><br /><br />
  2.  
  3. <?php
  4.  
  5. if (isset($_POST['submit'])) {
  6.  
  7. $login = $_POST['login'];
  8. $password = $_POST['password'];
  9.  
  10. $query = mysql_query("SELECT * FROM `users` WHERE `name` = '$login' AND `password` = '$password'");
  11.  
  12. if(@mysql_num_rows($query)) {
  13.  
  14. echo 'Zostałeś poprawnie zalogowany, jako <strong>'.$login.'</strong>. Witaj!<br />';
  15.  
  16. $_SESSION['zalogowany'] = true;
  17. $_SESSION['login'] = $login;
  18.  
  19. $file_data = "Moja strona...";
  20. $file = "$login.php";
  21. $f = fopen($file, "a");
  22. flock($f, 2);
  23. fwrite($f, $file_data);
  24. flock($f, 3);
  25. fclose($f);
  26.  
  27. header("Refresh: 2, url=index.php?site=$login");
  28. echo 'Za chwilę nastąpi przekierowanie na stronę użytkownika. Proszę czekaj.';
  29. }
  30.  
  31. else {
  32.  
  33. echo 'Podane dane są błędne!';
  34. return false;
  35.  
  36. }
  37.  
  38.  
  39. return false;
  40.  
  41. }
  42.  
  43. if ($_SESSION['zalogowany']) {
  44. echo ('Witaj <strong>'.$_SESSION['login'].'<br />');
  45. }
  46.  
  47. else {
  48. echo '<h3>Logowanie do serwisu:</h3>
  49. <form action="index.php?site=logowanie" method="POST">
  50. Login: <input type="text" name="login"><br />
  51. Hasło: <input type="password" name="password"><br /><br />
  52. <input type="submit" name="submit" value="Zaloguj się">
  53. </form>';
  54. }
  55.  
  56. ?>

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.
Szymi_2004
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 tongue.gif. W takim razie czy da się bez problemu podpiąć nowo otwartą stronę pod wcześniej rozpoczętą sesję? Tak aby na stronę mógł wejść tylko i wyłącznie użytkownik zalogowany, przypisany do danej strony. Poza tym małym szczegółem wszystko działa wprost idealnie i jestem bardzo zadowolony smile.gif.
Ramzaa
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ć smile.gif

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.
  1. <a href="index.php">Strona główna</a><br /><br />
  2.  
  3. <?php
  4. $nick = $_GET['name'];
  5. $userinfo = mysql_fetch_assoc(mysql_query("SELECT * FROM `users` WHERE `name` = '$nick'"));
  6.  
  7. echo 'Profil użytkownika <strong>'.$nick.'</strong><br /><br />';
  8. echo 'Nazwa użytkownika: ', $userinfo['name'];
  9. echo 'Id usera: ', $userinfo['uid'];
  10.  
  11. ?>

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.
  1. <a href="index.php">Strona główna</a><br /><br />
  2.  
  3. <?php
  4.  
  5. if (isset($_POST['submit'])) {
  6.  
  7. $login = $_POST['login'];
  8. $password = $_POST['password'];
  9.  
  10. $query = mysql_query("SELECT * FROM `users` WHERE `name` = '$login' AND `password` = '$password'");
  11.  
  12. if(@mysql_num_rows($query)) {
  13.  
  14. echo 'Zostałeś poprawnie zalogowany, jako <strong>'.$login.'</strong>. Witaj!<br />';
  15.  
  16. $_SESSION['zalogowany'] = true;
  17. $_SESSION['login'] = $login;
  18.  
  19. header("Refresh: 2, url=index.php?site=profil&name=$login");
  20. echo 'Za chwilę nastąpi przekierowanie na stronę użytkownika. Proszę czekaj.';
  21. }
  22.  
  23. else {
  24.  
  25. echo 'Podane dane są błędne!';
  26. return false;
  27.  
  28. }
  29.  
  30.  
  31. return false;
  32.  
  33. }
  34.  
  35. if ($_SESSION['zalogowany']) {
  36. echo ('Witaj <strong>'.$_SESSION['login'].'<br />');
  37. }
  38.  
  39. else {
  40. echo '<h3>Logowanie do serwisu:</h3>
  41. <form action="index.php?site=logowanie" method="POST">
  42. Login: <input type="text" name="login"><br />
  43. Hasło: <input type="password" name="password"><br /><br />
  44. <input type="submit" name="submit" value="Zaloguj się">
  45. </form>';
  46. }
  47.  
  48. ?>

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:
  1. <a href="index.php">Strona główna</a><br /><br />
  2.  
  3. <?php
  4.  
  5. $nick = $_GET['name'];
  6. if ($_SESSION['zalogowany']) {
  7. if ($_SESSION['login']==$nick) {
  8. $userinfo = mysql_fetch_assoc(mysql_query("SELECT * FROM `users` WHERE `name` = '$nick'"));
  9. echo 'Nazwa użytkownika: ', $userinfo['name'];
  10. echo 'ID usera: ', $userinfo['uid'];
  11. }
  12. else {
  13. echo 'Nie możesz przeglądać nie swojego profilu!';
  14. return false;
  15. }
  16. }
  17. else {
  18. echo 'Tylko zalogowani użytkownicy mogą przegląć swój profil!';
  19. return false;
  20. }
  21. ?>

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 smile.gif
Mam nadzieję, że przybliżyłem Ci sens działania PHP i wytłumaczyłem podstawowe funkcje.

Pozdrawiam.
Szymi_2004
Mój problem jest trochę innej natury, sam profil jest osobną stroną i nie mam w jaki sposób jej zastąpić. Najlepszym rozwiązaniem byłoby zaincludowanie (jak na mój rozum) strony użytkownika, niestety ta funkcja nie działa, bądź źle ją sformułowałem. Przedstawiony przez Ciebie skrypt jest bezbłędny, ale niestety nie w moim przypadku sad.gif. Potrzebuję kodu, który będzie podpinał stronę pod wcześniej otworzoną sesję (tak jak wspominałem), niestety nie mogę tego inaczej przeprowadzić. Próbowałem kombinować z podanymi przez Ciebie kodami, jednakże z mizernym skutkiem. Poczytam na temat sesji PHP, możliwe, że sam do tego dojdę, jednakże jeżeli miałbyś chwilkę (nie chcę już naciągać Twojego cennego czasu) i ochotę napisać jeden, ostatni kod, który pozwalałby mi na podpięcie dowolnej strony pod zalogowaną wcześniej sesję, byłbym ogromnie wdzięczny. Przepraszam, nie sądziłem, że sprawa się tak bardzo skomplikuje. Dziękuję za okazaną mi pomoc. Pozdrawiam

P.S. Wystawiam zasłużone pomógł za wszystkie posty.
Ramzaa
Jak wytłumaczysz do czego Ci to potrzebne to nie ma problemu, bo jestem przekonany, że źle sobie to wyobraziłeś. Powiedz dokładnie co chcesz zrobić, a znajdziemy jakieś sensowne wyjście z Twojej sytuacji smile.gif
Szymi_2004
Udało mi się! Załączyłem ponownie procedurę functions.php na osobnej stronie. Ramza jesteś wielki, biję Ci wielkie pokłony, bez Ciebie nic by się nie udało smile.gif. Na koniec dołączyłem linijkę
Kod
    else {
        echo 'Tylko zalogowani użytkownicy mogą przegląć swój profil!';
        return false;
    }

I wszystko działa jak fabryka chciała smile.gif. Jestem Ci ogromnie wdzięczny, mam nadzieję, że na swojej drodze będę spotykał wyłącznie tak dobrych ludzi jak Ty. Jeszcze raz dziękuję, pozdrawiam, na pewno jeszcze się usłyszymy (sądząc po moim lenistwie) smile.gif. Temat chyba do zamknięcia i usunięcia. Dziękuję
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.