Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z panelem
Forum PHP.pl > Forum > PHP
colinQ
Mam mały problem. Robie panel administracyjny na bazie MySQL i chcę zrobic funkcje wylogowania. I mam strone z wylogowywaniem
ale jak wybieram to mi dane znikaja po lewej stronie.
oto pliki:


pa.php
  1. <?
  2.  
  3. @ $sql_conn = mysql_connect('localhost', 'konrad_admin', 'jakubek');
  4. $baza = mysql_select_db("konrad_cms");
  5.  
  6. $potwierdzenie= mysql_query("SELECT * FROM administrator WHERE zalogowano='OK'") or
  7. die ("Błąd w zapytaniu");
  8. $rekord=mysql_fetch_assoc($potwierdzenie);
  9.  
  10. if($rekord['zalogowano'] == 'OK') {
  11.  
  12. $login= addslashes($_POST['login']);
  13. $haslo= addslashes($_POST['haslo']); 
  14. $wynik= mysql_query("SELECT * FROM administrator WHERE login='$login'") or
  15. die ("Błąd w zapytaniu");
  16. $record=mysql_fetch_assoc($wynik);
  17. $imie = $record['imie'];
  18. $nazwisko = $record['nazwisko'];
  19. $urodzony = $record['urodzony'];
  20. if($record['haslo'] == $haslo) {
  21. $zamiana = "UPDATE `administrator` SET `zalogowano` = 'OK' WHERE `login`='$login'";
  22. $zamiana_sql = mysql_query($zamiana);
  23. }
  24. include('panel.php');
  25.  
  26. }
  27. ?>


panel.php
  1. <table width=750 cellspacing=0 border=0 align=center>
  2. <tr><td bgcolor=black colspan=2><center><font color=white face=Verdana>Panel Administracyjny</font></td></tr>
  3. <tr><td bgcolor=gray><font style="font-size: 12px" color=#333333 face=Verdana>START</font></td><td bgcolor=gray><p align=right><font style="font-size: 12px" color=#333333 face=Verdana><? echo '<b>'.$imie.'</b> ('.$login.')'; ?></font></td></tr>
  4. <tr><td bgcolor=#3366CC width=25% height=30><font style="font-size: 14px" color=white face="Arial"><center><b>Witaj w panelu!</td><td bgcolor=#CCCCCC><font style="font-size: 14px" face=Arial><center>SKRÓTY DO WYBRANYCH NARZĘDZI</td></tr>
  5. <tr><td bgcolor=#FFFFFF width=25%><font style="font-size: 12px" color=#333333 face="Verdana"><b>Imię:</b> <? echo $imie; ?><br><b>Nazwisko:</b> <? echo $nazwisko; ?><br><b>Urodzony:</b> <? echo $urodzony; ?><br></td><td bgcolor=#EEEEEE><font style="font-size: 14px" face=Arial>
  6. <?
  7. // zmienna $go przekazana metoda GET
  8. $go = $_GET['frame'];
  9.  
  10. // sprawdzamy czy zmienna $go nie jest pusta
  11. if(!empty($go)) {
  12. // sprawdzamy czy plik o danej nazwie istnieje
  13. if(is_file("$go.php")) include "$go.php";
  14. // jezeli plik nie istnieje wyswietla się komunikat
  15. else echo "<br />Nie ma takiej strony :-(";
  16. }
  17. // jezeli zmienna $go jest pusta wyswietla się strona glowna
  18. else {
  19. ?>
  20. <table><tr><td><font style="font-size: 10px"><center><a href=pa.php?frame=wyloguj><img src=gfx/logout.gif border=0><br>wyloguj</a></td><td><font style="font-size: 10px"><center><img src=gfx/new_user.gif><br>nowy admin</td></tr></table>
  21. <?
  22. }
  23. ?>
  24. </td></tr>
  25. </table>


