Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z logowaniem
Forum PHP.pl > Forum > Gotowe rozwiązania
asterix1983
Mam napisany skrypt logowania oparty na łączeniu się z bazą danych

Tabela z użytkownikami wygląda następująco:
  1. CREATE TABLE admin (
  2. login varchar(32),
  3. haslo varchar(32)
  4. );

wpis wygląda następująco :
  1. INSERT
  2. INTO adm<span style='color:orange'><span
  3. style='color:green'>in</span> VALUES ( 'admin',password('admin') );


i teraz admin.php
  1. <?php
  2. // dołączenie plików funkcji tej aplikacji
  3. require_once('funkcje_plyty_lista.php'); 
  4.  
  5.  
  6.  
  7. if ($HTTP_POST_VARS['login'] && $HTTP_POST_VARS['haslo'])
  8. //  próba logowania
  9. {
  10.  
  11.     $login = $HTTP_POST_VARS['login'];
  12.     $haslo = $HTTP_POST_VARS['haslo'];
  13.  
  14.     if (loguj($login, $haslo))
  15.     {
  16.       // jeżeli w bazie danych, zgłoszenie identyfikatora użytkownika
  17.       $HTTP_SESSION_VARS['uzyt_admin'] = $login;
  18.     }  
  19.     else
  20.     {
  21.       // niepomyślne logowanie
  22.       tworz_naglowek_html('Problem:');
  23.       echo 'Zalogowanie niemożliwe.Należy być zalogowanym, aby przeglšdać tę stronę.<br />';
  24.       tworz_html_url('logowanie.php', 'Logowanie');
  25.       tworz_stopke_html();
  26.       exit;
  27.     }      
  28. }
  29.  
  30. tworz_naglowek_html('Administracja');
  31. if (sprawdz_uzyt_admin())
  32.   wyswietl_menu_admin();
  33. else
  34.   echo 'Brak autoryzacji do wejœcia na obszar administracyjny.';
  35.  
  36. tworz_stopke_html();
  37.  
  38. ?>


do tego funkcje_bazy_system.php
  1. <?php
  2. //funkcje bazy danych 
  3.  
  4. function lacz_bd()
  5. {
  6.    $wynik = mysql_pconnect('localhost', 'root', 'krasnal'); 
  7.    if (!$wynik)
  8.       return false;
  9.    if (!mysql_select_db('biblio_media'))
  10.       return false;
  11.  
  12.    return $wynik;
  13. }
  14.     
  15. ?>    


