Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Logowanie na sesjach i menu.
Forum PHP.pl > Forum > Przedszkole
sher
Zrobiłem logowanie na sesjach, pomagając sobie poradnikami z sieci i teraz mam taki problem. Chciałbym, żeby zalogowany widział w menu odnośniki "profil" i "wyloguj", a niezalogowany "rejestracja" i "logowanie". Nie mam pojęcia, co robię źle.

login.php
  1. <html>
  2. <?
  3. include 'header.php';
  4. include 'connect.php';
  5. ?>
  6.  
  7. <div id="container">
  8. <?
  9. // sprawdzamy czy user nie jest przypadkiem zalogowany
  10. if(!$_SESSION['logged']) {
  11. // jeśli zostanie naciśnięty przycisk "Zaloguj"
  12. if(isset($_POST['name'])) {
  13. // filtrujemy dane...
  14. $_POST['name'] = clear($_POST['name']);
  15. $_POST['password'] = clear($_POST['password']);
  16. // i kodujemy hasło
  17. $_POST['password'] = codepass($_POST['password']);
  18.  
  19. // sprawdzamy prostym zapytaniem sql czy podane dane są prawidłowe
  20. $result = mysql_query("SELECT `user_id` FROM `users` WHERE `user_name` = '{$_POST['name']}' AND `user_password` = '{$_POST['password']}' LIMIT 1");
  21. if(mysql_num_rows($result) > 0) {
  22. // jeśli tak to ustawiamy sesje "logged" na true oraz do sesji "user_id" wstawiamy id usera
  23. $row = mysql_fetch_assoc($result);
  24. $_SESSION['logged'] = true;
  25. $_SESSION['id'] = $row['user_id'];
  26. echo '<p>Zostałeś poprawnie zalogowany! Możesz teraz przejść na <a href="index.php">stronę główną</a>.</p>';
  27. } else {
  28. echo '<p>Podany login i/lub hasło jest nieprawidłowe.</p>';
  29. }
  30. }
  31.  
  32. // wyświetlamy komunikat na zalogowanie się
  33. echo '<div id="log">
  34. <form method="post" action="login.php">
  35. <p>
  36. Login:<br>
  37. <input type="text" name="name">
  38. </p>
  39. <p>
  40. Hasło:<br>
  41. <input type="password" name="password">
  42. </p>
  43. <p>
  44. <input type="submit" value="Zaloguj">
  45. </p>
  46. </form>
  47. </div>';
  48. } else {
  49. echo '<p>Jesteś już zalogowany, więc nie możesz się zalogować ponownie.</p>
  50. <p>[<a href="index.php">Powrót</a>]</p>';
  51. }
  52. ?>
  53. </div>
  54. </body>
  55. </html>


