Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Autoryzacja i logowanie uzytkownika.
Forum PHP.pl > Forum > PHP
Bibop
Witam,
mam taki problem. Pisze forum w php z wykorzystaniem mysql'a i utknalem w miejscu autoryzacji. Otoz, udalo mi sie wkoncu zrobic skrypty do logowania i rejestracji uzytkownikow i teraz mam problem jak zrobic, zeby po kliknieciu w przycisk "zaloguj" zamiast formularza do logowania pojawilo sie np. "witaj xxx". Mam dwa pliki do autoryzacji i jeden to zwykly formularz, a drugi skrypt (loguj.php) do sprawdzania danych w bazie. Wszystko jest ok, wyskakuje powitanie i ew. bledy, ale na nowej stronie, czyli nastepuje przekierowanie do skryptu obslugujacego logowanie.
Strona glowna to trzy includowane pliki naglowek.tpl, tekst.tpl (gdzie jest includowany formularz form_log.php) i stopka.tpl.
Powiem szczerze, ze juz powoli sie poddaje, bo nie moge wymyslec jak zrobic, zeby nie pisac kolejnych stron dla zalogowanych i niezalogowanych.
Pomysl jest taki, ze zalogowany moze pisac i odpowiadac na posty, a niezalogowany tylko czytac. Narazie wymyslilem zeby zrobic inna strone dla zalogowanych (z linkami do pisania nowego posta i do odpowiadania), ale moze da sie to zrobic inaczej (linki caly czas sa widoczne, ale po kliknieciu przez niezalogowanego wyskakuje komunikat "Jezeli chcesz napisac nowy temat...... itd")?
Formularz i skrypt znajdziecie tu.
Pozdrawiam,
Bibop
Spirit86
jest takie bajeczne urządzenie jak Szukaj, oraz Google....
Bibop
dobra, to inaczej.

Mam plik:
tekst.tpl
  1. <TR>
  2. <TD>
  3. <table bgcolor="#FFFFFF" width=100% height=200 cellspacing=0 cellpadding=0 border=0>
  4. <tr>
  5. <td valign="top"width="15%">
  6. <B><CENTER>DZIAŁY</B><BR><BR>
  7. <a href="<?=$link;?>/dzialy/uczelnia.php">uczelnia</a><P> <!-- odnosnik do dzialu uczelnia -->
  8. <a href="<?=$link;?>/dzialy/akademik.php">akademik</a><P> <!-- odnosnik do dzialu akademik -->
  9. <a href="<?=$link;?>/dzialy/przedmioty.php">przedmioty</a><P> <!-- odnosnik do dzialu przedmioty -->
  10. <a href="<?=$link;?>/dzialy/off_topic.php">off topic</a> <!-- odnosnik do dzialu off_topic -->
  11. <BR><BR><BR><BR>
  12.  
  13.  
  14. <!-- DOLACZENIE DO PLIKU SKRYPTU OBSLUGUJACEGO LOGOWANIE -->
  15.  
  16. Logowanie
  17.  
  18. <?php
  19.  
  20. include ("form_log.php");
  21.  
  22. ?>
  23.  
  24.  
  25. <!-- KONIEC SKRYPTU LOGOWANIA -->
  26.  
  27. <td valign="top"width="75%">
  28.  
  29. <?php
  30.  
  31. print ("$nazwa_dzialu<br>"); // wyswietla nazwe dzialu
  32.  
  33. ?>
  34.  
  35.  
  36. </td>
  37. </tr>
  38. </TD>
  39. </TR>


i dolaczony w nim formularz do logowania, ktory przedstawia sie nastepujaco:
form_log.php
  1. <?php
  2.  
  3. /*
  4. Formularz sluzacy do logowania.
  5. Zawiera dwa pola tekstowe z czego jedno ukryte haslo,
  6. po kliknieciu "Zaloguj", uruchamiany jest skrypt,
  7. który laczy sie z baza danych i sprawdza w niej czy
  8. uzytkownik i haslo sie zgadzaja
  9. */
  10.  
  11.  
  12. <form action="loguj.php" method="POST">
  13. Login: <input type=text name="login" value=""><br>
  14. Haslo: <input type=password name="haslo" value=""><br>
  15. <input type=submit value="Zaloguj"><br>
  16. Jesli nie masz konta <a href="form_rej.php">zarejestruj sie</a>
  17. </form>";
  18.  
  19. ?>


