Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przekazywanie wartosci sessji
Forum PHP.pl > Forum > PHP
Eldiane
Witam, chciałem poćwiczyć troszkę PHP
Chce zrobić wszystko dokładnie i stwierdziłem że zasięgnę porady fachowców smile.gif

Oto moje dwie strony

StronaStartowa.php

  1. <?php
  2. /*if($_SESSION['logged'] == 1)
  3. {
  4. header('Location: Logowanie.php');
  5. }*/
  6. ?>
  7. <html>
  8. <head>
  9. <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  10. </head>
  11. <body>
  12. <table height=20%> <!-- Tabela Logo -->
  13. <tr>
  14. <td>
  15. <center><b></b></center>
  16. </td>
  17. </tr>
  18. </table>
  19.  
  20. <table height=30%> <!-- Tabela Rejestracja -->
  21. <tr>
  22. <td>
  23. <font size="4" id="Formularz_rej">Formularz rejestracyjny</font>
  24. <form action="rejestracja1.php" method=post>
  25. <font size="3" id="imie">Imie </font><input type="text" name="name" maxlength="20" id="input_imie"/><br>
  26.  
  27. <font size="3" id="haslo">Haslo </font><input type="password" name="password" maxlength="20" id="input_haslo"/><br>
  28.  
  29. <font size="3" id="email">Adres E-mail </font><input type="tekst" name="email" maxlength="50" id="input_email"/><br>
  30.  
  31. <font size="3" id="akceptacja_font">Akceptuje <a href="regulamin.html">Regulamin</a></font><input type="checkbox" name="akceptacja" value="Akceptuje" id="akceptacja"/>
  32.  
  33.  
  34. <input id="przycisk_ok" type="submit" value="OK"/>
  35. </form>
  36. </td>
  37. </tr>
  38. </table>
  39.  
  40. <table height=20%> <!-- Tabela logowanie -->
  41. <tr>
  42. <td>
  43. <font color="black" size="4" id="logowanie">Wprowadź dane osobowe kapitana aby mieć pełen dostęp do danych!</font>
  44.  
  45. <form action="Logowanie.php" method="post">
  46. <font color="black"><b id="login">Login </b><input type="text" name="login" id="input_login"><br></font>
  47.  
  48. <font color="black"><b id="haslo2">Hasło </b><input type="password" name="password" id="input_haslo2"></font>
  49.  
  50. <input type="submit" value="Loguj!" id="przycisk_loguj"/>
  51. </form>
  52. </td>
  53. </tr>
  54. </table>
  55.  
  56. <table height=25%> <!-- Tabela Kontakt/Forum -->
  57. <tr>
  58. <td width = 50%;><center>
  59. <font size="4">Pytaj o co chcesz kapitanów<br>innych statków na naszym<br> <a href="">forum</a></font></center>
  60. </td>
  61. <td><center>
  62. <font size="4">Nawet imperatorzy maja swoich zwierzchnikow.<br>Masz do nich pytania?<br>Napisz <a href="">GalaxyStar.Pytania@gmail.com</a></font></center>
  63. </td>
  64. </tr>
  65. </table>
  66.  
  67. <table height=5%> <!-- Tabela Stopka -->
  68. <tr>
  69. <td>
  70. <center><font size="2">all rights reserwed &#169 2011| team half brothers group | Eldiane and Galeane</font></center>
  71. </td>
  72. </tr>
  73. </table>
  74. </body>
  75. </html>


