Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Logowanie
Forum PHP.pl > Forum > Przedszkole
markez07
Mam sobie TOP i chciałbym żeby w tym topie wyświetlało się $PROFIL, albo $LOGOWANIE. W profilu jest menu profilu, a w logowaniu formularz do zalogowania. Nie wiem jak to zaplanować, jak ustawić. Mam to zrobić, że jeżeli sesja zalogowany = true to wyświetla się profil, a else logowanie? Po kliknięciu action w formularzu dane mają być sprawdzane pod kątem poprawności (czyli czy pola nie są puste, czy poprawne znaki zostały wprowadzone), a następnie porównywane w bazie czy takie istnieją. Jak nie istnieją to sesja zalogowany = false, a jak istnieją to true... Jak zrobić żeby w topie widniał formularz logowania, a po zalogowaniu znikał i pojawiał się profil użytkownika? Może ktoś mi mniej więcej rozpisać co po kolei powinienem zrobić? Nie potrafię sobie tego zaplanować. Mam nadzieję, że z czasem nauczę się "myśleć" jak programista php.
Aqu
Właśnie tak jak piszesz. wink.gif

  1.  
  2. if($_POST['loguj'])
  3. {
  4. // sprawdzanie danych itd.
  5. if($dane === true) // dane się zgadzają
  6. {
  7. $_SESSION['zalogowany'] = true;
  8. $_SESSION['id'] = $user['id'];
  9. }
  10. }
  11.  
  12. $profil = 'menu profil';
  13. $logowanie = 'formularz do logowania';
  14.  
  15. if($_SESSION['zalogowany'] === true) $top = $profil;
  16. else $top = $logowanie;
  17.  
  18. echo $top;
  19.  
markez07
1. Jak wykonać sprawdzenie tych danych czy są poprawne? Jakoś za pomocą pętli? Przydałoby się jeszcze komunikat wyświetlić co jest nie tak.
2. Jakie najlepiej zastosować wyrażenia regularne do loginu i hasła? Chyba najlepiej żeby nie było można wpisać !@#$%^&*() itp?

3.



E:

  1. <?php
  2.  
  3. if(isset($_POST['loguj']))
  4. {
  5. echo $LOGOWANIE;
  6. // powyzej badz ponizej przed tym kodem moze byc umieszczony formularz ;)
  7. // najpierw sprawdzamy, czy wysyłane zmienne w formularzu nie są puste.
  8. if (!empty($_POST['login']) && !empty($_POST['haslo'])) {
  9.  
  10. $login = $_POST['login'];
  11. $haslo = $_POST['haslo'];
  12.  
  13.  
  14. $sprawdzanie = mysql_query("SELECT * FROM uzytkownicy WHERE nick = '$login' AND haslo = '$haslo'");
  15. $licz = mysql_num_rows($sprawdzanie);
  16. if ($licz > 0) {
  17. $_SESSION['zalogowany'] = true;
  18. $_SESSION['id'] = $user['id'];
  19. } else {
  20. $_SESSION['zalogowany'] = false;
  21. }
  22. }
  23. }
  24.  
  25.  
  26.  
  27. if($_SESSION['zalogowany'] === true) $top = $PROFIL;
  28. else $top = $LOGOWANIE;
  29.  
  30. echo $top;
  31.  
  32. ?>


Coś mam źle, bo cały czas wyświetla mi $PROFIL
Aqu
A co Ci takie znaki przeszkadzają w haśle? ;p
W loginie jak sobie chcesz, z tym, że sprawdzanie przy logowanie jest bez sensu, sprawdzasz tylko przy rejestracji.
  1. SELECT * FROM uzytkownicy WHERE nick = '$login'"
a hasło?
markez07
Trochę zmieniłem, ale coś mam źle, bo cały czas wyświetla mi $PROFIL
Aqu
Na samej górze masz: echo $LOGOWANIE; więc nic dziwnego
markez07
Posiedziałem, popróbowałem i coś mi wyszło, działa. Proszę sprawdzić czy jest to poprawnie napisane.

  1. <?php
  2. $blad_logowania = '<div class="blad_logowania">Wprowadziłeś błędne dane!</div>';
  3. $puste_pola = '<div class="blad_logowania">Wypełnij wszystkie pola!</div>';
  4.  
  5. if(!isset($_POST['action'])){
  6. echo $LOGOWANIE;
  7. }
  8. if(isset($_POST['action'])){
  9. if(!empty($_POST['login']) && !empty($_POST['haslo'])){
  10.  
  11. $login = $_POST['login'];
  12. $haslo = $_POST['haslo'];
  13.  
  14. $sprawdzanie = mysql_query("SELECT * FROM uzytkownicy WHERE nick = '$login' AND haslo = '$haslo'");
  15. $licz = mysql_num_rows($sprawdzanie);
  16. if($licz > 0){
  17. $_SESSION['zalogowany'] = true;
  18. }else{
  19. $_SESSION['zalogowany'] = false;
  20. }
  21.  
  22. if($_SESSION['zalogowany'] === true) $top = $PROFIL;
  23. else $top = $LOGOWANIE.$blad_logowania;
  24. echo $top;
  25. }else{
  26. echo $LOGOWANIE.$puste_pola;
  27. }
  28. }
  29. ?>


1. Czy to co napisałem powyżej jest poprawne?
2. Zapis ma być taki?

  1. require_once("config.php");


Czy mogę np. session_start(); umieścić w config.php i wczytywać tylko config?

3. Jak najlepiej wczytywać szablon i w jaki sposób zrobić menu? Mam podzielić stronę na top, body, footer? Top wczytać do index.php i on będzie stały, w nim niezmienny. Do Top będę jednocześnie wczytywał skrypt logowanie/profil. Jak zrobić zakładki? Będę miał też wczytane body i footer, body zrobić wymienne, połączyć z menu? Jeżeli jest jakieś lepsze rozwiązanie tego to proszę mi podpowiedzieć.
Aqu
1. Przyjęło się, że stałe zapisuje się wielkimi literami a zmienne małymi, czyli powinieneś zmienić to: $LOGOWANIE itp. Ale to tylko taka uwaga, dla php nie ma to żadnego znaczenia.
  1. $login = $_POST['login'];
  2. $haslo = $_POST['haslo'];
  3.  
  4. $sprawdzanie = mysql_query("SELECT * FROM uzytkownicy WHERE nick = '$login' AND haslo = '$haslo'");

Tworzysz niepotrzebne zmienne $login i $haslo, poza tym powinieneś przefiltrować to na wypadek sql injection.

2. Możesz, nawet powinieneś. wink.gif
3. Najprościej będzie to chyba zrobić w taki sposób, że na końcu dodasz plik z całym szablonem strony i zrobisz coś takiego:
  1. <html>
  2. <head>
  3. stałe
  4. <title>Strona.pl | <?PHP echo $podstrona_title; ?></title>
  5. </head>
  6.  
  7. <body>
  8. <div id="top">stale</div>
  9. <div id="menu"> <?PHP echo $menu; ?></div>
  10.  
  11. itd.
  12.  
  13. <div id="foot">stale</div>
  14. <body>
  15. </html>

i w zależności od podstrony, albo tego czy czy ktoś jest zalogowany określasz zmienne w tym szablonie.
Możesz też zainteresować się jakimiś system szablonów, najpopularniejszy to Smarty.
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.