do tego funkcje_uwierz.php

  1. <?php
  2.  
  3. require_once('funkcje_bazy_system.php');
  4.  
  5. function loguj($login, $haslo)
  6. // sprawdzenie nazwy użytkownika i hasła w bazie danych
  7. // jeżeli tak, zwraca true
  8. // w przeciwnym wypadku false
  9. {
  10.   // łączenie z bazą danych
  11.   $lacz = lacz_bd();
  12.   if (!$lacz)
  13.     return 0;
  14.  
  15.   $zapytanie = 'select * from admin '
  16.                .&#092;"where login='$iduzytkownika' \"
  17.                .&#092;" and haslo=password('$haslo')\";
  18.   $wynik = mysql_query($zapytanie);
  19.   if(mysql_num_rows($wynik) > 0)
  20.   {
  21.     // jeżeli dane są w bazie zarejestrowanie identyfikatora użytkownika
  22.     $HTTP_SESSION_VARS['uzyt_admin'] = $login;
  23.   }
  24. }
  25.  
  26. function sprawdz_uzyt_admin()
  27. // sprawdzenie zalogowanie i powiadomienie, jeżeli nie
  28. {
  29.   global $HTTP_SESSION_VARS;
  30.   if (isset($HTTP_SESSION_VARS['uzyt_admin']))
  31.     return true;
  32.   else
  33.     return false;
  34. }
  35.  
  36. function zmien_haslo($login, $stare_haslo, $nowe_haslo)
  37. // zmiana hasła użytkownika
  38. // zwraca true lub false
  39. {
  40.   // jeżeli stare hasło prawidłowe
  41.   // zmiana hasła na nowe_haslo i zwraca true
  42.   // w przeciwnym wypadku false
  43.   if (loguj($login, $stare_haslo))
  44.   {
  45.     if (!($lacz = lacz_bd()))
  46.       return false;
  47.     $wynik = mysql_query( &#092;"update admin 
  48.                             set haslo = password('$nowe_haslo')
  49.                             where login = '$login'&#092;");
  50.     if (!$wynik)
  51.       return false;  // brak zmian
  52.     else
  53.       return true;  // zmiana pomyślna
  54.   }
  55.   else
  56.     return false; // nieprawidłowe stare hasło
  57. }
  58.  
  59.  
  60. ?>


i skrypt logowanie.php

  1. <?php
  2.  
  3.  
  4.  require_once('funkcje_plyty_lista.php');
  5.  tworz_naglowek_html('Administracja');
  6.  
  7.  wyswietl_form_log();
  8.  
  9.  tworz_stopke_html();
  10. ?>


i jeszcze do tego dwie funkcje (więcej nie podaje bo nie ma takiej potrzeby)
w pliku funkcje_wyswietl.php

  1. function wyswietl_form_log()
  2. {
  3.   // wyświetlenie formularza logowania
  4. ?>
  5.   <form method=post action=\"admin.php\">
  6.   <table bgcolor=#cccccc>
  7.    <tr>
  8.      <td>Nazwa użytkownika:</td>
  9.      <td><input type=text name=login></td></tr>
  10.    <tr>
  11.      <td>Hasło:</td>
  12.      <td><input type=password name=haslo></td></tr>
  13.    <tr>
  14.      <td colspan=2 align=center>
  15.      <input type=submit value=\"Logowanie\"></td></tr>
  16.    <tr>
  17.  </table></form>
  18. <?php
  19. }
  20.  
  21. function wyswietl_menu_admin()
  22. {
  23. ?>
  24. <br />
  25. <a href=\"indeks.php\">Główna strona</a><br />
  26. <a href=\"dodaj_kat_form.php\">Dodanie nowej kategorii</a><br />
  27. <a href=\"dodaj_plyty_form.php\">Dodanie nowej płyty</a><br />
  28. <a href=\"zmiana_hasla_form.php\">Zmiana hasła administratora</a><br />
  29. <a href=\".../news/panel_news.php\">Panel newsów administratora</a><br />
  30. <?php
  31.  
  32. }


No i po próbie zalogowania
Login: admin
Hasło: admin

pisze mi komunikat :

Zalogowanie niemożliwe.Należy być zalogowanym, aby przeglądać tę stronę.


JUŻ nie wiem gdzie mam błąd w tym skrypcie, mi się wydaje że jest dobrze a nie jest przecierz.
Proszę o pomoc withstupidsmiley.gif
bo bez tego nie zrobie nic dalej a czas mnie nagli sadsmiley02.gif
Dodam że mysql działa poprawnie bo inne projekciki na bazie mi chodzą

Moje przypuszczenie jest takie że coś sesja mi nie chce działać poprawnie ale oczywście mogę się mylyć

Pleas help me exclamation.gif!

------------------------------------
P.S
Teraz mi doszło jeszcze coś takiego:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\usr\krasnal\www\biblia\system\funkcje_bazy_system.php:17) in c:\usr\krasnal\www\biblia\system\admin.php on line 5

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\usr\krasnal\www\biblia\system\funkcje_bazy_system.php:17) in c:\usr\krasnal\www\biblia\system\admin.php on line 5

i to też nie wiem dlaczego angrysmiley.gif
nospor
Na pierwszy rzut oka to w funkcji loguj() masz coś takiego:
$zapytanie = 'select * from admin '
."where login='$iduzytkownika' "
." and haslo=password('$haslo')";
Do funkcji zapodajesz $login i $haslo, a w zapytaniu ni stąd ni zowąd jest login=$iduzytkownika. To się zdecyduj, albo login albo id
asterix1983
to już poprawiłem ale dalej nie działa

problem z komunikatem o błędzie:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\usr\krasnal\www\biblia\system\funkcje_bazy_system.php:17) in c:\usr\krasnal\www\biblia\system\admin.php on line 5

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\usr\krasnal\www\biblia\system\funkcje_bazy_system.php:17) in c:\usr\krasnal\www\biblia\system\admin.php on line 5

też już pozbyłem się po przez dodanie na początek ob_start();

ale dalej nie chce działać
nospor
a co nie dziala? pokaż nowy kod i powiedz czy jakies byki wywala
asterix1983
dodałem w admin.php na początku ob_start();

w funkcji loguj() zmieniłem zapytanie na
$zapytanie = 'select * from admin '
."where login='$login' "
." and haslo=password('$haslo')";


