Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dziwny problem z logowaniem...
Forum PHP.pl > Forum > Przedszkole
dargoth
witam...

sprawa wyglada w ten sposob ze mam forme w niej wpisuje login i pass... pod ta forma jest jeden link jezeli nie jestesmy zalogowani jako admin... jak jestesmy adminem to mamy jeszcze drugi link... oczywiscie forma takze powinna znikac jesli sie zalogoalismy... niestety tak sie nie dzieje...

pierwsze moje pytanie brzmi... jezeli mam w bd w polu rola wpisane "admin" wpisuje to do sesji
  1. <?php
  2. $query = "SELECT role FROM xuser WHERE login='" . $_POST['login'] . "' AND password='" . md5($_POST['pass']) . "'";
  3.  
  4. $p = mysql_query($query) or die (mysql_error(error));
  5.  
  6. $count = mysql_num_rows($p);
  7.  
  8.  
  9.  
  10. if ($count == 1){
  11. $_SESSION['role']= $p;
  12. echo "zalogowales sie. kliknij <a href='index.php'>tutaj</a> by powrocic";
  13. }
  14. ?>


dopiero wczoraj wykombinowalem ze skoro to nie chce zadzialac (znaczy ta znikajaca forma) to powinienem wyswietlic sobie co mam w zmiennej $_SESSION['role'] no i wynik mnie szczerze mowiac zaskoczyl.. ale najpierw kod jaki mam...:

  1. <?php
  2. echo $_SESSION['role'] . "<br>";
  3. echo isset($_SESSION['role']);
  4. ?>


pozniej jest if w zaleznosci czy w tej zmiennej jest guest (jak sie nie powiedzie logowanie to podpisuje pod ta zmienna wlasnie guesta) a pozniej mam kolejnego ifa dla admina:

  1. <?php
  2. if ($_SESSION['role'] == 'admin'){
  3. echo "<a href='addnewsform.php'>dodaj newsa</a><br>";
  4. }
  5. ?>


w "wyniku" wypisuje mi ze $_SESSION['role'] to 0 (jak sie zaloguje jako admin.. w pozostalych przypadkach mam guest) ale mimo ze ta zmienna == 0 to wchodzi do tego ifa z adminem...:/ natomiast jezeli sie zaloguje jako gosc (podam zly login/haslo) to mam tam wpisane guest ale do ifa z guestem nie wchodzi :/

zatem moje pytanie.. co robie zle? o co w tym chodzi? jak to poprawic?:/

z gory dzieki za odpowiedz...
shpyo
na początkui brakuje
  1. <?php
  2. ?>

bez tego sesje nie będą działać!
dargoth
to jest.. jakby tego nie bylo to przeciez nie weszlo by do ifa z adminem i nie wypisaloby tego co jest w zmiennej sesyjnej...

nadal czekam na pomoc...smile.gif
nospor
ty do $_SESSION['role'] przypisujesz $p, a $p = mysql_query($query), czyli wynik funckji mysql_query czyli resource a nie wartosc z pola role smile.gif
poczytaj se manuala
dargoth
teraz rozumiem... ale nie zmienia to faktu ze to co napisales dziala... bo...:

sprawdzam czy istnieje login i czy haslo do niego pasuje... jesli tak to podpisuje role do sesji... z tego co mowisz wynika ze cos takiego:
  1. <?php
  2. if ($_SESSION['role'] == 'admin'){
  3. echo "<a href='addnewsform.php'>dodaj newsa</a><br>";
  4. }
  5. ?>

nie powinno dzialac... a dziala... bo wchodzi tutaj:

  1. <?php
  2. else{
  3. $_SESSION['role']="guest";
  4. echo "zly login lub haslo. kliknij <a href='index.php'>tutaj</a> by powrocic";
  5. }
  6. ?>

czyli podalem zly login/haslo wiec podstawia do sesji w role guesta... i pozniej mam (w index.php):
  1. <?php 
  2. echo $_SESSION['role'] . "<br>";
  3. echo isset($_SESSION['role']);
  4. if ($_SESSION['role'] == 'guest'){
  5.  ?>
  6.  
  7. KOD HTML
  8.  
  9. <?php
  10. }
  11. ?>


KOD HTML to formularz do logwania... czyli jak jestesmy gosciem to powinnien sie pojawiac a jak adminem to nie... niestety jak loguje sie jako admin to formularz nadal jest widoczny (wiem ze jestem zalogowany bo pojawia sie link "dodaj newsa")

czekam na dalsze pomysly cool.gif
nospor
troche to chaotyczne co piszesz. Mowisz ze wchodzi ci do elsa goscia. NO i dobrze ze wchodzi bo resource to nie jest admin, wiec wchodzi do else.

