Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Czemu pomiedzy przejsciamy w zakladkach(menu) zostaje wylogowany?
Forum PHP.pl > Forum > Przedszkole
gigzorr
Witam.
Loguje sie->jestem zalogowany->klikne np. zaklade w menu programy , bum nie mam zadnych opcji, jestem wylogowany.
Dodam ze w kazdym pliku mam session_start(); .
Co wiecej , zeby stracic sesje , wystarczy refresh(lub enter w urlu czyli to samo...).
Probowalem tez cos takiego w kazdym pliku dac:
  1. <?php session_start();
  2. if(isset($_POST['zalogowany_user_login'])){
  3. echo 'Witaj '.$_SESSION['zalogowany_user_login'].' zostałeś/aś pomyślnie zalogowany/a.<br/>';
  4. echo '<br/>';
  5. echo '<a href="index.php?id=dodajnewsa">Dodaj Newsa</a>';
  6. echo '<br/>';
  7. echo '<a href="index.php?id=usun">Usun Newsa</a>';
  8. echo '<br/>';
  9. echo '<a href="index.php?id=zmianapw">Zmien Haslo</a>';
  10. echo '<br/>';
  11. echo '<a href="index.php?id=wylogowano">Wyloguj?</a>';
  12. }else{
  13. //a tutaj jeśli nie jesteś zalogowany
  14. }
  15. ?>

Ale na marne mi to wyszlo.
A tutaj skrypt logowania:
  1. ?php
  2.  
  3. // laczenie z baza danych i wybor bazy danych
  4. $db = mysql_connect("localhost","root","vertrigo") or die ("polaczenie nie moze byc zrealizowane");
  5. $wyborbazy = mysql_select_db("strona") or die ("nie ma takiej bazy danych");
  6.  
  7. if(isset($_POST['username']))
  8. {
  9. $username = $_POST['username'];
  10. }
  11.  
  12. if (isset($_POST['password']))
  13. {
  14. $password = md5($_POST['password']);
  15. }
  16. else
  17. {
  18.  
  19. echo '<form action="" method="post">
  20. <div class="lewo2">Username:</div><div class="prawo2"><input type="text" name="username"></div>
  21. <div class="lewo3">Password:</div><div class="prawo3"><input type="password" name="password"></div>
  22. <div id="dol"><input type="submit" value="Zaloguj"></div>
  23. </form>';
  24. }
  25.  
  26.  
  27.  
  28. $query = "SELECT id FROM `rejestracja` WHERE `uzytkownik` = '".$username."' AND `haslo` = '".$password."'";
  29. $result = mysql_query($query) or die(mysql_error());
  30. $result = mysql_fetch_array($result);
  31. if(empty($result))
  32. {
  33. echo 'Logowanie nieudane. Sprawdź pisownię nicku oraz hasła.';
  34.  
  35. }
  36. else
  37. {
  38. $_SESSION['zalogowany_user_login'] = $username;
  39. $_SESSION['twojehaslo_to'] = $password;
  40. $_SESSION['enejczUserId'] = $result[0]['id'];
  41.  
  42.  
  43. // tresc dla zalogowanego uzytkownika
  44. echo 'Witaj '.$_SESSION['zalogowany_user_login'].' zostałeś/aś pomyślnie zalogowany/a.<br/>';
  45. echo '<br/>';
  46. echo '<a href="index.php?id=dodajnewsa">Dodaj Newsa</a>';
  47. echo '<br/>';
  48. echo '<a href="index.php?id=usun">Usun Newsa</a>';
  49. echo '<br/>';
  50. echo '<a href="index.php?id=zmianapw">Zmien Haslo</a>';
  51. echo '<br/>';
  52. echo '<a href="index.php?id=wylogowano">Wyloguj?</a>';
  53.  
  54. }
  55.  
  56. ?>

Użeram sie z tym problemem juz prawie tydzien , zalozylem temat na innym forum , ale nie wiedza co moze byc przyczyna , dodam ze uzywam vertrigo najnowszego.
nospor
Włącz wyswietlanie wszystkich bledow na samym poczatku skryptu głównego
  1. ini_set('display_errors','1');