connect.php
  1. <?php
  2. mysql_connect ('hosti','user','pass');
  3. mysql_select_db ('baza');
  4.  
  5. function clear($text) {
  6. // jeśli serwer automatycznie dodaje slashe to je usuwamy
  7. $text = stripslashes($text);
  8. }
  9. $text = trim($text); // usuwamy białe znaki na początku i na końcu
  10. $text = mysql_real_escape_string($text); // filtrujemy tekst aby zabezpieczyć się przed sql injection
  11. $text = htmlspecialchars($text); // dezaktywujemy kod html
  12. return $text;
  13. }
  14.  
  15. function codepass($password) {
  16. // kodujemy hasło (losowe znaki można zmienić lub całkowicie usunąć
  17. return sha1(md5($password).'#!%Rgd64');
  18. }
  19.  
  20. // funkcja na sprawdzanie czy user jest zalogowany, jeśli nie to wyświetlamy komunikat
  21. function check_login() {
  22. if(!$_SESSION['logged']) {
  23. die('<p>To jest strefa tylko dla użytkowników.</p>
  24. <p>[<a href="login.php">Logowanie</a>] [<a href="register.php">Zarejestruj się</a>]</p>');
  25. }
  26. }
  27.  
  28. // funkcja na pobranie danych usera
  29. function get_user_data($user_id = -1) {
  30. // jeśli nie podamy id usera to podstawiamy id aktualnie zalogowanego
  31. if($user_id == -1) {
  32. $user_id = $_SESSION['user_id'];
  33. }
  34. $result = mysql_query("SELECT * FROM `users` WHERE `user_id` = '{$user_id}' LIMIT 1");
  35. if(mysql_num_rows($result) == 0) {
  36. return false;
  37. }
  38. return mysql_fetch_assoc($result);
  39. }
  40.  
  41.  
  42. // jeśli nie ma jeszcze sesji "logged" i "user_id" to wypełniamy je domyślnymi danymi
  43. if(!isset($_SESSION['logged'])) {
  44. $_SESSION['logged'] = false;
  45. $_SESSION['user_id'] = -1;
  46. }
  47.  
  48. ?>


index.php
  1. <html>
  2. <?
  3. include 'header.php';
  4. include 'connect.php';
  5. ?>
  6.  
  7. <div id="container">
  8.  
  9. <?
  10. check_login();
  11. ?>
  12. asda
  13. </div>
  14.  
  15.  
  16. </body>
  17.  
  18. </html>


i header.php
  1. <head>
  2. <meta charset="utf-8">
  3. <title>Heheszkii</title>
  4. <link rel="stylesheet" type="text/css" href="style.css" />
  5. </head>
  6. <body>
  7. <div id="header">
  8. <div id="logo">
  9.  
  10. </div>
  11.  
  12. <div id="menu">
  13. <a href="front.php">Front</a>
  14. <a href="fresh.php">Fresh</a>
  15. <a href="random.php">Random</a>
  16. <a href="submit.php">Submit</a>
  17. </div>
  18.  
  19. <div id="usermenu">
  20. <?
  21. if ($_SESSION['logged'] = true) {
  22. echo'<div id="logged"><a href="logout.php">Logout</a>
  23. <a href="profile.php">Profile</a></div>';
  24. }
  25.  
  26. else {
  27. echo '<div id="notlogged"><a href="login.php">Login</a>
  28. <a href="register.php">Register</a>';
  29. }
  30. ?>
  31. </div>
  32. </div>
Boshi
Pierwsza sprawa to olej ten poradnik, bo przewija się co chwilę przez forum i ta cała funkcja clear jest o kant .. rozbić.
Po drugie przerzuć się na coś nowocześniejszego aniżeli mysql_query, chociażby na obiektową wersję mysqli choć polecam PDO.


Brakuje ci na samej górze session_start(); A w których plikach? to już sam pomyśl.
sher
Podejrzewam, że w pliku header.php, ale jak dawałem tam session_start to był error, że sesja jest już rozpoczęta i polecenie zostanie zignorowane.
fate
if(zalogowany){echo wyloguj;}else{echo zaloguj;}
sher
Cytat(fate @ 22.12.2014, 20:32:01 ) *
if(zalogowany){echo wyloguj;}else{echo zaloguj;}

I tak jest w pliku header.php, mimo tego nie działa i cały czas wyświetla to, co ma widzieć zalogowany.
untorched
Znajdź różnicę..

Twój kod:
  1. if ($_SESSION['logged'] = true) {


Różnica:
  1. if ($_SESSION['logged'] == true) {
sher
Cytat(untorched @ 23.12.2014, 00:23:50 ) *
Znajdź różnicę..

Twój kod:
  1. if ($_SESSION['logged'] = true) {


Różnica:
  1. if ($_SESSION['logged'] == true) {

Nadal nie działa, tylko teraz zamiast napisu "logout profile" jest "login register" przez cały czas.
untorched
var_dump na $_SESSION. Prawdopodobnie pusta sesja przez błędne umiejscowienie lub brak session_start
sher
Ok, jakoś sobie poradziłem ;]
Dzięki za pomoc.
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.