a byków już żadnych nie wywala a logować się nie chce
nospor
Trochę więcej danych.
Dalej ci wywala komunikat:?
Zalogowanie niemożliwe.Należy być zalogowanym, aby przeglądać tę stronę.

Jak tak to albo się nie łączy z bazą, bo wtedy zwracasz 0. Daj echo 'cos' po polączeniu z bazą. Jak się nie wyswietli to się z bazą nie łączy. Jesli tak to:
daj echo $login; echo $haslo i zobacz czy otrzymales dobre dane z formularza. Jesli jest dobrze to w bazie masz inne dane
asterix1983
a więc łączenie z bazą działa, dane też sprawdziłem po przez programik mysql query browser więc zapytanie jest dobrze napisane


a komunikat
Zalogowanie niemożliwe.Należy być zalogowanym, aby przeglądać tę stronę.

dalej wywala
nospor
A, już widzę błąd.
Komunikat ten ci wywala, gdy funkcja loguj zwróci 0 lub nic. Tobie właśnie zwraca nic, gdyż gdy login i hasło są okej, to nic nie zwracasz. Spróbuj tak:
  1. <?php
  2.  
  3. function loguj($login, $haslo)
  4. // sprawdzenie nazwy użytkownika i hasła w bazie danych
  5. // jeżeli tak, zwraca true
  6. // w przeciwnym wypadku false
  7. {
  8. // łączenie z bazą danych
  9. $lacz = lacz_bd();
  10. if (!$lacz)
  11. return 0;
  12.  
  13. $zapytanie = 'select * from admin '
  14.  .&#092;"where login='$iduzytkownika' \"
  15.  .&#092;" and haslo=password('$haslo')\";
  16. $wynik = mysql_query($zapytanie);
  17. if(mysql_num_rows($wynik) > 0)
  18. {
  19. // jeżeli dane są w bazie zarejestrowanie identyfikatora użytkownika
  20. $HTTP_SESSION_VARS['uzyt_admin'] = $login;
  21. return 1;
  22. }
  23. return 0;
  24. }
  25.  
  26. ?>
asterix1983
dalej ten sam komunikat

nie wiem dlaczego
nospor
Jak pisałem. Wywala ten komunikat gdy loguj() zwróci 0. Zwraca 0 w przypadku gdy się nie łączy (ale powiedziałeś że się łączy). Zwraca też zero, gdy pobrana liczba wierszy jest równa 0. Więc to musi być to.
Daj echo $zapytanie; To co ci wypisze wpisz se do swego czegość czym bazę obługujesz i zobacz czy ci zwróci wyniki. Inaczej nie wiem co może być.
asterix1983
dodałem
  1. <?php
  2. echo $zapytanie
  3. ?>
i odziwo zaczeło chodzić
bardzo dziwne ale działa i to najważniejsze

mam jeszcze jedno pytanie odnośnie komunikatu:

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\usr\krasnal\www\biblia\system\funkcje_bazy_system.php:18) in c:\usr\krasnal\www\biblia\system\dodaj_kat_form.php on line 5


dlaczego taki komunikat wyskakuje i jak pozbyć się problemu

bo szczeże mówiąc to wtedy szczeliłem funkcją ob_start() a tak na prawdę nie wiem dokładnie na czym jej działanie polega i czy działa ona w każdym miejscu gdzie jest zastosowana sesja (czyli likwiduje ten komunikat i robi jescze coś tam...) czy działa ona tylko przy pierwszym wywołaniu sesji

withstupidsmiley.gif

-----------------------------
Wielkie dzięki za pomoc początkującemu rolleyes.gif
nospor
Za bardzo tego nie kumam też. Na końcu skryptu gdzie było ob_start() masz dać bodajże ob_end_flush();
Był ten temat wiele razy na fourm, wystarczy poszukać.

A z tym echem to dziwne. Może poprostu dopiero wtedy ci się coś odświerzyło, może jakieś cacheowanie masz? Bo bez echa powinno też chodzić
asterix1983
W każdym razie chodzi i dziemki za pomoc

Poszukam zaraz po manualach i na forum coś o OB_START() i innych

Topic można zamknąć

offtopic.gif



---------------------------------------------------------------------
Głupi nie są ci co popełniają błędy tylko ci co popełniają te same błędy wielokrotnie withstupidsmiley.gif

Jeszcze raz dzienki z pomoc cool.gif
kowal1122
offtopic.gif offtopic.gif offtopic.gif offtopic.gif
popieram
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.