![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 11 Dołączył: 1.01.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Tak wygląda fragment strony odpowiedzialny za logowanie:
Kod if(!$_SESSION['login']){ echo "<form action=\"log/login.php\"> <table width=\"100\" border=\"0\"> <tr> <td><font style=\"color:white; font-size:11px;\">Login:</font></td> <td><input type=\"text\" size=\"12\" name=\"login\" style=\"font-family:Tahoma; color:#337FBD; font-size:11px;\" /></td> </tr> <tr> <td><font style=\"color:white; font-size:11px;\">Hasło:</font></td> <td><input type=\"password\" name=\"haslo\" size=\"12\" style=\"color:#337FBD; font-size:11px;\" /></td> </tr> <tr> <td colspan=\"2\"><center><input type=\"submit\" style=\"font-family:Arial; font-size:11px;\" value=\"Zaloguj się\" /></center></td> </tr> </table> </form>"; }else{ echo "<a href=\"log/logout.php\">Wyloguj się</a>"; } Tu mam do was pytanie: czemu nawet jak użytkownik jest zalogowany nie pojawia mi się napis "Wyloguj się"? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 420 Pomógł: 44 Dołączył: 22.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 11 Dołączył: 1.01.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Niestety nie pomogło (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
mam na początku session_start() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 420 Pomógł: 44 Dołączył: 22.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
To pokaż więcej kodu bo z warunkiem jest ok pewnie jakas literówka czy coś
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 11 Dołączył: 1.01.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Odwołanie do sesji wygląda tak:
Kod session_start(); $login = $_SESSION['login']; więc chyba nie ma mowy o literówce |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 415 Pomógł: 46 Dołączył: 26.05.2007 Skąd: Sandomierz Ostrzeżenie: (0%) ![]() ![]() |
Mam takie pytanie? Co do jest?
Tutaj przypisujesz do $login wartość $_SESSION[login] ... nie odwrotnie ... a jednak wydaje mi się, żę ty tak myślisz ... Czy $_SESSION[login] ma jakąś wartość? Wątpie ... i pokaż WIĘCEJ KODU |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 420 Pomógł: 44 Dołączył: 22.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
nie wyświetla się "wyloguj się" ponieważ zawsze jest spełniony warunek tzn niema zmiennej sesji więdz lepiej pokaż plik login.php bo to co przesłałeś to chyba nie jest zainicjowanie sesji a jeśli jest to musi być na odwrót do zmiennej sesji zapisujesz zmienną login a nie na odwrut
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 11 Dołączył: 1.01.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Plik login.php wygląda tak:
Kod <?php
session_start(); $_POST['$login'] = strip_tags($_POST['$login']); $_POST['$haslo'] = strip_tags($_POST['$haslo']); $_POST['$login'] = trim($_POST['$login']); $_POST['$haslo'] = trim($_POST['$haslo']); $_POST['$login'] = addslashes($_POST['$login']); $_POST['$haslo'] = addslashes($_POST['$haslo']); $_POST['$login'] = htmlspecialchars($_POST['$login']); $_POST['$haslo'] = htmlspecialchars($_POST['$haslo']); $pol = @mysql_connect("localhost","root","krasnal"); echo $login; if (!$pol) { echo "nie można się połączyć z bazą danych!"; exit; } $wyb = @mysql_select_db("mojabaza"); if (!$wyb) { echo "nie można wybrać bazy danych!"; exit; } $haslo = sha1($haslo); $zap = "SELECT * FROM `uzytkownicy` WHERE login='$login' AND haslo='$haslo'"; $wyn = @mysql_query($zap); print mysql_error(); $ile = @mysql_num_rows($wyn); if ($ile=="1") { $tekst = "Logowanie powiodło się! $zap"; $przenies = "<meta http-equiv=\"Refresh\" content=\"1; strona.php\">"; $_SESSION['login'] = $login; $_SESSION['haslo'] = $haslo; $zap = "SELECT * FROM `uzytkownicy` WHERE login='$login' AND haslo='$haslo'"; $wyn = mysql_query($zap); while($wiersz = mysql_fetch_row(($wyn))){ $img = $wiersz[3]; } }else{ $tekst = "Logowanie nie powiodło się! $login $haslo"; } /*zalogowani użytkownicy*/ $q = mysql_query('select * from zalogowani;'); if(mysql_num_rows($q)==12){ $q = mysql_query('delete from zalogowani where login = "'.$login.'";'); if(mysql_affected_rows($q)==0){ $q = mysql_query('delete from zalogowani order by id ASC limit 1'); } } $q = mysql_query('insert into zalogowani(login, img) VALUES("'.$login.'","'.$img.'");'); mysql_close($pol); echo $tekst; ?> |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 415 Pomógł: 46 Dołączył: 26.05.2007 Skąd: Sandomierz Ostrzeżenie: (0%) ![]() ![]() |
$_POST['$login']; co to w ogole jest? jak już to $_POST['login'] ... bo tamto i tak jest puste ...
Po drugie ... co Ci zwraca $login? Bo jak masz wylączone register_globals to jest puste ... poza tym, nie widzę, w pliku przypisania do $login = $_POST['login'], więc raczej jest puste ... zawsze korzystaj z $_POST[] ... nie z krótkich nazwa, czy jak to zwał ... To samo z hasłem ... $haslo = sha1($haslo); moim zdaniem mieszasz tutaj pustą zawartość (czyt. '') ... Poza tym ... $ile=="1", czy jedynka musi być konwertowana na string skoro jest w int? $ile == 1, a raczej $ile > 0 Zamotałeś strasznie ten kod =) |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 11 Dołączył: 1.01.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
decha-design nie bardzo cię zrozumiałem. Poniżej jest nowy kod.
Kod <?php session_start(); $_POST['$login'] = strip_tags($_POST['$login']); $_POST['$haslo'] = strip_tags($_POST['$haslo']); $_POST['$login'] = trim($_POST['$login']); $_POST['$haslo'] = trim($_POST['$haslo']); $_POST['$login'] = addslashes($_POST['$login']); $_POST['$haslo'] = addslashes($_POST['$haslo']); $_POST['$login'] = htmlspecialchars($_POST['$login']); $_POST['$haslo'] = htmlspecialchars($_POST['$haslo']); $pol = @mysql_connect("localhost","root","krasnal"); if (!$pol) { echo "nie można się połączyć z bazą danych!"; exit; } $wyb = @mysql_select_db("mojabaza"); if (!$wyb) { echo "nie można wybrać bazy danych!"; exit; } $_POST['$haslo'] = sha1($_POST['$haslo']); $zap = 'SELECT * FROM `uzytkownicy` WHERE login="'.$_POST['$login'].'" AND haslo="'.$_POST['$haslo'].'"'; $wyn = @mysql_query($zap); print mysql_error(); $ile = @mysql_num_rows($wyn); if ($ile>1) { $tekst = "Logowanie powiodło się! $zap"; $przenies = "<meta http-equiv=\"Refresh\" content=\"1; strona.php\">"; $_SESSION['login'] = $_POST['$login']; $_SESSION['haslo'] = $_POST['$haslo']; }else{ $tekst = "Logowanie nie powiodło się! ".$_POST['$login']." ".$_POST['$haslo']; } echo $tekst; ?> Jednak teraz nie mogę się zalogować, bo zmienna $login jest pusta. Ten post edytował sweter 10.01.2009, 15:46:12 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 415 Pomógł: 46 Dołączył: 26.05.2007 Skąd: Sandomierz Ostrzeżenie: (0%) ![]() ![]() |
omg ... nie $_POST['$login'] a $_POST['login']! i alternatywnie do hasła ...
a najlepiej to zrób sobie print_r($_POST); i zobacz co zwraca (IMG:http://forum.php.pl/style_emoticons/default/sleep.gif) ' |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 11 Dołączył: 1.01.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
OK, uporządkowałem cały kod. Oto plik login.php:
Kod <?php session_start(); $login = strip_tags(trim(addslashes(htmlspecialchars($_POST['login'])))); $haslo = strip_tags(trim(addslashes(htmlspecialchars($_POST['haslo'])))); $pol = @mysql_connect("localhost","root","krasnal"); if (!$pol) { echo "nie można się połączyć z bazą danych!"; exit; } $wyb = @mysql_select_db("siedlczanin"); if (!$wyb) { echo "nie można wybrać bazy danych!"; exit; } $_POST['haslo'] = sha1($_POST['haslo']); if($_POST['haslo']!=NULL AND $_POST['login']!=NULL){ $zap = "SELECT * FROM `uzytkownicy` WHERE login='$login' AND haslo=$haslo"; $wyn = @mysql_query($zap); print mysql_error(); $ile = @mysql_num_rows($wyn); if ($ile==1) { $tekst = "Logowanie powiodło się!<br>$zap<br>$login"; $_SESSION['login'] = $login; }else{ $tekst = "Logowanie nie powiodło się! <br>$login<br>$haslo<br> $zap"; } } echo $tekst; print_r($_POST); ?> Jednak dalej nie działa mi if, o którym wspomniałem na początku. Nawet jeżeli wpisuję przed if'a "print_r($_SESSION)", to nie wyświetla mi się nic(nawet samo "Array()"!). A może ma znaczenie to, że ten plik z if'em jest zaincludowany (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 420 Pomógł: 44 Dołączył: 22.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Najpierw robisz
póżniej
a do bazy pytasz sieę
zamień drógi kod na
powinno pomóc poprustu inną zmieną haszujesz a inną dajesz w zapytaniu acha i zapomniałem po shaszowaniu zmienna hasło jest stringiem więc powinno być
zmienna w cudzysłowiu i umnie działa Ten post edytował patryczakowy 10.01.2009, 21:32:48 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 11 Dołączył: 1.01.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Ok, już sobie poradziłem z problemem w login.php.
Jednak wracając do głównego tematu tego wątku: zauważyłem, że problem z tą pętlą: Kod <?php if(!isset($_SESSION['login'])){ ?> jest taki, że znajduje się ona w zaincludowanym pliku, a tam sesje nie sięgają. Jak to naprawić? |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 415 Pomógł: 46 Dołączył: 26.05.2007 Skąd: Sandomierz Ostrzeżenie: (0%) ![]() ![]() |
Mam takie pytanie ...
Czemu ma to slużyć? skoro póżniej jest ... więc zmienna $hasło ma przypisaną wartość po przerobieniu przez te funkcje, a $_POST['haslo'] jest wymieszane przy pomocy sha1 Zapamiętaj $haslo nie równa się $_POST['haslo'] ... chyba, że przypiszesz $hasło = $_POST['haslo'] i będziesz korzystal poźniej tylko z $haslo, a nie na przemian bo tak sobie umyślałeś ... Powinno być
A najlepiej zrób to w funkcji, aby nie przepisywać tego ponownie dla loginu etc. i wtedy $_SESSION['login'] = $_POST['login'] ... i powinno działać (IMG:http://forum.php.pl/style_emoticons/default/sleep.gif) ' Ten post edytował decha-design 10.01.2009, 21:53:19 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 11 Dołączył: 1.01.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Jak już napisałem:
Cytat Ok, już sobie poradziłem z problemem w login.php.
Jednak wracając do głównego tematu tego wątku: zauważyłem, że problem z tą pętlą: Kod <?php if(!isset($_SESSION['login'])){ ?> jest taki, że znajduje się ona w zaincludowanym pliku, a tam sesje nie sięgają. Jak to naprawić? |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 415 Pomógł: 46 Dołączył: 26.05.2007 Skąd: Sandomierz Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 11 Dołączył: 1.01.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
jak już napisałem, ale dla większej pewności powtórzę: Z PLIKIEM LOGIN.PHP JUŻ SOBIE PORADZIŁEM.
Sesje mi działają i jest prawie cacy, bo jedynie warunek Kod <span class="postcolor"><?php if(!isset($_SESSION['login'])){ ?></span> nie może zostać spełniony, bo jest w zaincludowanym pliku. Inaczej mówiąc mam sobie plik strona.php w którym jest Kod session_start(); $login = $_SESSION['login']; /* Zmienna $_SESSION['login'] zawiera wartość! */ Dopiero tutaj zaczynają się problemy, bo do powyższego pliku podłączyłem za pomocą funkcji incluce_once() plik logowanie.php, w którym jest warunek if, który nie chce mi działać. W pliku strona.php na chwilę podmieniłem zamiast funkcji include_once() if'a i okazało się , że wszystko gra! Czyli mój problem ogranicza się do zwiększenia zasięgu zmiennej $_SESSION['login'], tak aby była dostępna w pliku logowanie.php (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 420 Pomógł: 44 Dołączył: 22.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
w każdym pliku możesz dać session_start(); i na pewno będzie wszędzie widoczna
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 415 Pomógł: 46 Dołączył: 26.05.2007 Skąd: Sandomierz Ostrzeżenie: (0%) ![]() ![]() |
w pliku logowanie.php daj session_start() ... również ...
Powinno pomóc, bo czasami nie wystarczy w nadrzędnym pliku ... w includowanych też muszą być I nadal nie rozumiem tego $login = $_SESSION['login']; ... skoro nie korzystasz z $login ... |
|
|
![]()
Post
#21
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 11 Dołączył: 1.01.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat w pliku logowanie.php daj session_start() ... również ... Powinno pomóc, bo czasami nie wystarczy w nadrzędnym pliku ... w includowanych też muszą być Niestety nie pomogło (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Cytat I nadal nie rozumiem tego $login = $_SESSION['login']; ... skoro nie korzystasz z $login ... To powinno być samo $_SESSION['login']? Ten post edytował sweter 11.01.2009, 10:32:02 |
|
|
![]()
Post
#22
|
|
Grupa: Zarejestrowani Postów: 415 Pomógł: 46 Dołączył: 26.05.2007 Skąd: Sandomierz Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#23
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 11 Dołączył: 1.01.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Ale teraz, bez względu na to, czy jestem zalogowany, czy nie, ciągle mi się pojawia to co jest za else, czyli "Wyloguj się"
(IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Ten post edytował sweter 11.01.2009, 11:41:28 |
|
|
![]()
Post
#24
|
|
Grupa: Zarejestrowani Postów: 415 Pomógł: 46 Dołączył: 26.05.2007 Skąd: Sandomierz Ostrzeżenie: (0%) ![]() ![]() |
sorki, źle Ci podałem ... zapomniałem juz jaką masz tam strutkure tego skryptu ... usuń ! z warunku ...
|
|
|
![]()
Post
#25
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 11 Dołączył: 1.01.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 10:02 |