Pokaz jeszcze raz caly kod juz poprawiony (to co ci wskazalem) i pokaz mi to co ci wyswietla pod $_SESSION['role'] za kazdym razem.
dargoth
index.php:

  1. <?php
  2. ?>
  3.  
  4. <html>
  5. <head>
  6. <title>Strona główna</title>
  7. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  8. </head>
  9.  
  10. <body bgcolor="#FFFFFF" text="#000000">
  11.  
  12. <?php 
  13. if (isset($_SESSION['role'])){
  14. }else{
  15. $_SESSION['role']="guest";
  16. }
  17.  
  18. echo $_SESSION['role'] . "<br>";
  19. echo isset($_SESSION['role']);
  20. if ($_SESSION['role'] == 'guest'){
  21.  ?>
  22.  
  23. Zaloguj sie<br>
  24. <form action="login.php" method="post">
  25.  
  26. <table width="20%" border="0" cellpadding="0" cellspacing="0">
  27. <tr>
  28. <td width="10%">Login:</td><td align="left"><input type="text" name="login"></td>
  29. </tr>
  30. <tr>
  31. <td>Hasło:</td><td align="left"><input type="password" name="pass"></td>
  32. </tr>
  33. <tr>
  34. <td colspan="2" align="center"><input type="submit" name="submit" value="Zaloguj"></td>
  35. </tr>
  36. </table>
  37. <br>
  38.  
  39. </form>
  40. <?php } 
  41. ?>
  42.  
  43. <?php
  44.  
  45. if ($_SESSION['role'] == 'admin'){
  46. echo "<a href='addnewsform.php'>dodaj newsa</a><br>";
  47. }
  48.  
  49. echo "<a href='shownews.php'>pokaz newsy</a><br>";
  50.  
  51.  
  52.  
  53. ?>
  54.  
  55. </body>
  56. </html>




login.php:

  1. <?php
  2.  
  3. $connect = mysql_connect("localhost", "us", "uspass") or die ("Blad przy polaczeniu z baza danych");
  4.  
  5. mysql_select_db("szwol");
  6.  
  7. $query = "SELECT role FROM xuser WHERE login='" . $_POST['login'] . "' AND password='" . md5($_POST['pass']) . "'";
  8.  
  9. $p = mysql_query($query) or die (mysql_error(error));
  10.  
  11. $count = mysql_num_rows($p);
  12.  
  13.  
  14.  
  15. if ($count == 1){
  16. $_SESSION['role']= $p;
  17. echo "zalogowales sie. kliknij <a href='index.php'>tutaj</a> by powrocic";
  18. }
  19. else{
  20. $_SESSION['role']="guest";
  21. echo "zly login lub haslo. kliknij <a href='index.php'>tutaj</a> by powrocic";
  22. }
  23. ?>




zmian zadnych nie wprowadzilem bo to o czym mowiles dziala... czyli jak jestem zalogowany jako admin to wchodzi mi do ifa z adminem...

teraz to co mi wypisuje w linii:
echo $_SESSION['role']

jak jestem gosciem: guest
jak jestem zalogowany: 0 (ale jak mowie do ifa =='admin' wchodzi)

teraz moze napisze co sie pokazuje... na poczatek moze co powinno sie pokazywac:

jak jestem guestem:
form do zalogowania
link pokaz newsy

jak jestem adminem:
link dodaj newsa
link pokaz newsy

a teraz co sie pokazuje:

jak jestem guestem:
form do zalogowania
link pokaz newsy

czyli wszystko ok... ale jak jestem adminem:
form do zalogowania
link dodaj newsa
link pokaz newsy

czyli tylko form sie pokazuje dodatkowo mimo ze nie powinien... a tam jest if z guestem...

druga rzecz.. jako ze juz pokazalem moj kod caly (znacyz 2 pliki) to moglibyscie mi powiedziec czy dobrze w miare pisze (chodzi mi o styl) jesli nie to jak powinienem pisac itp... z gory dzieki za pomoc...
nospor
to mi klina zadales smile.gif
NO ale skoro dziala po poprawkach to po co se glowe zawracac?
A na powaznie. skoro porownujesz przez == rozne typy, to moze mu sie jakims cudem zgadza skoro wchodzi ci w ify. Gdyz == porownuje tylko wartosc a nie patrzy na typ. zamien porownania == na === i powinno chyba juz dzialac (wtym zlym skrypcie smile.gif )

co do pisania
ja bym to
  1. <?php
  2.  
  3. if (isset($_SESSION['role'])){
  4. }else{
  5. $_SESSION['role']="guest";
  6. }
  7. ?>

zamienil na:
  1. <?php
  2.  
  3. if (!isset($_SESSION['role']))
  4. $_SESSION['role']="guest";
  5.  
  6. ?>
prawda ze krocej ?

pozatym nie sprawdzasz danych z posta, czyli wkladasz $_POST['login'] i haslo bez zapezpieczen. poczytaj se to:
http://forum.php.pl/index.php?showtopic=23258
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.