Oraz plik Logowanie.php

  1. <?php
  2. include("start.php");
  3.  
  4. $nickname = $_POST['login'];
  5. $password = $_POST['password'];
  6.  
  7. //Wysylanie i sprawdzanie loginu
  8. $zapytanie_login = "SELECT player_name FROM players WHERE player_name = '".$nickname."'";
  9. $wynik_login = mysql_query($zapytanie_login) or die("Wystapil blad podczas wysylania zapytania do bazy, skontaktuj sie z administracja i powiadom ich o bledzie");
  10.  
  11. //Wysylanie i sprawdzanie hasla
  12. $zapytanie_password = "SELECT player_password FROM players WHERE player_password = '".$password."' AND player_name = '".$nickname."'";
  13. $wynik_password = mysql_query($zapytanie_password) or die("Wystapil blad podczas wysylania zapytania do bazy, skontaktuj sie z administracja i powiadom ich o bledzie");
  14.  
  15. //Sprawdzanie ilosci rekordow
  16. $ilosc_rek_login = mysql_num_rows($wynik_login);
  17. $ilosc_rek_password = mysql_num_rows($wynik_password);
  18.  
  19.  
  20. if($_SESSION["logged"] == 1) //Sprawdzanie czy gracz jest zalogowany
  21. {
  22.  
  23. if(($ilosc_rek_login == 1) or $_SESSION["logged"] == 1) //Sprawdzanie loginu
  24. {
  25. if(($ilosc_rek_password == 1) or $_SESSION["logged"] == 1) //Sprawdzanie hasla
  26. {
  27. $_SESSION["logged"] = 1; //Przypisanie 1 gdy jestes zalogowany
  28. $_SESSION["nickname"] = $nickname; //Przypisanie zmiennej sessyjne wartosci $nickname
  29.  
  30. echo "Zostales poprawnie zalogowany ".$_SESSION["nickname"];
  31.  
  32.  
  33. }
  34. else
  35. {
  36. echo "Niewlasciwe haslo!";
  37. }
  38. }
  39. else
  40. {
  41. echo "Niewlasciwy login!";
  42. }
  43. }
  44. //Sprawdzanie czy zostal wypelniony formularz i gracz jest zalogowany
  45. elseif(($nickname == '') or ($password == '') and $_SESSION["logged"] != 1)
  46. {
  47. echo "Wypelnij pola formularza!";
  48. exit();
  49. }
  50.  
  51. ?>


Najbardziej interesująca część kodu StronyStartowej to <!-- Tabela Logowanie --> Jestem zalogowany z poprawnymi danymi, i wszystko wydaje się być w porządku, jednak jeśli jestem zalogowany i kliknę w link w przeglądarce (Firefox) to napis "Zostałeś zalogowany jako ZMIENNA SESYNA" zmienia się na "zostałeś zalogowany jako "

I oto pytanie, prosiłbym o podpowiedź w jaki sposób zrobić by pokazywało który użytkownik jest zalgowany nawet po kliknięciu w link, wiem ze problem do tyczy zmiennych przekazywanych przez formularz z tabeli logowanie, no bo wiadomo że po kliknięciu w link dane z formularza zostaną zlikwidowane

Nie chce także by w przeglądarce po naciśnięciu linku przeszło do linijki "wypełnij formularz"

Mam nadzieje że znajdziecie dla mnie jakąś wskazówkę.

Z góry dziękuje Eldiane
Noidea
Zrób to w ten sposób:
Kod
Jeśli jesteś zalogowany
{
    Wyświetl "Zostales poprawnie zalogowany " . $_SESSION["nickname"];
}
W przeciwnym wypadku (nie zalogowany)
{
    Jeśli wysłano formularz
    {
        Walidacja danych, zapytanie do bazy, sprawdzenie czy user istnieje

        $_SESSION["logged"] = 1; //Przypisanie 1 gdy jestes zalogowany
        $_SESSION["nickname"] = $nickname;

        header( "Location: logowanie.php" ); // Przekierowanie na tą samą stronę
        exit;
    }
    W przeciwnym wypadku (formularz nie wysłany)
    {
        Wyświetl formularz
    }
}


Myk z header uprości kod i naprawi problem z "ponownym wysłaniem formularza przy odświeżeniu", którego jeszcze nie zauważyłeś.


Dodatkowo wywal pierwsze zapytanie. Drugie wystarczy, bo sprawdza i login i hasło


Po trzecie poczytaj o zabezpieczaniu zapytań. Na tym etapie nauki wystarczy wyrobienie sobie nawyku używania mysql_real_escape_string, ale polecam zapoznanie sie później z PDO.
Eldiane
Ok, dziękuje za podpowiedź tylko jeżeli dam Header w środku kodu pojawia mi się błąd

  1. Warning: Cannot modify header information - headers already sent by (output started at c:\usr\krasnal\www\galaxystar\logowanie.php:29) in c:\usr\krasnal\www\galaxystar\logowanie.php on line 31


Czy mogłabyś mi doradzić coś i w tym temacie? smile.gif

W sumie heder() dziś odkryłem i jeszcze go aż tak dobrze nie poznałem, musisz wybaczyć mi moją opieszałość