ps: nie widzę session_start() w skrypcie logowania
gigzorr
Cytat(nospor @ 23.04.2010, 11:24:41 ) *
Włącz wyswietlanie wszystkich bledow na samym poczatku skryptu głównego
  1. ini_set('display_errors','1');


ps: nie widzę session_start() w skrypcie logowania


Nic , pustka 0 błedu.

/edit

session_start(); jest tylko zle mi sie skopiowalo.
nospor
if(isset($_POST['zalogowany_user_login'])){

smile.gif Mam wowic dalej czy juz sam czaisz? smile.gif
gigzorr
Cytat(nospor @ 23.04.2010, 11:27:38 ) *
if(isset($_POST['zalogowany_user_login'])){

smile.gif Mam wowic dalej czy juz sam czaisz? smile.gif



hmm , mozesz dalej mowic smile.gif
Maciek1705
ja na każdej stronie mam oprócz session_start(); to jeszcze session_name("nazwa"); spróbuj dodać może dlatego cię wylogowuje
nospor
Cytat
hmm , mozesz dalej mowic
rozumiem ze to zart?
No a jesli nie to jednak powiem:
Gdzie dane w sesji są trzymane? W $_POST czy moze jednak w $_SESSION ?

if(isset($_POST['zalogowany_user_login'])){
echo 'Witaj '.$_SESSION['zalogowany_user_login'].' zostałeś/aś pomyślnie zalogowany/a.<br/>';
warunek sprawdzasz w $_POST (oczywiscie źle) ale juz potem dane probujesz dobrze pobrac z $_SESSION. No ale do poboru juz ci nie dochodzi bo warunek przeciez nie jest spelniony
gigzorr
Cytat(nospor @ 23.04.2010, 11:34:13 ) *
rozumiem ze to zart?
No a jesli nie to jednak powiem:
Gdzie dane w sesji są trzymane? W $_POST czy moze jednak w $_SESSION ?

if(isset($_POST['zalogowany_user_login'])){
echo 'Witaj '.$_SESSION['zalogowany_user_login'].' zostałeś/aś pomyślnie zalogowany/a.<br/>';
warunek sprawdzasz w $_POST (oczywiscie źle) ale juz potem dane probujesz dobrze pobrac z $_SESSION. No ale do poboru juz ci nie dochodzi bo warunek przeciez nie jest spelniony


czyli wystarczylo tylko $_POST na $_SESSION zamienic tak ?

tyle dni , a taki problem idiotyczny.
nospor
tak, przeciez to oczywiste... jak wlozysz skarpete to zielonej szafki to chyba oczywiste jest ze nie znajdziesz jej w czerownej szafce smile.gif

poza tym, jak ci pisalem bys dal wyswietlanie bledow w glownym skrypcie to mialem na mysli bys dal je tam, gdzie bedzie dostepne dla kazdego skryptu. Jesli nie masz takiego miejsca, to masz to dawac na poczatku kazdego skryptu, albo najlepiej ustawic w php.ini.

Jakbys tak zrobil to od razu bys dostal na ekranie blad: "undefined index..... blabla".
Zrob to wiec teraz, pamietaj by zawsze miec to włączone a oszczedzisz i sobie i nam czasu.
gigzorr
Cytat(nospor @ 23.04.2010, 11:40:46 ) *
tak, przeciez to oczywsite... jak wlozysz skarpete to zielonej szafki to chyba oczywiste jest ze nie znajdziesz jej w czerownej szafce smile.gif

poza tym, jak ci pisalem bys dal wyswietlanie bledow w glownym skrypcie to mialem na mysli bys dal je tam, gdzie bedzie dostepne dla kazdego skryptu. Jesli nie masz takiego miejsca, to masz to dawac na poczatku kazdego skryptu, albo najlepiej ustawic w php.ini.

Jakbys tak zrobil to od razu bys dostal na ekranie blad: "undefined index..... blabla".
Zrob to wiec teraz, pamietaj by zawsze miec to włączone a oszczedzisz i sobie i nam czasu.



Dzieki , uprzedzilem sie tez do innego forum , tam pisali glupoty , a tutaj pomoc w 5min , dzieki jeszcze raz , a raportowanie zaraz wlacze.
nospor
hehe, czytam wlasnie temat na tym innym forum. nie pisali glupot tylko zaszla literówka.
Koles od samego początku ci pisał ze masz sprawdzac $_SESSION. Potem podał ci przykladowy kod, gdzie przez pomylke wpisał $_POST zamiast $_SESSION. Ty to podchwyciles i dalej tak pisales a nikt juz na to nie zwrocil uwagi smile.gif
gigzorr
To jeszcze jedno mam pytanie , jak sie zaloguje formularz znika logowania oczywiscie, klikne np dodaj newsa znow jest pod spodem i tak dalej.
Nie mam juz pomyslu gdzie ten formularz wstawic w php, zeby dzialal tak jak ma.

I jeszcze jedno pytanie, mam skrypt rejestracji i powiedzmy chce przerwac dzialanie exitem czyli exit; , i dalej skrypt sie nie wykonuje , ale jak tak zrobie to mi znika np. prawy slupek, a bez tego exit; to dupa jest bo wykonuje caly skrypt i mam ze nie wypelniono pol i pod tym zaraz rejestracja przebiegla pomyslnie.Da sie to jakos inaczej rozwiazac?Czy musze utworzyc odziellny plik php i includowac jakos ?
nospor
Cytat
To jeszcze jedno mam pytanie , jak sie zaloguje formularz znika logowania oczywiscie, klikne np dodaj newsa znow jest pod spodem i tak dalej.
Nie mam juz pomyslu gdzie ten formularz wstawic w php, zeby dzialal tak jak ma.
Nie kumam co mowisz. smile.gif

Cytat
i mam ze nie wypelniono pol i pod tym zaraz rejestracja przebiegla pomyslnie.
o IF nie slyszal? Jak pol nie wypelniono to masz nie pozwolic na rejestracje. Do tego uzywa sie IF
gigzorr
Cytat(nospor @ 23.04.2010, 12:07:52 ) *
Nie kumam co mowisz. smile.gif

o IF nie slyszal? Jak pol nie wypelniono to masz nie pozwolic na rejestracje. Do tego uzywa sie IF

Mam formularz do logowania.Loguje sie , formularz znika oczywisite.Klikne np. zakladke dodaj newsa , formularz pojawia sie pod opcjami znow.

A to do drugiego:
Czyli mam takie cos :
  1. if (empty($username) || empty($_POST['password']))
  2. {
  3. echo "Prosze wrocic i uzupelnic pola";
  4.  
  5. }
  6.  
  7. if ($password != $repeatpw)
  8. {
  9. echo "Powtorzone haslo sie nie zgadza!";
  10.  
  11. }


Jak usune exita to wypisuje wszystko czyli prosze wrocic.. zarejestrowano..
Z exitem jest dobrze ale prawy slupek znika.
mortus
Nie należy używać exit(), ponieważ exit zatrzymuje wykonywanie skryptu, zatem kod HTML znajdujący się "pod" exitem nie zostanie wyświetlony. Warunki należy w odpowiedniej kolejności ułożyć i używać konstrukcji
  1. if(warunek) {
  2. // kod, który ma być wykonany pod warunkiem
  3. } elseif(inny warunek) {
  4. // inny kod, który ma być wykonany pod innym warunkiem
  5. } else {
  6. // kod, który ma być wykonany, jeżeli żaden z wcześniejszych warunków nie był spełniony
  7. }

A formularz pojawia się pewnie dlatego, że jest umieszczony w niewłaściwym miejscu.
gigzorr
Cytat(mortus @ 23.04.2010, 12:44:26 ) *
Nie należy używać exit(), ponieważ exit zatrzymuje wykonywanie skryptu, zatem kod HTML znajdujący się "pod" exitem nie zostanie wyświetlony. Warunki należy w odpowiedniej kolejności ułożyć i używać konstrukcji
  1. if(warunek) {
  2. // kod, który ma być wykonany pod warunkiem
  3. } elseif(inny warunek) {
  4. // inny kod, który ma być wykonany pod innym warunkiem
  5. } else {
  6. // kod, który ma być wykonany, jeżeli żaden z wcześniejszych warunków nie był spełniony
  7. }

A formularz pojawia się pewnie dlatego, że jest umieszczony w niewłaściwym miejscu.


Pomoglo , rzeczywiscie zle ulozylem , tu i tu pomogl polecial.Juz jak pisze to i tu napisze:
Jeden problem mam wiecej , jak sie zarejestruje to odrazu mnie zalogowuje.
Tutaj skrypt rejestracji:
  1. <?php
  2. $username = $_POST['username'];
  3. $password = md5($_POST['password']);
  4. $repeatpw = md5($_POST['repeatpw']);
  5.  
  6. if (empty($username) || empty($_POST['password']))
  7. {
  8. echo "Prosze wrocic i uzupelnic pola";
  9.  
  10.  
  11. }
  12.  
  13. elseif ($password != $repeatpw)
  14. {
  15. echo "Powtorzone haslo sie nie zgadza!";
  16.  
  17. }
  18. else
  19. {
  20.  
  21.  
  22. $db = mysql_connect("localhost","root","vertrigo") or die (mysql_error());
  23. $wyborbazy = mysql_select_db("strona") or die(mysql_error());
  24.  
  25. $query = "INSERT INTO rejestracja (uzytkownik,haslo,powtorz) values ('".$username."','".$password."','".$repeatpw."')" or die(mysql_error());
  26.  
  27. $result = mysql_query($query);
  28.  
  29. if ($result)
  30. {
  31. echo "Rejestracja przebiegla pomyslnie.<br/>Mozesz sie zalogowac!";
  32. }
  33.  
  34. else
  35. {
  36. echo "Prosze sprobowac pozniej...";
  37. }}
  38. ?>


A za glupie wciecia lub brak przepraszam , jeszcze nie moge sie przyzwyczaic do tego.
Oraz nastepne pytanie , jak zrobic zeby dodaj newsa itp widzial tylko admin , np. utworze jedna dodatkowa kolumne w tabeli np. poziom 1=admin 0=zwykly uzytkownik , i jak zrobic zeby te linki widzial admin?bo nie mam pomyslu.
evolucja
1. Nie rozumiem. Chcesz by po rejestracji automatycznie cię logowało?
To tam gdzie wyświetlasz 'Rejestracja przebiegła pomyślnie' wstawiasz fragment twojego skryptu logowania smile.gif
  1. $query = "SELECT id FROM `rejestracja` WHERE `uzytkownik` = '".$username."' AND `haslo` = '".$password."'";
  2. $result = mysql_query($query) or die(mysql_error());
  3. $result = mysql_fetch_array($result);
  4. $_SESSION['zalogowany_user_login'] = $username;
  5. $_SESSION['twojehaslo_to'] = $password;
  6. $_SESSION['enejczUserId'] = $result[0]['id'];

2. Przy wchodzeniu na stronę, pobierasz sobie wartość kolumny 'status'
  1. $query = "SELECT status FROM `rejestracja` WHERE `uzytkownik` = '".$username."' AND `haslo` = '".$password."'";
  2. $result = mysql_query($query) or die(mysql_error());
  3. $result = mysql_fetch_array($result);
  4. $user_status = $result[0][id];

I potem sprawdzasz wartość tego $user_status i wyświetlasz lub nie link.
  1. if($user_status == 1) { echo "Witaj administratorze"; }

W ten sposób możesz również zrobić stronę tylko dla administratorów
  1. if($user_status != 1) { echo "Strona dostępna tylko dla administratora"; } else { echo "Witaj w panelu admina"; }

3. Kilka drobnych uwag:
- nie widzę sensu w polach `haslo` i `powtorz`. Przecież wartość w nich zawarta będzie zawsze taka sama... Wystarczy samo `haslo` smile.gif
- przy kodowaniu hasła używaj soli, wymyśl sobie jakiś ciąg znaków który będziesz używał zawsze na tej stronie gdy kodujesz hasło. Np:
  1. $haslo = md5($_POST['password'].'stronA091');
gigzorr
Cytat(evolucja @ 23.04.2010, 15:50:00 ) *
1. Nie rozumiem. Chcesz by po rejestracji automatycznie cię logowało?
To tam gdzie wyświetlasz 'Rejestracja przebiegła pomyślnie' wstawiasz fragment twojego skryptu logowania smile.gif
  1. $query = "SELECT id FROM `rejestracja` WHERE `uzytkownik` = '".$username."' AND `haslo` = '".$password."'";
  2. $result = mysql_query($query) or die(mysql_error());
  3. $result = mysql_fetch_array($result);
  4. $_SESSION['zalogowany_user_login'] = $username;
  5. $_SESSION['twojehaslo_to'] = $password;
  6. $_SESSION['enejczUserId'] = $result[0]['id'];

2. Przy wchodzeniu na stronę, pobierasz sobie wartość kolumny 'status'
  1. $query = "SELECT status FROM `rejestracja` WHERE `uzytkownik` = '".$username."' AND `haslo` = '".$password."'";
  2. $result = mysql_query($query) or die(mysql_error());
  3. $result = mysql_fetch_array($result);
  4. $user_status = $result[0][id];

I potem sprawdzasz wartość tego $user_status i wyświetlasz lub nie link.
  1. if($user_status == 1) { echo "Witaj administratorze"; }

W ten sposób możesz również zrobić stronę tylko dla administratorów
  1. if($user_status != 1) { echo "Strona dostępna tylko dla administratora"; } else { echo "Witaj w panelu admina"; }

3. Kilka drobnych uwag:
- nie widzę sensu w polach `haslo` i `powtorz`. Przecież wartość w nich zawarta będzie zawsze taka sama... Wystarczy samo `haslo` smile.gif
- przy kodowaniu hasła używaj soli, wymyśl sobie jakiś ciąg znaków który będziesz używał zawsze na tej stronie gdy kodujesz hasło. Np:
  1. $haslo = md5($_POST['password'].'stronA091');

Wlasnie w tym problem ze po rejestracji mnie loguje automatycznie , a przeciez tak nie powinno byc.
evolucja
Czy rejestrację i logowanie masz w jednym pliku? Jeśli tak, to przy rejestracji tworzysz zmienne
  1. $username = $_POST['username'];
  2. $password = md5($_POST['password']);
  3. $repeatpw = md5($_POST['repeatpw']);

które potem wykorzystuje skrypt logowania smile.gif
gigzorr
Cytat(evolucja @ 23.04.2010, 16:02:27 ) *
Czy rejestrację i logowanie masz w jednym pliku? Jeśli tak, to przy rejestracji tworzysz zmienne
  1. $username = $_POST['username'];
  2. $password = md5($_POST['password']);
  3. $repeatpw = md5($_POST['repeatpw']);

które potem wykorzystuje skrypt logowania smile.gif


Problem w tym ze nie.
A za podpowiedz co do admina to dzieki , zrobilem podobnie i dziala super.
evolucja
W każdym bądź razie problem napewno leży w tym smile.gif Pozmieniaj te nazwy, tzn. żeby logowanie i rejestracja operowały na innych zmiennych i będzie okej.
gigzorr
Cytat(evolucja @ 23.04.2010, 16:13:50 ) *
W każdym bądź razie problem napewno leży w tym smile.gif Pozmieniaj te nazwy, tzn. żeby logowanie i rejestracja operowały na innych zmiennych i będzie okej.


Rzeczywiscie dziala , pododawalem po 1 literce na koncu i dziala , myslalem ze mozna operowac na tych samych zmiennych w dwoch innych plikach , korzystajacych z tej samej tabeli.
Mam jeszcze jeden problem ktory po klikeniciu na wyloguj wylogowuje ale wywala blad ze niby session_start(); nie dalem na poczatku , a ja ten plik includuje tak mozna powiedziec wiec tez w index.php dalem , ale dalej to samo. hmmm
evolucja
Oczywiście, że można. U ciebie jednak musiał występować konflikt tych zmiennych...
Jeśli stronę opierasz na zasadzie:
głównego pliku index.php gdzie includujesz odpowiednie podstrony to wystarczy, że takie rzeczy jak session_start(); dodasz właśnie w nim.
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.