Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

php/sql - skrypt logowania

ojcio 03 Sty 2015 12:39 1041 20
  • #1 03 Sty 2015 12:39
    ojcio
    Poziom 17  

    Witam
    od kilku dni walczę z prostym panelem logowania w php kod którego użyłem pochodzi z internetu, jest nawet konsultowany na forum elektrody jako działający - niestety u mnie nie działa - po wpisaniu loginu i hasła oraz naciśnięciu 'login' nadal wyświetla się strona logowania, nie wyświetlają się żadne błędy...

    Kod: php
    Zaloguj się, aby zobaczyć kod

    0 20
  • #2 03 Sty 2015 13:02
    puz219
    Poziom 12  

    W sekcji body, po linijce
    <p>Witaj <? echo $_SESSION[‘uzytkownik’]; ?>! Jesteś zalogowany.</p>
    przed echo $message; dopisz print_r($_SESSION);
    i zobacz co się pojawi przed i po wpisaniu danych do logowania

    Poza tym, jak się nazywa Twoj plik index - index.html czy index.php?

    0
  • #3 03 Sty 2015 13:05
    mlewan
    Poziom 20  

    Zacznij od uzupełnienia fragmentu skryptu, który łączy się z bazą danych o komunikację błędów:

    np coś takiego:

    Kod: php
    Zaloguj się, aby zobaczyć kod


    i zobacz czy skrypt w ogóle łączy się z bazą. Potem dopiero szukaj dalej ;)

    0
  • #4 03 Sty 2015 15:30
    ojcio
    Poziom 17  

    puz219 napisał:
    W sekcji body, po linijce
    <p>Witaj <? echo $_SESSION[‘uzytkownik’]; ?>! Jesteś zalogowany.</p>
    przed echo $message; dopisz print_r($_SESSION);
    i zobacz co się pojawi przed i po wpisaniu danych do logowania

    Przed i po próbie logowania bez zmian:
    Witaj ! Jesteœ zalogowany.
    Array ( )
    Użytkownik:
    Hasło:
    puz219 napisał:

    Poza tym, jak się nazywa Twoj plik index - index.html czy index.php?

    Plik nazywa się main.php obecnie linijka wygląda następująco:
    header("location:main.php"); // Przekierowanie do strony main.php
    oba pliki znajdują się w folderze php_test
    mlewan napisał:
    Zacznij od uzupełnienia fragmentu skryptu, który łączy się z bazą danych o komunikację błędów:

    np coś takiego:

    Kod: php
    Zaloguj się, aby zobaczyć kod


    i zobacz czy skrypt w ogóle łączy się z bazą. Potem dopiero szukaj dalej ;)

    doklejałem już podobne polecenia - niestety bez zmian nie wyświetla żadnego błędu...

    0
  • #5 03 Sty 2015 15:35
    mlewan
    Poziom 20  

    A jaka wersja PHP, MySQL?

    0
  • #6 03 Sty 2015 15:42
    ojcio
    Poziom 17  

    mlewan napisał:
    A jaka wersja PHP, MySQL?

    MySQL 5.5
    PHP 5.3

    0
  • #7 03 Sty 2015 15:45
    mlewan
    Poziom 20  

    Sprawdzałeś phpinfo pod kątem rozszerzenia obsługującego MySQL?

    0
  • #8 03 Sty 2015 15:55
    ojcio
    Poziom 17  

    mlewan napisał:
    Sprawdzałeś phpinfo pod kątem rozszerzenia obsługującego MySQL?

    Nie i nawet nie orientuję się gdzie to sprawdzić. Korzystam z serwera nazwa.pl

    0
  • #9 03 Sty 2015 16:53
    puz219
    Poziom 12  

    wieczorem jak znajdę chwilkę czasu, to Ci to rozpiszę, bo ten skrypt jest źle napisany, na samym nawet poczatku masz session_start(), a zaraz pod tym session_destroy(), tak więc gdyby nawet reszta działała poprawnie, to nigdy się nie zalogujesz, bo już po wczytywaniu strony niszczy ona Twoja bieżącą sesję, wylogowując Cię.

    Kod: php
    Zaloguj się, aby zobaczyć kod


    Teraz powinno działać. W momencie, gdy jesteś zalogowany, dodałem Ci Kolego jeszcze przycisk umożliwiający wylogowanie użytkownika.

    Oczywiście wszystko będzie działało, jeżeli będzie połączenie z bazą danych SQL

    1
  • #10 03 Sty 2015 21:06
    ojcio
    Poziom 17  

    Działa trochę lepiej ale:
    "Nieprawidłowa nazwa użytkownika lub hasło"
    poniższa część kodu działa ok testowałem wyciągając dane z tabeli

    Kod: php
    Zaloguj się, aby zobaczyć kod


    poprzez dodanie
    Kod: php
    Zaloguj się, aby zobaczyć kod

    wyniki z tabeli prawidłowe.

    0
  • #11 03 Sty 2015 21:22
    puz219
    Poziom 12  

    jak masz zapisane hasła w bazie danych? jako wyrazy, czy coś takiego 21232f297a57a5a743894a0e4a801fc3 ?

    0
  • #12 03 Sty 2015 21:28
    ojcio
    Poziom 17  

    puz219 napisał:
    jak masz zapisane hasła w bazie danych? jako wyrazy, czy coś takiego 21232f297a57a5a743894a0e4a801fc3 ?

    Jedno mam jako md5 czyli tak jak powyżej, a drugie dla testu zapisałem jako zwykły tekst oczywiście na czas testu linię
    Kod: php
    Zaloguj się, aby zobaczyć kod

    zmieniałem na:
    Kod: php
    Zaloguj się, aby zobaczyć kod

    Bez efektu....

    0
  • #13 03 Sty 2015 21:34
    puz219
    Poziom 12  

    Zmień jeszcze linijkę gdzie jest $rezultat=... na:

    Kod: php
    Zaloguj się, aby zobaczyć kod
    , a jak to nie zadziała, to po tej linicje, gdzie jest $rezultat dodaj cos takiego:

    Kod: php
    Zaloguj się, aby zobaczyć kod
    ,odśwież stronę i podaj, co pisze po rezultat: u góry strony

    1
  • #14 03 Sty 2015 21:48
    ojcio
    Poziom 17  

    Nadal bez zmian...
    rezultat: 0

    0
  • #15 03 Sty 2015 22:09
    puz219
    Poziom 12  

    To oznacza, że to co wpisujesz w formularz nie pokrywa się z tym, co masz w bazie danych.

    Wielkość liter ma znaczenie, do tego polskie ogonki również.

    Przestudiuj jeszcze raz kod, może w którejś nazwie tabeli masz literówkę.

    A jak już będziesz pewien, że wszystko gra, to dodaj do bazy ręcznie uzytkownika admin, który ma hasło admin (md5 z admin to 21232f297a57a5a743894a0e4a801fc3) i wtedy spróbuj się zalogować przy użyciu tych danych, jak wtedy pokaże przy rezultacie 0, to wina lezy w nazewnictwie tabeli

    1
  • #16 03 Sty 2015 22:20
    ojcio
    Poziom 17  

    Jeden użytkownik to ABC i ma hasło 123 w md5, a drugi to 123 i ma hasło 123 nie kodowane
    Nazwa tabeli i pola się zgadzają
    Mam jeszcze pytanie jaka powinna być "Metoda porównywania napisów" domyślnie mam latin2_general_ci

    0
  • #17 03 Sty 2015 22:23
    puz219
    Poziom 12  

    najlepiej dać utf_general_ci

    wcześniej dawałeś:

    Kod: php
    Zaloguj się, aby zobaczyć kod


    Zrób screen tego, co Ci wyświetliło

    1
  • #18 03 Sty 2015 22:41
    ojcio
    Poziom 17  

    utf mam 16; 32; 8; 8mb4.....
    Poniżej wynik
    1ABC202cb962ac59075b964b07152d234b70 2123123

    0
  • #19 04 Sty 2015 12:35
    puz219
    Poziom 12  

    W miejscu, w którym mówiłem Ci, abyś dodał linię:

    Kod: php
    Zaloguj się, aby zobaczyć kod


    zmień ją na:

    Kod: php
    Zaloguj się, aby zobaczyć kod


    wpisz dane do logowania, kliknij login i pokaż co się wyświetliło

    1
  • #20 04 Sty 2015 19:55
    ojcio
    Poziom 17  

    wynik z kwerendy 1ABC202cb962ac59075b964b07152d234b70 2123123
    wynik ze skryptu rezultat: 0, user: ABC, pass: d41d8cd98f00b204e9800998ecf8427e Nieprawidłowa nazwa użytkownika lub hasło
    natomiast po usunięciu kodowania md5:
    rezultat: 0, user: 123, pass: Nieprawidłowa nazwa użytkownika lub hasło
    wynika z tego że problem leży w kodowaniu w ustawieniach bazy mam tylko jeden rodzaj md5...
    doczytałem się że wartość którą otrzymuję w wyniku wpisania hasła jest odpowiednikiem braku znaków- znaczy null
    ...
    1 błąd znalazłem
    $md5_haslo=md5($_POST[haslo’]); // Koduje hasło funkcją md5().
    $md5_haslo=md5($_POST['haslo']); // Koduje hasło funkcją md5().
    jest to nieprawidłowy znak cudzysłowu - prawdopodobnie wynik kodowania syntax
    po poprawieniu kodowanie jest prawidłowe
    Jednak po wciśnięciu loguj pojawia się:
    rezultat: 1, user: ABC, pass: 202cb962ac59075b964b07152d234b70
    Warning: Cannot modify header information - headers already sent by (output started at /home/domenaok/ftp/php_test/logowanie.php:32) in /home/domenaok/ftp/php_test/logowanie.php on line 35

    Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively in Unknown on line 0

    Poniżej zawartość pliku main.php oba pliki są w folderze php_test.

    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #21 06 Sty 2015 09:22
    puz219
    Poziom 12  

    Cytat:
    1 błąd znalazłem
    $md5_haslo=md5($_POST[‘haslo’]); // Koduje hasło funkcją md5().
    $md5_haslo=md5($_POST['haslo']); // Koduje hasło funkcją md5().
    jest to nieprawidłowy znak cudzysłowu - prawdopodobnie wynik kodowania syntax
    po poprawieniu kodowanie jest prawidłowe


    No widzisz, mówiłem Ci, żebyś dokładnie przejrzał skrypt, pod kątem błędów.

    Co do błędu, który teraz dostajesz, to jeżeli pliki main.php i logowanie.php sa w tym samym folderze, to zmień
    Kod: php
    Zaloguj się, aby zobaczyć kod

    na
    Kod: php
    Zaloguj się, aby zobaczyć kod


    I zmień też:
    Kod: php
    Zaloguj się, aby zobaczyć kod

    na
    Kod: php
    Zaloguj się, aby zobaczyć kod

    ponieważ funkcja session_is_registered() jest już całkowicie usunięta w nowszych wersjach PHP, tak więc jeżeli masz na serwerze >PHP 5.4.0, to ona nie będzie działać

    1