PS: cudzysłowy oraz {} przy konstrukcji IF zostały sprawdzone i wszystko jest w porządku
Noidea
Nagłówki (headers) muszą zostać wysłane do przeglądarki PRZED jakimkolwiek tekstem. Ty wysyłasz coś dwie linijki przed header().

Najprościej będzie wywoływać funkcję ob_start() na samym początku każdej strony. Przykład:
  1. <?php
  2.  
  3.  
  4. ?>
  5. <html>
  6. <head>
  7. blablabla
  8. </head>
  9. <body>
  10. <?php
  11.  
  12. //Logika strony
  13.  
  14. header( "Location: gdzies.php" );
  15.  
  16. ?>
  17.  
  18. </body>
  19. </html>
Eldiane
Dziękuje za pomoc smile.gif

Lecz jednak to nie koniec kłopotów, po zmianach dałbym sobie rękę uciąć że wszystko powinno być OK, jednak jak widać straciłbym rękę ;D

  1. <?php
  2. include("start.php");
  3.  
  4. if ($_SESSION == 1)
  5. {
  6. echo "Jestes zalogowany";
  7. }
  8. else
  9. {
  10. if(($_POST['login'] != '') and ($_POST['password'] != ''))
  11. {
  12. $nickname = $_POST['login'];
  13. $password = $_POST['password'];
  14.  
  15. //Wysylanie i sprawdzanie loginu
  16. $zapytanie_login = "SELECT player_name FROM players WHERE player_name = '".$nickname."'";
  17. $wynik_login = mysql_query($zapytanie_login) or die("Wystapil blad podczas wysylania zapytania do bazy, skontaktuj sie z administracja i powiadom ich o bledzie");
  18.  
  19. //Wysylanie i sprawdzanie hasla
  20. $zapytanie_password = "SELECT player_password FROM players WHERE player_password = '".$password."' AND player_name = '".$nickname."'";
  21. $wynik_password = mysql_query($zapytanie_password) or die("Wystapil blad podczas wysylania zapytania do bazy, skontaktuj sie z administracja i powiadom ich o bledzie");
  22.  
  23. //Sprawdzanie ilosci rekordow
  24. $ilosc_rek_login = mysql_num_rows($wynik_login);
  25. $ilosc_rek_password = mysql_num_rows($wynik_password);
  26.  
  27. if(($ilosc_rek_login == 1) and ($ilosc_rek_password == 1))
  28. {
  29.  
  30. $_SESSION["logged"] = 1;
  31. $_SESSION["nickname"] = $nickname;
  32.  
  33. echo "Zostales poprawnie zalogowany jako: ".$_SESSION["nickname"];
  34. echo "<a href=\"wylogowanie.php\">Wyloguj</a>";
  35.  
  36. header("Location: logowanie.php");
  37. exit();
  38. }
  39. else
  40. {
  41. echo "Bledne haslo lub login, prosimy zalogowac sie ponownie";
  42. }
  43. }
  44. else
  45. {
  46. echo "Wypelnij formularz!";
  47. }
  48. }
  49.  
  50. ?>


I teraz ciągle pojawia się wypełnij formularz, nawet po poprawnym wprowadzeniu danych użytkownika, wszytko przez funkcję header(), można na to coś poradzić?
Noidea
1) Popatrz w kodzie który wkleiłeś na linijkę 32, a następnie na 6.

2) Jak już zacznie działać, to sprawdź, czy kiedykolwiek zdążysz przeczytać ten napis:
echo "Zostales poprawnie zalogowany jako: ".$_SESSION["nickname"];

Jeśli chcesz wyświetlić taką informację, to może ci się przydać nagłówek Refresh (przekierowanie z opóźnieniem) zamiast Location:
  1. echo "Witaj " . $_SESSION["nickname"] . "! Zostaniesz przekierowany za 5 sekund...<br><br>";
  2. echo "Jeśli nie chcesz czekać kliknij <a href=\"logowanie.php\">tutaj</a>.";
  3.  
  4. header( "Refresh: 5; URL=logowanie.php" );
Eldiane
Dziękuje za wytknięcie wszystkich błędów, skrypt poprawiony i działa jak należy smile.gif

Jeszcze raz z góry dziękuje.
Eldiane
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.