formularz odwoluje sie do skryptu:
loguj.php
  1. <?php
  2.  
  3. /*
  4. Skrypt obslugujacy sprawdzanie czy uzytkownik i jego haslo 
  5. wprowadzone w form_log.php zgadzaja sie z tymi w bazie danych
  6. oraz dopisuje w bazie numer sesji
  7. */
  8.  
  9. # Dane potrzebne do polaczenia sie z baza i wybraniu odpowiedniej tabeli
  10. $host="localhost";
  11. $user="Bibop";
  12. $pass="";
  13. $baza="forum";
  14. $tabela="uzytkownicy";
  15.  
  16. # Pozyskanie danych z formularza
  17. $login=$_POST['login'];
  18. $haslo=MD5($_POST['haslo']); // haslo kodowane
  19.  
  20. # Sprawdzanie czy w zmiennych sa jakies wartosci
  21. if ($haslo==TRUE AND $login==TRUE)
  22. {
  23.  
  24. # Laczymy sie z baza MySQL
  25. @mysql_connect ("$host", "$user", "$pass") or die ("Nie mozna polaczyc sie z baza");
  26.  
  27. # Wybieramy baze users
  28. @mysql_select_db ("$baza") or die ("Nie mozna wybrac bazy");
  29.  
  30. # Tworzymy zapytanie sprawdzajace w tabeli uzytkownicy czy wpisane dane sie w ni
    ej znajduja
  31. $zapytanie = "SELECT login FROM $tabela WHERE login='$login' AND haslo='$haslo'";
  32.  
  33. # Wynik naszego zapytania 
  34. $wynik = mysql_query($zapytanie);
  35.  
  36. # Jezeli zwrocona wartosc jest rozna od 1 to wyswietlony jest komunikat o nieist
    niejacym uzytkowniku
  37. if (mysql_num_rows($wynik)!=1)
  38. {
  39. print ("Przykro mi ale $login nie istnieje w bazie, lub podane haslo jest niepopraw
    ne.<BR>"
    );
  40. print ("Sprobuj ponownie <a href="form_log.php">Powrot</a>");
  41. print ("<br>");
  42. }
  43.  
  44. # Jezeli wszystko jest poprawne, wyswietlane jest powitanie
  45. else
  46. {
  47.  
  48. print ("witaj $login<BR>");
  49.  
  50. # Dodanie numeru sesji do bazy danych
  51. $session = session_id();
  52. $sesja = "UPDATE $tabela SET SESID='$session' WHERE login='$login'"; 
  53. @mysql_query($sesja);
  54. include ("form_wyloguj.php");
  55. }
  56. }
  57.  
  58. # Wyswietla informacje, ze ktoras z danych nie zostala wprowadzona
  59. else
  60. {
  61. print ("Cos jest nie tak<BR>");
  62. print ("Sprobuj ponownie <a href="form_log.php">Powrot</a>");
  63. }
  64.  
  65. ?>


Wszystko jest fajnie bo znajduje uzytkownika i go loguje, nadaje numer sesji. Problem w tym, ze wywala mi powitanie na nowej stronie, a chce zeby powitanie zastepowalo formularz.
Naprawde nie wiem jak to zrobic. Jak wrzucam po session_start(); header ("Location: main.php"); to mi wyskakuje strona glowna, ale z formularzem (uzytkownik jest zalogowany, ma numer sesji) tylko caly czas jest formularz, a nie powitanie.
Pytanie, czy dobrze, ze kombinuje w pliku loguj.php, czy wogole zabralem sie do tego ze zlej strony?
Jotek
Błąd znajduje się w pliku form_log.php. Niezależnie czy jesteś zalogowany czy nie wyświtla on formularz logowania.

Przykład rozwiązania:

dodaj na początku plików tekst.tpl, loguj.php:
  1. <?
  2. ?>



następnie dodaj zmienną sesyjną przetrzymującą wartość zmiennej $login w pliku loguj.php:
  1. <?php
  2.  
  3. // ....
  4.  
  5. # Jezeli wszystko jest poprawne, wyswietlane jest powitanie
  6. else
  7. {
  8. session_start();  // <------------- usuń to
  9.  
  10. $_SESSION['userid'] = $login; // <---------------- dodaj to 
  11.  
  12. print ("witaj $login<BR>");
  13.  
  14. # Dodanie numeru sesji do bazy danych
  15. $session = session_id();
  16. $sesja = "UPDATE $tabela SET SESID='$session' WHERE login='$login'"; 
  17. @mysql_query($sesja);
  18. include ("form_wyloguj.php"); // <-------------- usuń to 
  19. }
  20.  
  21. // .....
  22.  
  23. ?>


teraz zmodyfikuj plik form_log.php:

  1. <?php
  2.  
  3. $login= $_SESSION['userid']; //zmienna pomocnicza
  4.  
  5. if($login) {
  6.  echo("Witaj $login !<br>
  7.  <a href="wyloguj.php">wyloguj sie</a>");
  8. }
  9.  
  10. else
  11.  
  12. {
  13. <form action="loguj.php" method="POST">
  14. Login: <input type=text name="login" value=""><br>
  15. Haslo: <input type=password name="haslo" value=""><br>
  16. <input type=submit value="Zaloguj"><br>
  17. Jesli nie masz konta <a href="form_rej.php">zarejestruj sie</a>
  18. </form>");
  19. }
  20.  
  21. ?>



końcowa faza to modyfikacja wylogowania musisz zmienic nazwe form_wyloguj.php na wyloguj.php i wypełnić jego zawartość mniej więcej tak:

  1. <?
  2.  
  3. $_SESSION['userid'] = "";
  4.  
  5. echo("Zostales wylogowany!<br>
  6. <a href="tekst.tpl">Powrot</a>");
  7. ?>


Pamiętaj że każdy plik php odpalany bezpośrednio przez przeglądarke musi miec na początku:
  1. <?
  2. ?>

żeby działał mechanizm sesji. Każdy plik którego "inkludujesz" nie powinien mieć tego startu sesji. Na stronach w serwisie na początku weryfikujesz stan zmiennej sesyjnej $_SESSION['userid'] i jesli jest ustawiona zezwalasz na działania a jesli nie ustawiona blokujesz działania.


Aha i ostatnia rzecz w pliku loguj.php pozmieniaj:
  1. <?php
  2.  
  3. print ("Sprobuj ponownie <a href="form_log.php">Powrot</a>");
  4.  
  5. ?>

na
  1. <?php
  2.  
  3. print ("Sprobuj ponownie <a href="tekst.tpl">Powrot</a>");
  4.  
  5. ?>

gdzie tekst.tpl to główna strona.

Pozdrawiam.


poprawiam
---
nospor
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.