wyloguj.php
  1. <?
  2.  
  3.  
  4. if($rekord['zalogowano'] == 'OK') {
  5.  
  6. echo 'Wylogowano!';
  7.  
  8. } else {
  9.  
  10. echo 'Nie jesteś zalogowany!';
  11.  
  12. }
  13. ?>


Proszę o pomoc.

Dla ułatwienia sprawy daje link: http://konradkolasa.exh.pl//PHP-MySQL/login/

login: test
haslo: test


a oto tabela administracja

login || haslo ||imie ||nazwisko||urodzony ||zalogowano
test || test || test ||test || 00-00-0000 || OK
john_doe
wydaje mi się, że to nie chodzi dobrze np zobacz:
wpisuje login i haslo i przechodze do uwierzytelnionej strony -> teraz kopiuje sobie adres -> daje wyloguj -> pisze ze jestem wylogowany - > teraz wklejam z powrotem adres i ENTER -> i co ? przechodze do uwierzytelnionej wczesniej strony a tak to dzialac nie powinno. Powinno wyrzucic na ekren cos w stylu blad logowania. Poza tym nawet gdy nie podam hasla to zaloguje hehe

startujesz Ty w ogóle gdzieś sesję, zabijasz ją na końcu?questionmark.gif?


pozdro
chaos_code
sesji z tego co widzę, to raczej nie ma, a jeśli ma dobrze działać, to faktycznie by się przydały
ale do problemu...

login oraz hasło (czy nazwisko) najprawdopodobniej znikają dlatego, ze nie ich nie przekazujesz

na moje oko to prócz wyloguj powinieneś przekazać jeszcze interesujące Cię parametry tutaj:

<a href=pa.php?frame=wyloguj> login, hasło,... (i chyba lepiej wszystko przez POST)
colinQ
A moglibyście sprobować zmienić to jakoś, tak aby działało?
mike
Cytat(colinQ @ 10.05.2007, 09:03:14 ) *
A moglibyście sprobować zmienić to jakoś, tak aby działało?
My moglibyśmy, ale to chodzi o to żebyś Ty tez mógł.
Forum nie służy do rozdawania gotowców. Służy do dyskusji i pomocy.
Zadałeś pytanie dostałeś podpowiedzi, wskazówki, jeśli nie wiesz dalej to pytaj pomożemy Ci. Ale musisz wykazać inicjatywę.

Nie może być tak że zadajesz pytanie dostajesz odpowiedzi i walisz, że chcesz gotowe.
Tego na forum.php.pl nie doświadczysz.
Fixus
przeleciałem pobieżnie więc moge powiedzieć coś troche nie na temat

ale zakładajc, że skoro chcesz tu zrobić logowanie i wylogowanie to oprzyj się na sesjach. Podczas logowania tworzysz nową sesje i przypisujesz sobie (o ile się nie pomyle):
Kod
$login = $_SESSION['login']; // $_SESSION['lnazwa'] - nazwa to nazwa inputa w którego wpisujesz login podczas logowania

Potem tam gdzie chcesz żeby ten login się wyświetlał robisz po prostu:
Kod
echo $login;

ewentualnie

echo $_SESSION['login'];;


jak robisz wylogowania to tylko niszczysz sesje i po sprawie...dodatkowo możesz na każdej podstronie sprawdzać czy zmienna sesyjna istnieje to ci da pewne zabezpieczenia przed włamem
colinQ
ALe ja naprawdę nie kumam. Chcę aby na kazdej podstornie panelu widac bylo imie, nazwisko i urodzenie.

Te informacje mam zawarte w bazie i chce zeby on je stamtąd czytal.

