Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Logowanie + rejestracja w jednym pliku index.php
Forum PHP.pl > Forum > Przedszkole
Manderigon
Witam.
Skrypt logowania i rejestracji składający się z kilku plików połączyłem w jeden - index.php. Problem występuje w logowaniu, nie wiem dlaczego, ale po poprawnym zalogowaniu, jak odświeżę stronę, zostaje wylogowany. Według mnie problem tkwi w sesjach, ponieważ dostaje również błędy o wielokrotnie wysłanym nagłówku. Próbowałem już na kilka sposobów, niestety bez skutku. Proszę o pomoc, kod:

  1. <?php
  2.  
  3. // połączenie z mysql
  4. mysql_connect('localhost', 'login', 'password');
  5.  
  6. // wybór bazy danych
  7.  
  8.  
  9. if($_SESSION['logged']){
  10. echo 'zalogowany';
  11. } else {
  12. // tworzymy prosty formularz
  13. echo '<form action="index.php" method="POST"><input type="text" name="nick" placeholder="nick" style="width: 100px; margin: 0px 5px;">';
  14. echo '<input type="password" name="pass" placeholder="Hasło" style="width: 100px; margin: 0;">';
  15. echo '<input type="submit" class="btn btn-primary" style="margin-top:0;margin: 0 3px;" name="ok2" value="Zaloguj się"></form>';
  16. // jeśli zostanie naciśnięty przycisk "Zaloguj"
  17. if(isset($_POST['ok2']))
  18. {
  19. $nick = trim($_POST['nick']);
  20. $pass = trim($_POST['pass']);
  21.  
  22. // sprawdzamy czy wszystkie dane zostały podane
  23. if(empty($nick) || empty($pass)) echo "<footer class='footer' style='margin: 10px 0px 10px 0; padding: 12px 10px;'><div class='container'>Wpisz wszystkie pola!</div></footer>";
  24.  
  25. // jeśli tak...
  26. else
  27. {
  28. // filtrujemy dane
  29.  
  30. // kodujemy hasło
  31. $pass = md5($pass);
  32.  
  33. // sprawdzamy czy istnieje użytkownik z takim loginem i hasłem
  34. $result = mysql_query("SELECT * FROM COS1 WHERE nicks='$nick' AND password='$pass'");
  35.  
  36. // jeśli nie istnieje
  37. if(mysql_num_rows($result)==0) echo "<footer class='footer' style='margin: 10px 0px 10px 0; padding: 12px 10px;'><div class='container'>Niestety podałeś niepoprawne dane!</div></footer>";
  38.  
  39. // jeśli tak...
  40. else
  41. {
  42. // dodajemy wynik zapytania do tablicy
  43. $row = mysql_fetch_array($result);
  44.  
  45. // ustawianie sesji że użytkownik jest zalogowany
  46. $_SESSION['logged'] = true;
  47.  
  48. // dodawanie do sesji id użytkownika, login oraz datę rejestracji
  49. $_SESSION['id'] = $row['id'];
  50. $_SESSION['nick'] = $row['nicks'];
  51. $_SESSION['data_rejestracji'] = $row['rejestracja'];
  52.  
  53. // wyświetlenie komunikatu oznaczającego poprawne logowanie
  54. $session_nick = $_SESSION['nick'];
  55. $liczba2 = mysql_query("SELECT `123` FROM `COS1` WHERE `nicks` = '$session_nick'");
  56. $liczba = mysql_fetch_row($liczba2);
  57. $_SESSION['COS1'] = $liczba[0];
  58.  
  59. echo "<footer class='footer' style='margin: 10px 0px 10px 0; padding: 12px 10px;'><div class='container'>Zalogowany jako: ".$session_nick." | Liczba: ".$liczba[0]."</div></footer>";
  60. }
  61. }
  62. }
  63. }
  64.  
  65. if($_SESSION['logged']){
  66. if(isset($_POST['logout']))
  67. {
  68.  
  69. // to go wylogowujemy i usuwamy jego dane z sesji
  70. $_SESSION['logged'] = false;
  71. $_SESSION['nick'] = '';
  72. $_SESSION['id'] = '';
  73. echo "<meta http-equiv='refresh' content='0'>";
  74. }
  75. }
  76.  
  77.  
  78. if($_SESSION['logged'])
  79. {
  80. echo '<form method="POST" action="index.php"><input type="submit" value="WYLOGUJ" name="logout"/></form>';
  81.  
  82.  
  83.  
  84.  
  85. } else {
  86. // nagłówek
  87. echo '<h2>Rejestracja</h2>';
  88.  
  89. // tworzymy prosty formularz
  90. echo '<form action="index.php" method="POST">
  91. Nick: <br />
  92. <input type="text" name="nick"><br />
  93. Haslo: <br />
  94. <input type="password" name="pass"><br />';
  95. echo '<input type="submit" name="ok" value="Dalej">
  96. </form>';
  97.  
  98. // jeśli zostanie naciśnięty przycisk "Rejestruj"
  99. if(isset($_POST['ok']))
  100. {
  101. $nick = trim($_POST['nick']);
  102. $pass = trim($_POST['pass']);
  103.  
  104. // sprawdzamy czy wszystkie dane zostały podane
  105. if(empty($nick) || empty($pass)) echo 'Wpisz wszystkie pola!';
  106. // jeśli tak...
  107. else
  108. {
  109. $result = mysql_query("SELECT * FROM COS1 WHERE nicks='$nick'");
  110. if(mysql_num_rows($result)!=0) echo 'Już istnieje konto z takim loginem! ';
  111. }
  112. }
  113. }
  114.  
  115. // rozłączenie z bazą danych
  116. ?>


Pozdrawiam.
nospor
session_start ma byc zawsze na poczatku skryptu a nie warunkowo gdzies w srodku
Manderigon
Umieściłem na samiutkim początku skryptu i nadal to samo.
nospor
A jaki dokladnie dostajesz blad?
Manderigon
Nie dostaję żadnego błędu, sesja tak jakby się nagle kończy. Normalnie dostaje informacje, że jestem zalogowany, a jak przejdę na jakąkolwiek inną podstronę czy odświeżę aktualną - powracam do punktu logowania.
nospor
Cytat
onieważ dostaje również błędy o wielokrotnie wysłanym nagłówku
Jeden z nas ma skleroze albo majaczy...
Manderigon
No tak, dostaję błąd takiej treści:
Kod
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by...
.

Umieściłem przed session_start(); ob_start(); oraz na końcu ob_end_flush(); i nadal to samo.
nospor
Wyrazaj sie precyzyjnie.... mowiac "nadal to samo" masz na mysli ze nadal jest bladd z headers?
Manderigon
Tak
nospor
Problem poruszany petryliard razy..... nic nie moze pojsc przed session start, ani spacja ani nic. MOze masz BOM na poczatku?
Turson
ob_start() na poczatku i ob_end_flush() na koncu
naucz sie szukac
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.