Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sesja nie dziala tak jak chce
Forum PHP.pl > Forum > Przedszkole
viamarimar
Mam logowanie jak ponizej i chcialem zrobic menu wyloguj w zaleznosci od tego czy ktos zalogowany czy nie, ale w tej postaci wywala mi bład

  1. Notice: A session had already been started - ignoring session_start() in C:\VertrigoServ\www\szablon\logowanie.php on line 2


pozatym pokazuje sie zawsze nazwa wyloguj.php / co jest nie tak ktos ma jakis pomysl?

plik logowanie.php
  1. <?php
  2. include("config.php");
  3.  
  4. if(isset($_SESSION['zalogowany'])) {
  5. echo "Witam, ".$_SESSION['login'];
  6. }else{
  7.  
  8. if(isset($_POST['wyslij'])) {
  9.  
  10.  
  11. if(mysql_num_rows(mysql_query("SELECT login, haslo
  12. FROM users WHERE login = '".$_POST['login']."'
  13. && haslo = '".$_POST['haslo']."' ")) > 0) {
  14.  
  15.  
  16. if(mysql_num_rows(mysql_query("SELECT id FROM users
  17. WHERE login = '".$_POST['login']."'
  18. && haslo = '".$_POST['haslo']."' ")) > 0 ) {
  19.  
  20.  
  21. $_SESSION['zalogowany'] = true;
  22. $_SESSION['login'] = $_POST['login'];
  23. $_SESSION['haslo'] = $_POST['haslo'];
  24. echo $_SESSION['zalogowany'];
  25. echo "Jesteś zalogowany.";
  26.  
  27. header('Location: index.php');
  28.  
  29.  
  30. } else {
  31.  
  32. echo "Złe hasło, proszę spróbować ponownie";
  33. }
  34. } else {
  35. echo "Nie ma takiego użytkownika";
  36. }
  37. } else {
  38.  
  39. ?>
  40. <form method="post" action="logowanie.php">
  41. <label class="label_left" for="user">User name:</label>
  42. <input type="text" name="login" id="user" class="text" /><br />
  43. <label class="label_left" for="password">Password:</label>
  44. <input type="password" name="haslo" id="password" class="password" /><br />
  45. <input type="checkbox" checked="checked" name="remember" id="remember" /><label for="remember"> Remember me</label><br />
  46. <input type="submit" name="wyslij" id="submit" class="submit" value="Submit" />
  47. <p><a href="#">Forgot your password?</a></p>
  48. <p><a href="#">Create an account</a></p>
  49. </form>
  50.  
  51.  
  52.  
  53. <?php
  54. }
  55. }
  56. ?>






plik menu.php
  1. <div id="menu">
  2. <ul>
  3. <li><a class="active" href="index.php">Ogłoszenia</a></li>
  4.  
  5. <?php
  6. if(isset($_SESSION['zalogowany'])) {
  7. echo "<li><a href='rejestracja.php'>Rejestracja</a></li>";
  8. }
  9. else{
  10. echo "<li><a href='wyloguj.php'>Wyloguj</a></li>";
  11. }
  12.  
  13. ?>
  14.  
  15. <li><a href="pracownicy.php">Lista pracowników</a></li>
  16. <li><a href="#">Kalendarz</a></li>
  17. <li><a href="kontakt.php">Kontakt</a></li>
  18. </ul>
  19. </div>
freemp3
1. Funkcję session_start wywołuje się tylko raz.
2. Odwróć warunek.
viamarimar
  1. <?php
  2.  
  3. if(!isset($_SESSION['zalogowany'])) {
  4. echo "<li><a href='rejestracja.php'>Rejestracja</a></li>";
  5. }
  6. else{
  7. echo "<li><a href='wyloguj.php'>Wyloguj</a></li>";
  8. }
  9.  
  10. ?>


o cos takiego ci chodzi? to nie pomaga/ teraz caly czas pokazuje sie rejestracja
freemp3
Sprawdź co znajduje się w sesji po zalogowaniu oraz przed warunkiem, który przed chwilą poprawiałeś.
viamarimar
przed zalogowaniem:
  1. Notice: Undefined variable: _SESSION in C:\VertrigoServ\www\szablon\menu.php on line 9
  2. Call Stack
  3. # Time Memory Function Location
  4. 1 0.0012 330424 {main}( ) ..\index.php:0
  5. 2 0.0019 332376 include( 'C:\VertrigoServ\www\szablon\gora.php' ) ..\index.php:2
  6. 3 0.0044 335264 include( 'C:\VertrigoServ\www\szablon\menu.php' ) ..\gora.php:17

po zalogowaniu:
  1. Notice: Undefined variable: _SESSION in C:\VertrigoServ\www\szablon\menu.php on line 9
  2. Call Stack
  3. # Time Memory Function Location
  4. 1 0.0011 329912 {main}( ) ..\index.php:0
  5. 2 0.0017 331864 include( 'C:\VertrigoServ\www\szablon\gora.php' ) ..\index.php:2
  6. 3 0.0023 334752 include( 'C:\VertrigoServ\www\szablon\menu.php' ) ..\gora.php:17


nie zdefiniowana sesja? jak to mozliwe? czy sesja z pliku logowanie nie przechodzi do menu?
oba pliki sa includowne w index i to jest wyswietlane + gora, dol itd zeby posklejac caly szablon
freemp3
Możliwe, ponieważ odwołujesz się do sesji przed wywołaniem session_start. Jeśli wiesz, że będziesz korzystał z sesji globalnie to dodaj wywołanie tej funkcji do jakiegoś pliku, który jest dodawany za każdym razem.
viamarimar
no ok ale czy inicjowanie sesji tez ma byc globalnie w kazdym dlaczane chyba nie?

  1. $_SESSION['zalogowany'] = true;
  2. $_SESSION['login'] = $_POST['login'];
  3. $_SESSION['haslo'] = $_POST['haslo'];


dodam sesion_start do configa i powiem czy to zadziala

//zrobilem jak wyzej i dziala z tym ze jest jeszcze blad czy tam notice:

  1. Notice: A session had already been started - ignoring session_start() in C:\VertrigoServ\www\szablon\config.php on line 2


i jak sie tego pozbyc?

nie wylaczajac bledow notice i nie uzywajac @?
freemp3
Usunąć session_start z pliku logowanie.php. Pisałem przecież, że tą funkcję wywołuje się tylko raz.
viamarimar
w pliku logowanie wywalilem session_start, cztam co piszesz i jest do duza lekcja dla mnie, jestem ci wdzieczny ale problem pozostaje

/wydaje mi sie ze problem jest w tym ze jesli do configa (czyli ustawien polaczenia) wrzucilem sesion_start to jesli ten plik jest kilka razy includowany stad jest problem tylko teraz nie wiem jak go rozwiazac

Dodaje do indexu to nie smiga
  1. <?php
  2. include("gora.php");
  3. include("bok.php");
  4. include("tresc.php");
  5. include("dol.php");
  6. ?>


Nie moge ogarnac jak jednoczesnie moze byc w kazdym pliku a jednoczesnie a ma sie nei dublowac zeby nie bylo bledu

Probowalem nawet osobny plik zrobic i incudowac ale jest ten sam blad ..
freemp3
Po co go ładujesz kilka razy? Załaduj raz i zapisz ustawienia w jakimś obiekcie, który będzie dostępny z każdego miejsca, w którym będziesz tego potrzebował.
viamarimar
Jak po co? no logowanie potrzbuje swojego polaczenia
rejestracja swojego , ogolszenia swojego itd...?

jakim obiekcie? nie rozumiem? znam tylko troche strukturalne php obiektowe to nie moja bajka wiec moglbys bardziej poweidziec o co chodzi, pozatym sie ucze dopiero

nie znam sposobu zeby sesion_start byla dostepna z kazdego miejsca ;/
freemp3
No to jeszcze długa droga przed Tobą.

Owszem, każde z elementów, które wymieniłeś wymaga dostępy do bazy, ale nie ma konieczności ładowania konfiguracji i tworzenia połączenia na nowo za każdym razem. Ładujesz plik konfiguracyjny do główngo pliku (np. index.php), łaczysz się z bazą i następnie ładujesz pozostałe wymagane pliki, czyli góra.php, tresc.php itd.
W tych plikach nie ładujesz już konfiguracji ponieważ jest ona już dodana w pliku index.php i będzie widoczna w każdym kolejno dołaczonym pliku. Nie łączysz się także ponownie z bazą ponieważ połączenie już jest dostępne.

Poucz się jeszcze o dołączaniu plików, o zakresie widoczności zmiennych oraz o połączeniach z bazą danych.
viamarimar
poki co takim czyms rozwiazalem problem, a tobie bardzo dziekuje za pomoc smile.gif
za kazdym razem sprawdzam czy zmienna istnieje i ew ja wywoluje troche glupie ale dziala i bledu nie ma
  1. <?php
  2. if(!isset($_SESSION))
  3. {
  4. }
  5. ?>
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.