Proszę napiszcie mi gotowca a ja sie z tego nauczę smile.gif
Bo sam sobie nie radzę:(
Cysiaczek
[ironia]
Dzisiaj postanowiłem, że zostanę pisarzem science-fiction. Mam już tytuł pierwszej książki. W związku z tym mam prośbę - możecie mi napisać parę rozdziałów? Nie mam chwilowo czasu i weny twórczej, a poza tym nie lubię pisać książki od początku, bo to nudne i trudne.
[/ironia]

[powaga]
To zacznij od prostych rzeczy takich jak formatowanie danych wyciągniętych z bazy i przenoszenie sesji pomiędzy stronami. Zabierasz sie za "panel administracyjny" a odpadasz na podstawach. Nie śpiesz się i nie irytuj. Wiem, że ogarnięcie wszystkich niezbędnych technik wydaje się koszmarem, ale taka jest praca developera/webmastera.
[/powaga]

Pozdrawiam.
colinQ
Próbowałem zmieniać, próbowalem sesje ale nic prawie z nich nie kumam.

Może gdybyście zmienili mi to to bym coś zrozumiał. Nie wiem gdzie umieścic te sesje i jak je przekazać.

Ja uczę się na przykładach dlatego tłumaczenie nic mi nie daje :/
Sopnet
session_start()

Czego jeszcze nie rozumiesz?
colinQ
Zrobiłem wg. manual'a ale nic to niedalo :/

pa.php
  1. <?
  2.  
  3. @ $sql_conn = mysql_connect('localhost', 'konrad_admin', 'jakubek');
  4. $baza = mysql_select_db("konrad_cms");
  5.  
  6. $potwierdzenie= mysql_query("SELECT * FROM administrator WHERE zalogowano='OK'") or
  7. die ("Błąd w zapytaniu");
  8. $rekord=mysql_fetch_assoc($potwierdzenie);
  9.  
  10. if($rekord['zalogowano'] == 'OK') {
  11.  
  12. $login= addslashes($_POST['login']);
  13. $haslo= addslashes($_POST['haslo']); 
  14. $wynik= mysql_query("SELECT * FROM administrator WHERE login='$login'") or
  15. die ("Błąd w zapytaniu");
  16. $record=mysql_fetch_assoc($wynik);
  17. $imie = $record['imie'];
  18. $nazwisko = $record['nazwisko'];
  19. $urodzony = $record['urodzony'];
  20.  
  21.  
  22. $_SESSION['imie']  = $imie;
  23. $_SESSION['nazwisko']  = $nazwisko;
  24. $_SESSION['urodzony'] = $urodzony;
  25.  
  26. if($record['haslo'] == $haslo) {
  27. $zamiana = "UPDATE `administrator` SET `zalogowano` = 'OK' WHERE `login`='$login'";
  28. $zamiana_sql = mysql_query($zamiana);
  29. // zmienna $go przekazana metoda GET
  30. $go = $_GET['frame'];
  31.  
  32. // sprawdzamy czy zmienna $go nie jest pusta
  33. if(!empty($go)) {
  34. // sprawdzamy czy plik o danej nazwie istnieje
  35. if(is_file("$go.php")) include "$go.php";
  36. // jezeli plik nie istnieje wyswietla się komunikat
  37. else echo "<br />Nie ma takiej strony :-(";
  38. }
  39. // jezeli zmienna $go jest pusta wyswietla się strona glowna
  40. else { include('panel.php'); }
  41.  
  42. }
  43.  
  44. }
  45. ?>


panel.php
  1. <table width=750 cellspacing=0 border=0 align=center>
  2. <tr><td bgcolor=black colspan=2><center><font color=white face=Verdana>Panel Administracyjny</font></td></tr>
  3. <tr><td bgcolor=gray><font style="font-size: 12px" color=#333333 face=Verdana>START</font></td><td bgcolor=gray><p align=right><font style="font-size: 12px" color=#333333 face=Verdana><? echo '<b>'.$imie.'</b> ('.$login.')'; ?></font></td></tr>
  4. <tr><td bgcolor=#3366CC width=25% height=30><font style="font-size: 14px" color=white face="Arial"><center><b>Witaj w panelu!</td><td bgcolor=#CCCCCC><font style="font-size: 14px" face=Arial><center>SKRÓTY DO WYBRANYCH NARZĘDZI</td></tr>
  5. <tr><td bgcolor=#FFFFFF width=25%><font style="font-size: 12px" color=#333333 face="Verdana"><b>Imię:</b> <? echo $_SESSION['imie']; ?><br><b>Nazwisko:</b> <? echo $_SESSION['nazwisko']; ?><br><b>Urodzony:</b> <? echo $_SESSION['urodzony']; ?><br></td><td bgcolor=#EEEEEE><font style="font-size: 14px" face=Arial>
  6. <table><tr><td><font style="font-size: 10px"><center><a href="pa.php?frame=wyloguj"><img src=gfx/logout.gif border=0><br>wyloguj</a></td><td><font style="font-size: 10px"><center><img src=gfx/new_user.gif><br>nowy admin</td></tr></table>
  7. </td></tr>
  8. </table>


wyloguj.php
  1. <table width=750 cellspacing=0 border=0 align=center>
  2. <tr><td bgcolor=black colspan=2><center><font color=white face=Verdana>Panel Administracyjny</font></td></tr>
  3. <tr><td bgcolor=gray><font style="font-size: 12px" color=#333333 face=Verdana>START</font></td><td bgcolor=gray><p align=right><font style="font-size: 12px" color=#333333 face=Verdana><? echo '<b>'.$imie.'</b> ('.$login.')'; ?></font></td></tr>
  4. <tr><td bgcolor=#3366CC width=25% height=30><font style="font-size: 14px" color=white face="Arial"><center><b>Witaj w panelu!</td><td bgcolor=#CCCCCC><font style="font-size: 14px" face=Arial><center>SKRÓTY DO WYBRANYCH NARZĘDZI</td></tr>
  5. <tr><td bgcolor=#FFFFFF width=25%><font style="font-size: 12px" color=#333333 face="Verdana"><b>Imię:</b> <? echo $_SESSION['imie']; ?><br><b>Nazwisko:</b> <? echo $_SESSION['nazwisko']; ?><br><b>Urodzony:</b> <? echo $_SESSION['urodzony']; ?><br></td><td bgcolor=#EEEEEE><font style="font-size: 14px" face=Arial>
  6. <?
  7.  
  8.  
  9. if($rekord['zalogowano'] == 'OK') {
  10.  
  11. echo 'Wylogowano!';
  12.  
  13. } else {
  14.  
  15. echo 'Nie jesteś zalogowany!';
  16.  
  17. }
  18. ?>


Chyba ze nie dodalem jakiegoś znacznika zapisania sesji ale wydaje mi sie ze session_start(); wystarczy.

Albo nie akceptuje ciasteczka :/
Sopnet
Ciezko bedzie.

1. Ten pa.php nie ma dla mnie najmniejszego sensu. Sprobuj przemyslec krok po kroku co skrypt ma robic i sprawdzaj co robi faktycznie. Podpowiedzi
- linie 6,7,8 - do czego one sluza?
- linia 10 - co ty chcesz na tym etapie sprawdzac?
- linia 27 - przetrzymujesz haslo w bazi danych w postaci tekstowej?
2. czy przewidujesz jakas inna wartosc niz "OK" w polu zalogowano? (to pole i tak jest niepotrzebne)
3. ilu ma byc uzytkownikow w tabeli administrator?


Nikt za ciebie tego nie napisze. musisz sam wziac sie do roboty
colinQ
ODPOWIEDZI DO 1
1. 6 i 7 linia wykorzystywana jest pozniej w pliku wyloguj.php
2.

Linia dziesiec sprawdza czy ostatnia komorka ma wartosc OK. Ma ona sluzyc do sprawdzana czy jestes zalogowany. Przy wyloguj powinna zmienic sie na NO.

oto tabela
=====================================
login || haslo ||imie ||nazwisko||urodzony ||zalogowano
test || test || test ||test || 00-00-0000 || OK
=====================================
3. TAK

ODPOWIEDZI DO 2

poadalem wyzej

ODPOWIEDZI DO 3

TAK

Chodzi mi o korekcję błędów i bliższe wytlumaczenie.


Teraz żeby łatwiej było zrozumieć o co mi dokładnie chodzi.

A chodzi mi o to ze po wejściu w link 1 znikają mi dane osobowe(imię, nazwisko, urodzenie).

http://konradkolasa.exh.pl//PHP-MySQL/panel/

login: test
hasło: test

pa.php
  1. <?
  2. ///// ZMIENNE //////
  3. @ $sql_conn = mysql_connect('localhost', 'konrad_admin', 'jakubek');
  4. $baza = mysql_select_db("konrad_cms");
  5.  
  6.  
  7. $login= addslashes($_POST['login']);
  8.  
  9. $haslo= addslashes($_POST['haslo']); 
  10.  
  11. $wynik= mysql_query("SELECT * FROM administrator WHERE login='$login'");
  12.  
  13. $record=mysql_fetch_assoc($wynik);
  14.  
  15. $imie = $record['imie'];
  16.  
  17. $nazwisko = $record['nazwisko'];
  18.  
  19. $urodzony = $record['urodzony'];
  20.  
  21. /////// SESJE ////////
  22.  
  23. $_SESSION['login']  = $login;
  24.  
  25. $_SESSION['haslo']  = $haslo;
  26.  
  27. $_SESSION['imie']  = $imie;
  28.  
  29. $_SESSION['nazwisko']  = $nazwisko;
  30.  
  31. $_SESSION['urodzony'] = $urodzony;
  32.  
  33. ?>
  34.  
  35.  
  36.  
  37. <table border=1 width=750 align=center><tr><td bgcolor=black width=200 height=100><font color=white><center>
  38. <?
  39.  
  40. echo '<b>imie</b><br> '.$_SESSION['imie'].'<br>';
  41. echo '<b>nazwisko</b><br> '.$_SESSION['nazwisko'].'<br>';
  42. echo '<b>urodzony</b><br> '.$_SESSION['urodzony'].'<br>';
  43.  
  44. ?>
  45. </font></td><td>
  46. <?
  47. // zmienna $go przekazana metoda GET
  48. $go = $_GET['frame'];
  49.  
  50. // sprawdzamy czy zmienna $go nie jest pusta
  51. if(!empty($go)) {
  52. // sprawdzamy czy plik o danej nazwie istnieje
  53. if(is_file("$go.php")) include "$go.php";
  54. // jezeli plik nie istnieje wyswietla się komunikat
  55. else echo "<br />Nie ma takiej strony :-(";
  56. }
  57. // jezeli zmienna $go jest pusta wyswietla się strona glowna
  58. else { 
  59.  echo '<center>Witaj w panelu!<br>Zostałeś zalogowany jako <b>';
  60.  echo $_SESSION['login'];
  61.  echo '</b>';
  62.  }
  63. ?>
  64. </td><td bgcolor=black width=200 height=100><font color=white><center>
  65. <a href=pa.php?frame=link1 color=white>link 1</a></td>
  66. </tr></table>
Sopnet
ok. To teraz tak: jest duzo lepiej smile.gif

w linii 12 mozesz od razu sprawdzac haslo: WHERE login="$login" AND haslo="$haslo"

Czemu dane znikaja? Jesli pa.php to twoj kontroler to probujesz sie logowac za kazdym razem jak przechodzisz pomiedzy stronami. Zeby temu zapobiec musisz:

1. sprawdz czy przesylane sa login i haslo
2. jesli tak - sprobuj zalogowac

3. sprawdz czy uzytkownik jest zalogowany

ma to wygladac mniej wiecej tak:
  1. <?php
  2. if ( isset($_POST['login']) && isset($_POST['haslo']) ) {
  3. //sprobuj zalogowac
  4. }
  5.  
  6. if (ZALOGOWANY) {
  7. //wyswietl zawartosc
  8. }
  9. ?>
colinQ
"jesli tak - sprobuj zalogowac"

ale co i jak zalogowac??
Sopnet
Pokombinuj z tym kodem (i wykaz odrobine cierpliwosci biggrin.gif ):

  1. <?php
  2. if ( isset($_POST['login']) && isset($_POST['haslo']) ) {
  3. $login= addslashes($_POST['login']);
  4. $haslo= addslashes($_POST['haslo']); 
  5. $wynik= mysql_query("SELECT * FROM administrator WHERE login='$login' AND haslo='$haslo'");
  6. if ($record=mysql_fetch_assoc($wynik)) {
  7. $_SESSION['imie'] = $record['imie']
  8. // itd...
  9. }
  10. }
  11.  
  12. if ( $_SESSION['imie'] ) {
  13. //uzytkownik jest zalogowany
  14. }
  15. ?>
colinQ
Dzięki Sopnet za rady smile.gif DZIAŁA :]

