![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 0 Dołączył: 26.07.2011 Ostrzeżenie: (20%)
|
To mój plik index.php -> ten fragment kodu będe dodawał też do wszystkich innych by móc na każdej się wylogować - logiczne
ale teraz mam właśnie problem z (wy)logowaniem, bo gdy się zaloguje to jest napisane: "Nie jesteś zalogowany i link do zaloguj się" odwiedzam link login.php, register.php i z obu przekierowuje na główną, na znak tego że jestem zalogowany. Co nie gra?
Podać więcej szczegółów? Jeśli coś potrzeba, pytajcie, dodam. |
|
|
|
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Czy aby napewno przed tym kodem startujesz sesję? (session_start()) poza tym session_destroy() w twoim kodzie 100% wystarczy samo
Ten post edytował Sephirus 27.10.2011, 08:15:23 -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
|
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%)
|
Cytat przyjrzałbym się temu zapytaniu sql bo nie jestem pewien czy podczas sprawdzania $_SESSION nie jest pusta przez poprzednie funkcję - nie pamiętam czy session_destroy jej nie czyści czasem. Czyści. session_destroy wykonaj na samym końcu. Dodatkowo zmień to: Kod if(@$_GET['wyloguj']=='tak') na coś takiego: Kod if(isset($_GET['wyloguj'])) Nie przekazujesz wartości tej zmiennej nigdzie dalej, jedynie sprawdzasz czy istnieje, więc jak znalazł nadaje się tutaj isset. Tłumienie błędów przy zastosowaniu małpy (@) jedynie spowalnia twój skrypt. Dodatkowo, instrukcja warunkowa to nie tylko if/else można też użyć tego tak: Kod if(warunek)
{ //... } elseif(warunek2) { //... } else { //... } |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 0 Dołączył: 26.07.2011 Ostrzeżenie: (20%)
|
Ok, męcze się od samego rana, w końcu zrobiłem szybkie logowanie na głównej. I działa!
Ma to tylko taką wadę że po zalogowaniu pokazuje się "jesteś zalogowany", ale nie znika formularz, kombinowałem z if'ami i else'ami, ale nie mogę jakoś tego echa z formularzem wcisnąć tak by znikało po poprawnym zalogowaniu.
Będe wdzięczny za wskazówkę, być może źle kombinowałęm z tymi ifami... , Poprostu podaj propozycję jak powinien wyglądać ten kod i to echo które będzie znikać. Taki to gotowiec,że musiałem całość przerobić. Poza tym jeśli ktoś widzi jakiś błąd w tym kodzie, może można coś skrócić (lub zabezpieczyć, co ważne) proszę mi zwrócić uwagę. Ten post edytował Tho 27.10.2011, 10:40:24 |
|
|
|
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%)
|
Generalnie to straszny śmietnik robisz w kodzie, sklejasz wszystko do kupy, też tak kiedyś robiłem, jak mi się wydawało że im mniej spacji/enterów tym szybciej strona będzie mi działać, a jak się okazuje ani spacje ani entery nie mają na to najmniejszego wpływu, one są wyłącznie dla nas żeby ten kod był czytelny.
Zamiast cudzysłowia używaj apostrofów, nie będziesz musiał ich potem escapować w kodzie html: Kod <?php if('POST' == $_SERVER['REQUEST_METHOD']) { if($login == $logi['login'] && $pass == $logi['password'] && $logi['potwierdzenie'] == 1) { $_SESSION['zalogowany'] = 1; $_SESSION['login'] = $login; echo 'Witaj, '.$_SESSION['login'].' jesteś zalogowany, <a href="?wyloguj"> Wyloguj się! </a> | <a href="chnpass.php">Zmień hasło!</a>'; } elseif($login == $logi['login'] && $pass == $logi['password'] && $logi['potwierdzenie'] == 0) { echo '<div id="blad">Twoje konto nie zostało jeszcze aktywowane</div>'; } else { echo '<div id="blad">Podałeś błędny login lub hasło</div>'; } } Nie rozumiem, czemu tłumisz błędy, nie tłum ich, bo to przynosi więcej szkody niż pożytku. Żeby ci formularz logowania zniknął, obejmij go całego warunkiem który sprawdza czy dana osoba jest zalogowana. Jeżeli jest, to nie wyświetli. No i dodatkowo, musisz przeładować stronę żeby ciasteczko się zapisało i żeby system mógł je odczytać, do tego potrzebne jest jedno dodatkowe przeładowanie strony. |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 0 Dołączył: 26.07.2011 Ostrzeżenie: (20%)
|
Ok, dzięki za pomoc. Więc tak, zamieniłeś na apostrofy(sam chciałem też to zrobić ) wywaliłeś tłumienie błędów, doradziłeś sformatowanie kodu, co też miałem zrobić, dodałeś if('POST' == $_SERVER['REQUEST_METHOD']) zamiast if(@$_POST['form']==true) - w czym to ma być lepsze?
Lecz gdy teraz wysyłam formularz, niby jestem zalogowany(bo przekierowuje z logowanie.php na index), ale formularz jest jak dla zalogowanego, no i nawet nie wyświetla "witaj _login_ jesteś zalogowany", a przedtem działało... Jeszcze tylko pokaż dokładnie jak to zrobić z tym formularzem i dlaczego nie działa a działało na moim kodzie "na brudno". Będe naprawde wdzięczny(jak już mówiłem plusy rozdam gdy zadziała to jak należy Tak czy inaczej, coraz więcej rozumiem, dzięki. UPDATE: Mam dwa sektory php pierwszy na samym początku by nie wywalało błędu z powodu ob_start,
I drugi, w miejscu gdzie chcę by wyświetlały mi się komunikaty i formularz:
No i pod spodem formularz w html, ale jakgo wkomponować by znikał? Proszę... 6 godzina z małymi przerwami i dalej nic.... |
|
|
|
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%)
|
Cytat dodałeś if('POST' == $_SERVER['REQUEST_METHOD']) zamiast if(@$_POST['form']==true) - w czym to ma być lepsze? możesz równie dobrze zapisać to tak: Kod if(isset($_POST) Tyle że to pierwsze rozwiązanie jest bardziej uniwersalne, i IMO czytelne. Metody przesyłania danych na serwer to nie tylko post/get jest jeszcze put/head. Cytat Lecz gdy teraz wysyłam formularz, niby jestem zalogowany(bo przekierowuje z logowanie.php na index), ale formularz jest jak dla zalogowanego, no i nawet nie wyświetla "witaj _login_ jesteś zalogowany", a przedtem działało... ja tam tylko zmieniłem cudzysłów na apostrofy i skasowałem małpy tłumiące błędy. Nic więcej w sumie nie zrobiłem Nie widzę całości kodu, ciężko jest tak mówić co działa, co nie działa, jeżeli się tego kodu nie widzi i się można tylko domyślać.. ten fragment: Kod $login = $_POST['login']; $pass = sha1($_POST['password']); $log = mysql_query("SELECT * FROM users WHERE login = '$login'") or die (mysql_error()); $logi = mysql_fetch_assoc($log); który masz umieszczony przed sprawdzaniem czy dane post zostały przesłane. Ogólnie to cały kod moim zdaniem jest do poprawy, zaczynając od zapytania którym się logujesz. Nie sprawdzasz loginu + hasła, sprawdzasz jedynie login (każdy kto zna login może się na dane konto zalogować Cytat No i pod spodem formularz w html, ale jakgo wkomponować by znikał? Proszę... 6 godzina z małymi przerwami i dalej nic.... ten formularz musi być objęty warunkiem, przykładowo: Cytat if(!$zalogowany)
{ //... kod formularza logowania } else { //... jesteś zalogowany! } Ten post edytował by_ikar 27.10.2011, 14:22:58 |
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 0 Dołączył: 26.07.2011 Ostrzeżenie: (20%)
|
Ok, całość kodu php:
(nie licząc innych plików, zapomniane_hasło itd, które to są tutaj) 1 sektor:
2 sektor: (+formularz pod spodem)
No i gdzie wcisnąć ten formularz? Jak polecasz to rozwiązać? Może dać sobie masz jakieś dobre gotowe rozwiązanie? Gotowiec, lub samemu umiesz to wykończyć? Nieprawdopodobne siedzę nad tym od 7 rano z małymi przerwami... i dalej się męcze... Na tym "skrypcie" się wzoruję to znaczy pobrałem i ciągle obrabiam... Może jest coś lepszego? Może TO? Może całkiem co innego? Ludzie, pomocy... Ok, plusy rozdane - wszystkim którzy próbowali pomóc. Nie ma chyba sensu dalej się z tym męczyć, po całym dniu syzyfowej pracy, kończe z tym rodzajem rejestracji, teraz testuje coś nowego To lepsze rozwiązanie, nieprawda? Jeśli chcesz pomóc pisz w tym temacie, czy naprawdę to aż tak skomplikowane, żeby nikt nie wiedział? Mówię nie o tym temacie, a o tym który podałem w linku powyżej. Ten temat można uznać za zakończony, ale naprawde bardzo proszę o pomoc w nowym. Ten post edytował Tho 27.10.2011, 19:39:33 |
|
|
|
![]() ![]() |
|
Aktualny czas: 20.08.2025 - 02:44 |