Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] $_POST raz dziala, a raz nie
Forum PHP.pl > Forum > Przedszkole
v1t4n
Mam skrypt który sluży do logowania, jak koles kliknie submita przechodzi do index.php?action=login gdzie sprawdza czy zmienna $_SESSION['zalogowany'] istnieje. Jezeli nie istnieje (koles nie jest zalogowany) to sprawdza czy nazwa usera i jego haslo jest poprawne, jesli tak to zmiennej sesyjnej $_SESSION['zalogowany'] nadaje wartosc 1. Pozniej zmiennej $_SESSION['login'] przypisuje nazwe uzytkownika ktory sie zalogowal (jego nazwe bierze ze zmiennej ktora, ot co, przyleciala ze strony z formularzem - $login). Jest jeszcze export zmiennej $_POST['login'] z nazwa usera. Wywala mi echo ze wlasnie sie zalogowalem jako $_SESSION['login'].
Jezeli natomiast koles jest juz zalogowany to ladnie pisze ze jestem zalogowany jako $_SESSION['login'] i przypisuje do $_POST['login'] $_SESSION['login'] bo $login juz nie dziala na tej czesci skryptu.
Caly panel logowania za pomoca funkcji include osadzilem w pliku index.php.
Glowna czesc strony jest w pliku body.php ktory rowniez 'zincludowalem' do index.php. W pliku body.php potrzebny mi jest login zalogowanego usera, ktory otrzymuje jako $GLOBALS['login'].
Problem polega na tym, wysylanie danych przez $_POST nastepuje tylko gdy jestem na stronie index.php?action=login. Gdy znajduje sie na stronie gdzie action to cos innego niz login wtedy wysylanie nie nastepuje.
Zawartosc login.php
  1. <?php
  2. if ($_SESSION['zalogowany']==1) //Menu zalogowanego
  3.  {
  4.  $_POST['login']=$_SESSION['login'];
  5.  echo('Witaj!<BR>Jesteś zalogowany jako '. $_SESSION['login']);
  6.  echo('<P><a href="index.php?action=changeaccountsettings">Zmien ustawienia konta</a>');
  7.  echo('<P><a href="index.php?action=logout">Wyloguj</a>');
  8.  $_POST['login']=$_SESSION['login'];
  9.  }
  10. if ($action==login) //logowanie
  11.  {
  12.  if (!isset($_SESSION['zalogowany']))
  13. {
  14. $sql = mysql_connect('localhost', 'root', '');
  15. mysql_select_db("klasa1at");
  16.  
  17. $pytanie = 'SELECT * FROM `users` WHERE `username` = ''. $login .'' LIMIT 0, 30 ';
  18. $idzapytania = mysql_query($pytanie);
  19. while ($wiersz = mysql_fetch_row($idzapytania))
  20. {
  21. $username = $wiersz[0];
  22. $userpassword = $wiersz[1];
  23. }
  24. mysql_close($sql);
  25. if ($username==$login&&$login!="")
  26.  {
  27.  if ($userpassword==$haslo)
  28. {
  29. $_SESSION['zalogowany']=1;
  30. $_SESSION['login']=$login;
  31. $_POST['login']=$login;
  32.  
  33. echo('Witaj! Własnie się zalogowałeś. Jesteś zalogowany jako '. $_SESSION['login']);
  34. echo('<P><a href="index.php?action=changeaccountsettings">Zmien ustawienia konta</a>');
  35. echo('<P><a href="index.php?action=logout">Wyloguj</a>');
  36. }
  37.  else
  38. {
  39. echo('Nieprawidłowe hasło.<BR><a href="index.php">Zaloguj ponownie</a>');
  40. }
  41.  }
  42. else
  43.  {
  44.  echo('Nieprawidłowy login.<BR><a href="index.php">Zaloguj ponownie</a>');
  45.  }
  46. }
  47.  }
  48. ?>

I drugie pytanie: czemu jezeli znajduje sie na index.php?action=login po odswiezeniu strony nadal wykonuje wysyla mi przez $_POST nazwe usera? Przeciez kolejny warunek wyklucza kontynuowanie dalej skryptu bo skror $_SESSION['zalogowany']=1 to ona istnieje...
sticker
no coś musisz jeszcze doczytać o php i zmiennych:)

1. Tak się nie robi!
  1. <?php
  2. $_POST['login']=$_SESSION['login'];
  3.  echo('Witaj!<BR>Jesteś zalogowany jako '. $_SESSION['login']);
  4.  echo('<P><a href="index.php?action=changeaccountsettings">Zmien ustawienia konta</a>');
  5.  echo('<P><a href="index.php?action=logout">Wyloguj</a>');
  6.  $_POST['login']=$_SESSION['login'];
  7. .....
  8. $_POST['login']=$login;
  9. ?>


Tablica $_POST jest przesyłana w momencie wywołania formularza tylko chyba że każdy twój link na stronie jest takim submitem ohmy.gif Poczytaj tutaj $_POST" title="Zobacz w manualu php" target="_manual

2. Wejdż do php.ini i daj sobie register global na off

3. Zapytanie nie odporne na SQL injection
[sql]SELECT * FROM `users` WHERE `username` = ''. $login .'' LIMIT 0, 30 ';[sql]
poza tym nie przesyła się hasła z bazy do skryptu tylko hasło sprawdza się w bezpośrednio w bazie.

4.
  1. <?php
  2. $_SESSION['login']=$login;
  3.  $_POST['login']=$login;
  4. ?>
z
zamień na
  1. <?php
  2. $_SESSION['login']=$_POST['login']
  3. ?>


Kodzik bardzo słabiutki dużo musisz poczytać ale pracuj a w końcu sie uda.
Powodzenia!!!
v1t4n
co racja to slabiutki jestem smile.gif

1. odnosnie zastosowania funkcji $_POST - jak inaczej przesylac zmienne? przez sesje mi to nie poszlo...

2. co do zamiany tego co napisales w pkt 4 musze przypisac najpierw $_SESSION['login'] wartosc $login po poki co $_SESSION['login'] jest puste wiec tego nie tykam tongue.gif

-----------------------------------

Poradzilem sobie sesjami smile.gif mianowicie w body.php dodalem session_start(); i zamiast $GLOBAL dalem $_SESSION.
Mozna zamknac smile.gif)
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.