Teraz będę się męczył nad wylogowywaniem, ale przypuszczam że o tylko trzeba ciasteczko usunąc i zrobi przeniesienie do strony logowania. smile.gif

Znowu coś się zwaliło, wczoraj zalogowywanie i wylogowywanie działało jak żyleta a dzis wchodzę loguje się i wyskakuje


Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/konrad/domains/konradkolasa.exh.pl/public_html/calkiem_nowe/panel/pa.php:3) in /home/konrad/domains/konradkolasa.exh.pl/public_html/calkiem_nowe/panel/pa.php on line 21

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/konrad/domains/konradkolasa.exh.pl/public_html/calkiem_nowe/panel/pa.php:3) in /home/konrad/domains/konradkolasa.exh.pl/public_html/calkiem_nowe/panel/pa.php on line 21

a pod tym moj panel w ktorym jak we wczesniejszym bledzie tylko 1 podstona ma dane :]
a działało na wszystkich mad.gif

http://konradkolasa.exh.pl/calkiem_nowe/panel/

l: test
h: tester
Sopnet
Cytat
Notatka: Jeśli używasz sesji opartych o ciasteczka, to session_start() musi być wywołane przed wysłaniem jakichkolwiek danych do przeglądarki.


wiec fajnie by bylo gdyby session_start bylo 1 linijka w skrypcie smile.gif
colinQ
Tamto nie działało bo:

