Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL]Problem z logowaniem
dml
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.01.2006

Ostrzeżenie: (0%)
-----


Witam,
Mam następujący (kolejny) problem:
Przerabiam kurs php z książki "PHP i MySql, Tworzenie Stron www, Vademecum profesjonalisty" i doszedłem do etapu tworzenia koszyka.
Przekopiowałem kod na serwer, utworzyłem bazę danych i bez problemów mogę pobierać dane z bazy, mam na myśli to że skrypty tworzą stronę w oparciu o informacje pobierane z bazy (umieszczone przeze mnie "ręcznie" przy użyciu phpMyAdmin) natomiast nie mogę zalogować się do sekcji administratora.
Skrypt wymaga włączonych "magic_quotes" - są one domyślnie włączone w konfiguracji.
Jedyne co przychodzi mi na myśl to "system porównywania" ustawiony w bazie na "latin2_general_ci",
skrypt logowania który wygląda następująco:

  1. <?php
  2.  
  3. // dołšczenie plików funkcji tej aplikacji
  4. require_once('funkcje_ksiazka_kz.php');
  5.  
  6.  
  7. if ($HTTP_POST_VARS['nazwa_uz'] && $HTTP_POST_VARS['haslo'])
  8. // właśnie nastšpiła próba logowania
  9. {
  10.  
  11.    $nazwa_uz = $HTTP_POST_VARS['nazwa_uz'];
  12.    $haslo = $HTTP_POST_VARS['haslo'];
  13.  
  14.    if (loguj($nazwa_uz, $haslo))
  15.    {
  16.      // jeżeli w bazie danych, zgłoszenie identyfikatora użytkownika
  17.      $HTTP_SESSION_VARS['uzyt_admin'] = $nazwa_uz;
  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. ?>

nie posiada żadnego kodowania znaków.
Krótko mówiąc - czy ustawienie porównania w bazie może być przyczyną problemu?

Z góry serdecznie dziękuję za pomoc.
Go to the top of the page
+Quote Post
czachor
post
Post #2





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


$HTTP_POST_VARS -> $_POST
$HTTP_SESSION_VARS -> $_SESSION
--> http://pl.php.net/manual/pl/reserved.variables.php
Go to the top of the page
+Quote Post
dml
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.01.2006

Ostrzeżenie: (0%)
-----


Serdecznie dziękuję za odpowiedź, niestety nie pomogło.
Jak pisałem jest to aplikacja koszyka na zakupy.
Skrypty działają prawidłowo po stronie klienta, tzn. można dokonywać wyboru i zakupu produktów, które to zamówienia prawidłowo są zapisywane do bazy danych, natomiast próba logowania do części administratora kończy się niepowodzeniem, czyli wygląda to na błąd popełniany podczas porównywania wpisanych danych podczas logowania z danymi z bazy (wyświetlony zostaje komunikat: "Zalogowanie niemożliwe.Należy być zalogowanym, aby przeglšdać tę stronę."). Oczywiście dane w bazie są identyczne z wpisywanymi w formularzu logowania.

  1. <?php
  2.  
  3. // dołšczenie plików funkcji tej aplikacji
  4. require_once('funkcje_ksiazka_kz.php');
  5.  
  6.  
  7. if ($_POST['nazwa_uz'] && $POST['haslo'])
  8. // właśnie nastšpiła próba logowania
  9. {
  10.  
  11.    $nazwa_uz = $_POST['nazwa_uz'];
  12.    $haslo = $_POST['haslo'];
  13.  
  14.    if (loguj($nazwa_uz, $haslo))
  15.    {
  16.      // jeżeli w bazie danych, zgłoszenie identyfikatora użytkownika
  17.      $SESSION['uzyt_admin'] = $nazwa_uz;
  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. ?>


Czy funkcja "password" użyta podczas dodawania danych do bazy może powodować tego typu problemy?

Proszę o sugestie gdzie szukać rozwiązania.

Pozdrawiam,
Dariusz Liszewski
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Szklana kula zawierająca w sobie opisy Twoich funkcji pojechała na Święta do rodziny w nibylandii.

Co to jest loguj? Co ona w ogóle sprawdza/zmienia?
Go to the top of the page
+Quote Post
dml
post
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.01.2006

Ostrzeżenie: (0%)
-----


Sorry, zapomniałem dodać ten skrypt. "loguj" to funkcja dołączona za pomocą "require_once('funkcje_ksiazka_kz.php')"
i wygląda następująco:

  1. <?php
  2.  
  3. require_once('funkcje_bazy.php');
  4.  
  5. function loguj($nazwa_uz, $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.  // sprawdzenie unikatowości nazwy użytkownika
  16.  $wynik = mysql_query("select * from admin
  17.                         where nazwa_uz='$nazwa_uz'
  18.                         and haslo = password('$haslo')");
  19.  if (!$wynik)
  20.     return 0;
  21.  
  22.  if (mysql_num_rows($wynik)>0)
  23.     return 1;
  24.  else
  25.     return 0;
  26. }
  27.  
  28. function sprawdz_uzyt_admin()
  29. // sprawdzenie zalogowanie i powiadomienie, jeżeli nie
  30. {
  31.  global $_SESSION;
  32.  if (isset($_SESSION['uzyt_admin']))
  33.    return true;
  34.  else
  35.    return false;
  36. }
  37.  
  38. function zmien_haslo($nazwa_uz, $stare_haslo, $nowe_haslo)
  39. // zmiana hasła użytkownika
  40. // zwraca true lub false
  41. {
  42.  // jeżeli stare hasło prawidłowe
  43.  // zmiana hasła na nowe_haslo i zwraca true
  44.  // w przeciwnym wypadku false
  45.  if (loguj($nazwa_uz, $stare_haslo))
  46.  {
  47.    if (!($lacz = lacz_bd()))
  48.      return false;
  49.    $wynik = mysql_query( "update admin
  50.                            set haslo = password('$nowe_haslo')
  51.                            where nazwa_uz = '$nazwa_uz'");
  52.    if (!$wynik)
  53.      return false;  // brak zmian
  54.    else
  55.      return true;  // zmiana pomyślna
  56.  }
  57.  else
  58.    return false; // nieprawidłowe stare hasło
  59. }
  60.  
  61.  
  62. ?>


ale tutaj też wszystko wydaje się być OK.
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. <?php
  2. global $_SESSION;
  3. ?>

(IMG:http://forum.php.pl/style_emoticons/default/sciana.gif) $_SESSION, to tablica superglobalna...

Wypluj zapytanie, które leci do bazy i spróbuj wykonać je w linii poleceń SQL.

PS. Skrypt podatny na SQL Injection.
Go to the top of the page
+Quote Post
brandon65
post
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 13.10.2008

Ostrzeżenie: (0%)
-----


mam właśnie podobny problem, dlatego nie chcę zakładać nowego wątku, a mianowicie mógłby mi ktoś wytłumaczyć jakiś skrypt z logowaniem php mysql? wiem, ze jest duzo tutoriali na ten temat, ale niestety zaden nie przynosi oczekiwanych rezultatów u mnie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) i nie wiem w czym tkwi problem...
normalnie tworzę taki sam skryp logowania jak w tutorialach, zmieniam odpowiednio nazwe bazy danych przy łączeniu i jak chce sie zalogować to nici z tego...za zadne skarby nie chce sie logowac, ani na adminie ani na userze... i juz nie wiem co jest nie tak... czy moze zle tworze baze w sql?hmnnn
ale jak tworze inna baze danych to normlanie wszystko pobiera i pokazuje, a jak chce zrobic z tym logowaniem to nie moge sie polaczyc.
Czy mogłby ktos to jeszcze raz przedstawic ale nazwijmy to bardziej krok po kroku? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
piotrooo89
post
Post #8


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




ymm myślę że opisałem przystępnie: http://olaszewski.freehostia.com/?p=15
Go to the top of the page
+Quote Post
brandon65
post
Post #9





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 13.10.2008

Ostrzeżenie: (0%)
-----


Cytat(piotrooo89 @ 28.12.2008, 15:44:24 ) *
ymm myślę że opisałem przystępnie: http://olaszewski.freehostia.com/?p=15


hmnn być może jest to opisane przystępnie... ale u mnie dalej nie chce to zadzialac... fuck//
juz na tyle sposobow probuję, że juz nie iwem co może byc nie tak...
jedyne co mogę się zasugerować to to, iż robię jakiś błąd w bazie sql,ale nie wiem co... przecież przypisuje im nr uzytkownicy i haslo i ...lipa...

a mam takie pytanie? czy moglbys mi przeslac te pliki utworzone w bazie sql? tzn tylko to uzytkownicy i haslo? chcialbym sobie sprawdzic czy aby wszystko robie zgodnie ze wskazówkami? bo normalnie biorę varchar (30) default not full, ale byc moze chodzi o jakies te wartosci zeby im przypisac albo cos/ no juz sam nie wiem...
Go to the top of the page
+Quote Post
piotrooo89
post
Post #10


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




jasne.

  1. --
  2. -- Struktura tabeli dla `admin`
  3. --
  4.  
  5. CREATE TABLE `admin` (
  6. `id` int(11) NOT NULL AUTO_INCREMENT,
  7. `user` varchar(50) NOT NULL DEFAULT '',
  8. `pass` varchar(50) NOT NULL DEFAULT '',
  9. PRIMARY KEY (`id`)
  10. ) TYPE=MyISAM AUTO_INCREMENT=2 ;
  11.  
  12. --
  13. -- Zrzut danych tabeli `admin`
  14. --
  15.  
  16. INSERT INTO `admin` VALUES (1, 'admin', '123qwe');


tworze tabele o nazwie admin i wrzucam w nią użytkownika admin który ma hasło 123qwe
Go to the top of the page
+Quote Post
brandon65
post
Post #11





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 13.10.2008

Ostrzeżenie: (0%)
-----


i dalej nie dziala... ja sie chyba... juz tyle godzin nad tym slecze, ze az mnie...
jesli chodzi o te pliki to mialem na mysli pliki fizyczne, bo przepisuje normalnie te dane do tabeli jaka tworze i nie dziala...i kompletnie nie wiem co jest nie tak
Go to the top of the page
+Quote Post
piotrooo89
post
Post #12


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




nie przepisuj... skopiuj go i w phpMyAdmin masz taką ikonkę SQL i tam go wklej... a jakimiś błędami sypie? mysql_error coś zwraca?
Go to the top of the page
+Quote Post
brandon65
post
Post #13





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 13.10.2008

Ostrzeżenie: (0%)
-----


nie no ja to juz sie poddaje... ilez mozna godzin siedziec nad zwyklym logowaniem... juz tyle czasu spedzilem nad utworzeniem tego i ... nic nie chce sie itworzyc...
normalnie utworzylem sobie baze danych, poprzez php mozemy sobie szukac dodawac nowe watki itp, tylko chcialem to zrobic aby tylko admin mogl dodawac, a nie wszyscy no ale coz jak sie nie da to trudno...
a co do bledu, to tak zwraca mi taki komunikat:
#1050 - Table 'admin' already exists
Go to the top of the page
+Quote Post
piotrooo89
post
Post #14


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




a mógłbym zobaczyć jak wykonujesz to logowanie... bo coś mi się widzi że paprasz w kodzie.
Go to the top of the page
+Quote Post
seba22
post
Post #15





Grupa: Zarejestrowani
Postów: 293
Pomógł: 4
Dołączył: 28.01.2005

Ostrzeżenie: (0%)
-----


No to błąd, masz wyjaśniony, taka tabela już istnieje.

Skasuj ją, i wykonaj jeszcze raz kod który podał Ci kolega wyżej.
Go to the top of the page
+Quote Post
brandon65
post
Post #16





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 13.10.2008

Ostrzeżenie: (0%)
-----


oczywiscie, ze moge zalaczyc... w tak krotkim kodzie chyba nie da sie nic pomieszac, ale u mnie to moze byc wszystko mozliwe (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

oto screen
(IMG:http://images40.fotosik.pl/43/2d145d115813271bm.jpg)
Go to the top of the page
+Quote Post
piotrooo89
post
Post #17


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




ehh źle mnie zrozumiałeś. kod php odpowiedzialny za logowanie (tzn. tworzenie odpowiedniej sesji, sprawdzanie w bazie userka).

//EDIT

i nie jakiś screen tylko zwyczajny kod.

Ten post edytował piotrooo89 28.12.2008, 17:10:15
Go to the top of the page
+Quote Post
seba22
post
Post #18





Grupa: Zarejestrowani
Postów: 293
Pomógł: 4
Dołączył: 28.01.2005

Ostrzeżenie: (0%)
-----


Cytat(brandon65 @ 28.12.2008, 17:08:14 ) *
oczywiscie, ze moge zalaczyc... w tak krotkim kodzie chyba nie da sie nic pomieszac, ale u mnie to moze byc wszystko mozliwe (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

oto screen
(IMG:http://images40.fotosik.pl/43/2d145d115813271bm.jpg)



Kliknij po prawej stronie w bazie danych...
Bo masz nie wybraną.
Go to the top of the page
+Quote Post
brandon65
post
Post #19





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 13.10.2008

Ostrzeżenie: (0%)
-----


no kod zaczerpnąłem od Ciebie ze stronki którą podałeś;

Kod
    ob_start();
     session_start();
  
     $login = $_POST['loguj'];
     if($login)
     {
         $user = $_POST['login'];
         $haslo = $_POST['pass'];
  
         include('../mysql.inc');
  
         $sql = mysql_query("SELECT * FROM admin WHERE user='$user' AND pass='$haslo'");
  
         if(@mysql_num_rows($sql))
         {
             session_register("uzytkownik");
             header("Location: admin.php");
         exit;
         }
         else

         {
             $message="Nieprawidłowa nazwa użytkownika lub hasło.";
         }
     }
     ob_end_flush();


albo jeszcze inaczej, powiedz ggdzie to wpisujesz:
Kod
INSERT INTO `admin` VALUES (1, 'admin', '123qwe');

? w sql?

Ten post edytował brandon65 28.12.2008, 17:22:39
Go to the top of the page
+Quote Post
piotrooo89
post
Post #20


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




masz ten plik? include('../mysql.inc');
a w nim połączenie do bazy? bo jeśli nie to stwórz sobie go, albo zamiast niego dołączaj zalogowanie do bazy. na 99% tu jest błąd.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 04:34