Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Problem z logowaniem
Forum PHP.pl > Forum > Przedszkole
dml
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.
czachor
$HTTP_POST_VARS -> $_POST
$HTTP_SESSION_VARS -> $_SESSION
--> http://pl.php.net/manual/pl/reserved.variables.php
dml
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
erix
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?
dml
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.
erix
  1. <?php
  2. global $_SESSION;
  3. ?>

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.
brandon65
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 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? winksmiley.jpg
piotrooo89
ymm myślę że opisałem przystępnie: http://olaszewski.freehostia.com/?p=15
brandon65
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...
piotrooo89
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
brandon65
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
piotrooo89
nie przepisuj... skopiuj go i w phpMyAdmin masz taką ikonkę SQL i tam go wklej... a jakimiś błędami sypie? mysql_error coś zwraca?
brandon65
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
piotrooo89
a mógłbym zobaczyć jak wykonujesz to logowanie... bo coś mi się widzi że paprasz w kodzie.
seba22
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.
brandon65
oczywiscie, ze moge zalaczyc... w tak krotkim kodzie chyba nie da sie nic pomieszac, ale u mnie to moze byc wszystko mozliwe winksmiley.jpg

oto screen
piotrooo89
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.
seba22
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 winksmiley.jpg

oto screen



Kliknij po prawej stronie w bazie danych...
Bo masz nie wybraną.
brandon65
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?
piotrooo89
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.
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.