Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] logowanie
Forum PHP.pl > Forum > PHP
Majcok12
Znow mam problem z skryptem logowania. Chodzi o to ze zaleznie czy user jest adminem czy nie w cookie ma dopisane np. admin|TAK/NIE. Tylko ze nie zapisuje mi cookie z pierwszego warunku, tzn. jesli np. pierwszym warunkiem w skrypcie jest to ze jesli uzytkownik nie jest adminem zmienna admin w cookie bedzie miala wartosc NIE lub odwrotnie, tylko ze cookie w pierwszym warunku mi nie zapiuje, a jesli jest spelniony warunek ktory jest drugi w skrypcie (np. user jest adminem) cookie zostaje zapisane.

logowanie.php
  1. <?
  2.  
  3. if(!isset($_POST[&#092;"user_nick\"]) && !isset($_POST[\"user_password\"]) && !$_SESSION[\"usernick\"] && !$_SESSION[\"userpassword\"] && !$_COOKIE[\"user_id\"] && !$_COOKIE[\"user_pass\"])
  4. {
  5.    html_header();
  6. // formularz logowania
  7.    html_footer();
  8.  
  9. }
  10. else
  11. {
  12.    setcookie (&#092;"user_id\", $_POST[\"user_nick\"], time()+86400);
  13.    setcookie (&#092;"user_pass\", $_POST[\"user_password\"], time()+86400);
  14.    header (&#092;"Location: logowanie2.php\" . \"\");
  15. }
  16.  
  17.  
  18. ob_end_flush();    
  19. ?>



logowanie2.php
  1. <?
  2. session_start();    
  3.  
  4. $_SESSION[&#092;"usernick\"] = strtolower(trim($_COOKIE[\"user_id\"])); //zapis do sesji wartosci cookie
  5. $_SESSION[&#092;"userpassword\"] = trim($_COOKIE[\"user_pass\"]);
  6.  
  7. setcookie (&#092;"user_id\");  // usuniecie cookie, wartosci cookie sa teraz w zmiennych sesyjnych
  8. setcookie (&#092;"user_pass\");
  9.  
  10. $zapytanie = mysql_query(&#092;"SELECT user_nick, user_pass, admin FROM users WHERE user_nick ='\".$_SESSION['usernick'].\"'\");
  11. $user = mysql_fetch_array($zapytanie);
  12.  
  13.  
  14. if($_SESSION[&#092;"usernick\"] == strtolower($user[\"user_nick\"]) && $_SESSION[\"userpassword\"] == $user[\"user_pass\"] && $user[\"admin\"] == \"NIE\")
  15. {  //pierwszy warunek (cookie ponizej nie zostana zapisne, nie wiem dlaczego)
  16.  
  17.  
  18.     setcookie (&#092;"user_id\", $_SESSION[\"usernick\"], time()+86400);
  19.     setcookie (&#092;"user_pass\", $_SESSION[\"userpassword\"], time()+86400);
  20.     setcookie (&#092;"admin\", $user[\"admin\"], time()+86400);
  21.  
  22.     html_header(); // funkcja wyswietlajaca szablon strony
  23.  
  24.     echo &#092;"<b>Zostales zalogowany</b>\";
  25.    
  26.     html_footer();
  27.  
  28. }
  29.  
  30.  
  31. if ($_SESSION[&#092;"usernick\"] == strtolower($user[\"user_nick\"]) && $_SESSION[\"userpassword\"] == $user[\"user_pass\"] && $user[\"admin\"] == \"TAK\")
  32. { //drugi warunek
  33.  
  34.  
  35.     setcookie (&#092;"user_id\", $_SESSION[\"usernick\"], time()+86400);
  36.     setcookie (&#092;"user_pass\", $_SESSION[\"userpassword\"], time()+86400);
  37.     setcookie (&#092;"admin\", $user[\"admin\"], time()+86400);
  38.  
  39.     html_header(); // funkcja wyswietlajaca szablon strony
  40.  
  41.     echo &#092;"<b>Zostales zalogowany jako admin</b>\";
  42.    
  43.     html_footer();
  44.     header (&#092;"Location: index.php\");
  45.  
  46. }
  47.  
  48. else 
  49. {
  50.  
  51.     session_unregister(&#092;"usernick\");
  52.     session_unregister(&#092;"userpassword\");
  53.     setcookie (&#092;"user_id\");
  54.     setcookie (&#092;"user_pass\");
  55.     setcookie (&#092;"admin\");
  56.     echo &#092;"zly login lub haslo\";
  57.     echo &#092;"<a href=\"logowanie.php\">Logowanie</a><br>\";
  58.  
  59. }
  60.  
  61. ob_end_flush();    
  62. ?>


PZdr & Thx
sf
Bo masz mieć tak :

if ( )
elseif ()
else()

a nie tak jak ty masz. Przynajmniej tak mi się wydaje na pierwszy rzut oka.

PS1 Jak stosujesz już " " to nie zamykaj ich wstawiając zmienną z tablicy.
PS2 Na strone php.net pisze, że nie należy używać session_unregister jak stosujesz tablicę globalną $_SESSION ... doczytaj sobie co się stosuje winksmiley.jpg

EDIT

PS3 Genialny jest pomysł zapisania czy użytkownik jest adminem w zmiennej cookie, którą każdy sobie może ręcznie zmienić z NIE na TAK.
Majcok12
Cytat
if ( )
elseif ()
else()


Dzieki, dziala smile.gif


Cytat
PS3 Genialny jest pomysł zapisania czy użytkownik jest adminem w zmiennej cookie, którą każdy sobie może ręcznie zmienić z NIE na TAK.


Zrobilem tak na szybko, bo bym nie widzial czy cookie sa zapisywane na nastepnej stronie, czy nie (chociaz jak pozniej dodalem usuwanie cookie po wpisaniu ich do sesji, to moglem juz to zmienic ale bardziej mnie interesowalo czemu w ogole nic nie zapisuje), bo najpierw byly zapisywane zaraz po logowaniu a pozniej w warunkach. Ale thx za przypomnienie, bo bym jeszcze zapomnial o zmianie tego.

PS. Mam skrypt rejestracji i w nim mam:
  1. <?php
  2.  
  3. if($userpassword!=$userpassword2) {
  4.  error_message(&#092;"Podane hasła nie są identyczne\");
  5.  exit;
  6. }
  7.  
  8. ?>

I chociaz podaje dwa takie same hasla pokazuje sie powyzszy komunikat.

PZdr
sf
Najwidoczniej nie są takie same. Sprawdź za pomocą echo czy wyświetla się to samo. Potem sprawdź czy długość się zgadza. Czasem mogą to być poprostu znaki typu nowej lini (\n).
Majcok12
Sa takie same.

Edit. Przed chwila sprobowalem dodac jakiegos uzytkownika i wszytko dziala jak nalezy. blink.gif Dziwne.

Pzdr
jono
Lepiej jest tak: (chodzi o !== a nie !=)

  1. <?php
  2.  
  3. if($userpassword!==$userpassword2) {
  4.  error_message(&#092;"Podane hasła nie są identyczne\");
  5.  exit;
  6. }
  7.  
  8. ?>
Majcok12
Zamiast robic nowy topic spytam sie tutaj.
1. Jak przy pomocy header() odswiezyc strone? Mialem kiedys naglowek odpowiedzialny za to ale teraz za bardzo nic nie umie znalezc.


Pzdr
jono
Odpowiedź znajdziesz tutaj

  1. <?php
  2.  
  3. // przed tą linią nie możesz nic wyświetlić, nawet spacji. Więc jak wywali błąd, \"Headres already sent...\" to znaczy, że coś wyświetliłeś.
  4.  
  5. header(&#092;"Location: http://www.example.com/\"); 
  6.  
  7. ?>
Majcok12
Imo ja w manualu nie znalalem konkretnej odp. Nie potrzebne mi przekierowanie, bo i tak czesto mnie nie przenosi
np.
  1. <?php
  2.  
  3. $wynik = mysql_query($query);
  4.  
  5. error_message(&#092;"Komentarz został dodany\");
  6. header (&#092;"Location: index.php . ?id=$_GET[id]&id_commnts=$_GET[id_commnts]&action=v_r\");
  7. //czy tez tak:
  8. header (&#092;"Location: index.php\");
  9.  
  10.  
  11. ?>

Tylko sie pojawia okieno z napisem ze komentarz zostal dodany i po kliknieciu na ok wraca na strone, na ktorej w formularzu dalej sa dane, a strona jeszcze nie odswiezona.

Pzdr
mihow
Cytat(jono @ 2004-11-21 19:31:34)
Odpowiedź znajdziesz tutaj

  1. <?php
  2.  
  3. // przed tą linią nie możesz nic wyświetlić, nawet spacji. Więc jak wywali błąd, \"Headres already sent...\" to znaczy, że coś wyświetliłeś.
  4.  
  5. header(&#092;"Location: http://www.example.com/\"); 
  6.  
  7. ?>

Wtedy daj na samym początku piku:
ob_start();

i na końcu pliku:
ob_end_flush();

I nie wyświetli ci się taka informacja.
Majcok12
Tak wiec spytam jeszcze raz ale moze inaczej.
Czy w ogole mozna odswiezyc strone (nie chodzi mi o przekierowanie)?.

pzdr
goldmann
Cytat(Majcok12 @ 2004-11-22 14:15:23)
Czy w ogole mozna odswiezyc strone (nie chodzi mi o przekierowanie)?.

oczywiście, że można, tak:

  1. <?php
  2.  
  3. function window_refresh()
  4. {
  5. echo &#092;"<script type=\"text/javascript\" language=\"JavaScript\">n<!--nwindow.location = 'index.php';n-->n</script>n\";
  6. }
  7.  
  8. ?>


a następnie wywyołujesz w miejscu gdzie chcesz odświeżyć stronę window_refresh()
Majcok12
Cytat(goldmann @ 2004-11-22 15:29:38)
Cytat(Majcok12 @ 2004-11-22 14:15:23)
Czy w ogole mozna odswiezyc strone (nie chodzi mi o przekierowanie)?.

oczywiście, że można, tak:

  1. <?php
  2.  
  3. function window_refresh()
  4. {
  5.     echo &#092;"<script type=\"text/javascript\" language=\"JavaScript\">n<!--nwindow.location = 'index.php';n-->n</script>n\";
  6. }
  7.  
  8. ?>


a następnie wywyołujesz w miejscu gdzie chcesz odświeżyć stronę window_refresh()

Jak zauwazylem to ta funkcja robi to samo co header(location: index.php), a jak w niej wpisze np. register.php to przejdzie do tej strony.
Zreszta to by wystarczylo gdyby mi w ogole to dzialalo
Kod:
  1. <?
  2. error_message(&#092;"News zostal zaktualizowany\");
  3. echo &#092;"<script type=\"text/javascript\" language=\"JavaScript\">n<!--nwindow.location = 'index.php?id=$_GET[id]&id_commnts=$_GET[id_commnts]&action=v_r';n-->n</script>n\"; 
  4. //lub 
  5. error_message(&#092;"News zostal zaktualizowany\");
  6. header(&#092;"Location: index.php .?id=$_GET[id]&id_commnts=$_GET[id_commnts]&action=v_r\"); //czy jakos tak
  7.  
  8. function error_message($msg) {
  9.  
  10.  echo &#092;"<script>alert(\"$msg\");history.go(-1)</script>\";
  11.  
  12. }
  13. ?>

Jednak po otwarciu sie okienka o po klikniecu OK powraca mi na strone ale juz jej nie przeladowywyje, tak jakby na koncu funkcji error_message() bylo exit; albo cos takiego

Pzdr
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.