mój kod wyglądał tak:
  1. <meta ....>
  2. <?
  3. ?>


a działać zaczęło gdy:
  1. <?
  2.  
  3. echo '<meta .....>';
  4. ?>


ale gdy zalogujecie sie np.

login: hjasbj
hasło: jashlk

to w imię nie wyświetla się nic i ja chce zrobić że gdy właśnie jest nie ten login i nie to haslo to
  1. <?php
  2. header('location: index.html');
  3. ?>


ale nie wiem czy to powinno być isset czy if($login == '') i do czego sie powinno odwoływać bo $login nie dziala

mam taki napis kliknij aby usunac i chcę ze jezeli klikne to am wczesniej napisane
  1. <?php
  2. if(isset($dane_wyslane)) {
  3. echo 'kliknij aby usunac';
  4. }
  5. else
  6. { tutaj moj kodzik usuwania }
  7. ?>

on przesylal dane do tej samej strony na ktorej on sie wyswietla. Ale jak to zrobic?? Mogłbym oczywiscie:
  1. <?php
  2. if(isset($_post['dane_wyslane'])) {
  3. ?>
  4. <form method=post action...>
  5. <input type=submit value=kliknij aby usunac> // ale ja nie chce zeby byl to przycisk tylko napis
  6. </form>
  7. <?
  8. }
  9. else
  10. { tutaj moj kodzik usuwania }
  11. ?>
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.