Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Panel logowania - problem ze skryptem
artkow00
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

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


Witam.

Przedstawiam mój skrypt logowania. Próbuję wydziergać coś takiego, żeby user i admin logowali się z tego samego formularza, ale mam w bazie 2 tabele `users` i `admin`. Moje założenie było następujące:

Jeśli wypełniony firmularz ---> znajdź usera w tabeli `users` gdzie pasują dane logowania ---> jeśli brak pasujących wyników ---> znajdź admina w tabeli `admin` gdzie pasują dane logowania.

Jak znajdzie usera to ---> header do user_panel.php
Jak znajdzie admina to ---> header do admin_panel.php

Oto kod:
  1. [codebox] if(isset($_POST['name'])) {
  2. $_POST['name'] = clear($_POST['name']);
  3. $_POST['password'] = clear($_POST['password']);
  4. $_POST['password'] = codepass($_POST['password']);
  5. $result = mysql_query("SELECT `id` FROM `users` WHERE `name` = '{$_POST['name']}' AND `password` = '{$_POST['password']}' LIMIT 1");
  6. if(mysql_num_rows($result) > 0) {
  7. $row = mysql_fetch_assoc($result);
  8. $_SESSION['logged1'] = true;
  9. $_SESSION['id1'] = $row['id'];
  10. header ('Location: user/user_panel.php');
  11. }else {
  12. $result1 = mysql_query("SELECT `id` FROM `admin` WHERE `admin_name` = '{$_POST['name']}' AND `admin_pass` = '{$_POST['password']}' LIMIT 1");
  13. if(mysql_num_rows($result1) > 0) {
  14. $row1 = mysql_fetch_assoc($result1);
  15. $_SESSION['logged2'] = true;
  16. $_SESSION['id2'] = $row1['id'];
  17. header ('Location: admin_panel.php');
  18. }
  19. }
  20. }[/codebox]


Co jest nie tak? Usera loguje mi pięknie, ale już po wpisaniu poprawnych danych logowania admina nie dzieje się nic...
Go to the top of the page
+Quote Post
kosmos
post
Post #2





Grupa: Zarejestrowani
Postów: 367
Pomógł: 17
Dołączył: 4.03.2008

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


Jaki jest sens trzymania danymch administratora w osobnej tabeli? Bedzie ich więcej niż 1? Chcesz aby za każdym razem kiedy użytkownik nie zostanie znaleziony w tabeli user, był nastepnie wyszukiwany w tabeli admin ? smile.gif

Ten post edytował kosmos 5.11.2013, 13:50:38
Go to the top of the page
+Quote Post
artkow00
post
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

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


Owszem, będzie więcej niż 1.
Pomijam fakt, że w późniejszej fazie będę chciał doklepać do tego jeszcze 3 rodzaj użytkownika - sprzedawca...
Ale to już inna bajka, chodzi mi o samą ideę jak poradzić sobie z takim zagadnieniem.

Sens jest następujący:

Admin potrzebuje tylko pól name, password, email.
User potrzebuje pól name, password, email, firma, nip, regon, imie, nazwisko... itd

Jak bym chciał to w 1 tabelę dać to admin też musiałby te wszystkie pola posiadać. Oczywiście mogłyby być NULL, ale chce, żeby pola dla usera byłu NOT NULL.

Ten post edytował artkow00 5.11.2013, 13:54:21
Go to the top of the page
+Quote Post
Qss
post
Post #4





Grupa: Zarejestrowani
Postów: 141
Pomógł: 7
Dołączył: 22.02.2009

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


kod wygląda na poprawny, wina musi leżeć po innej stronie może zła lokalizacja w header może inaczej zapisałeś hasło dla admina niż dla usera

Proponuje usunąć chwilowo header w części admina próbować to debugować linia po lini zaraz po }else{

Ten post edytował Qss 5.11.2013, 13:54:21
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
ale już po wpisaniu poprawnych danych logowania admina nie dzieje się nic...
Skoro ci nie znajduje admina, to masz do wyboru:
1) Albo zle podales dane admina
2) Albo masz blad zapytania. Sprawdz, wyswietl ten blad, w ogole wyswietlaj wszystkie bledy.... Tu masz wszystko opisane jak masz tak banalne rzeczy rozwiazywac samemu:
Temat: Jak poprawnie zada pytanie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kosmos
post
Post #6





Grupa: Zarejestrowani
Postów: 367
Pomógł: 17
Dołączył: 4.03.2008

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


wyprintuj sobie na początek dowolny wyraz po ELSE, póxniej sprawdź poprawnośc zapytania do bazy

  1. $result1 = mysql_query("SELECT `id` FROM `admin` WHERE `admin_name` = '{$_POST['name']}' AND `admin_pass` = '{$_POST['password']}' LIMIT 1") or die ('błąd zapytania do BD');
Go to the top of the page
+Quote Post
artkow00
post
Post #7





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

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


Kosmos wyprintowałem, i nic. Nie printuje, więc problem musi się znajdować gdzieś przed else. name i password z formularza na bank jest ok - jak usunę zupełnie część z adminem to ładnie loguje usera i header również działa.

Po sprawdzeniu zapytania nie loguje admina, ani nie wyświetla 'błąd zapytania do BD'...
Po prostu pozostaje wyświetlony formularz z wpisanymi danymi i nic się nie dzieje.

Dobra wyświetla mi 'błąd' jeśli po else dam po prostu echo 'błąd'; ale sprawdzenie zapytania nie daje błędu bo dane logowania się zgadzają, nazwy, pola w bazie i inne detale równeiż są poprawnie (sprawdzone 10 razy) smile.gif

Ten post edytował artkow00 5.11.2013, 14:09:10
Go to the top of the page
+Quote Post
kosmos
post
Post #8





Grupa: Zarejestrowani
Postów: 367
Pomógł: 17
Dołączył: 4.03.2008

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


Sprawdź co zwraca Ci



w przypadku gdy podajesz do logowania dane admina
Go to the top of the page
+Quote Post
artkow00
post
Post #9





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

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


Dałem taki kodzik po else:

CODE

$result1 = mysql_query("SELECT `id` FROM `admin` WHERE `admin_name` = '{$_POST['name']}' AND `admin_pass` = '{$_POST['password']}' LIMIT 1") or die ('błąd zapytania do BD');
if(mysql_num_rows($result1) > 0){
echo 'askaskjcn';
}


Nie wyświetliło nic.
A oto screen z tabeli admina:



Po sprawdzeniu zmiennej $result1:

  1. [codebox]$result1 = mysql_query("SELECT `id` FROM `admin` WHERE `admin_name` = '{$_POST['name']}' AND `admin_pass` = '{$_POST['password']}' LIMIT 1") or die ('błąd zapytania do BD');
  2. echo 'cscs';
  3. var_dump($result1);[/codebox]


Otrzymuję:

resource(5) of type (mysql result)

Szczerze - nie mam pojęcia co to oznacza...
Go to the top of the page
+Quote Post
kosmos
post
Post #10





Grupa: Zarejestrowani
Postów: 367
Pomógł: 17
Dołączył: 4.03.2008

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


  1. if(isset($_POST['name'])) {
  2. $_POST['name'] = clear($_POST['name']);
  3. $_POST['password'] = clear($_POST['password']);
  4. $_POST['password'] = codepass($_POST['password']);
  5. $result = mysql_query("SELECT `id` FROM `users` WHERE `name` = '{$_POST['name']}' AND `password` = '{$_POST['password']}' LIMIT 1");
  6. if(mysql_num_rows($result) > 0) {
  7. $row = mysql_fetch_assoc($result);
  8. $_SESSION['logged1'] = true;
  9. $_SESSION['id1'] = $row['id'];
  10. header ('Location: user/user_panel.php');
  11. }
  12. else {
  13. $result1 = mysql_query("SELECT `id` FROM `admin` WHERE `admin_name` = '{$_POST['name']}' AND `admin_pass` = '{$_POST['password']}' LIMIT 1");
  14. print_r($result1); // co zwraca?
  15. if(mysql_num_rows($result1) > 0) {
  16. $row1 = mysql_fetch_assoc($result1);
  17. $_SESSION['logged2'] = true;
  18. $_SESSION['id2'] = $row1['id'];
  19. header ('Location: admin_panel.php');
  20. }
  21. }
Go to the top of the page
+Quote Post
artkow00
post
Post #11





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

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


Resource id #5
Go to the top of the page
+Quote Post
phpion
post
Post #12





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(artkow00 @ 5.11.2013, 13:49:53 ) *
Pomijam fakt, że w późniejszej fazie będę chciał doklepać do tego jeszcze 3 rodzaj użytkownika - sprzedawca...

Czyli dodasz kolejną tabelę do przeszukiwania? Co jeśli w każdej tabeli pojawi się użytkownik o tym samym loginie?

Cytat(artkow00 @ 5.11.2013, 13:49:53 ) *
Sens jest następujący:

Admin potrzebuje tylko pól name, password, email.
User potrzebuje pól name, password, email, firma, nip, regon, imie, nazwisko... itd

Jak bym chciał to w 1 tabelę dać to admin też musiałby te wszystkie pola posiadać. Oczywiście mogłyby być NULL, ale chce, żeby pola dla usera byłu NOT NULL.

Robisz tabelę główną użytkowników z podstatowymi informacjami oraz tabele profilów, np.:
user [id, username, password, type] gdzie type to typ użytkownika (np. 1 -> admin, 2 -> użytkownik)
user_profile_1 [user_id, ...] gdzie ... to pola charakterystyczne dla admina
user_profile_2 [user_id, ...] gdzie ... to pola charakterystyczne dla użytkownika
Będzie tutaj problem z zaciągnięciem informacji o profilu użytkownika, ale można to rozwiązać LEFT JOINując obie tabele user_profile_*. Otrzymujesz za to sporą elastyczność: wspólna tabela danych logowania, możliwość tworzenia dowolnej ilości typów użytkowników z dowolną ilością pól. Ewentualnie na swojej strukturze możesz do logowania wykorzystać widok na bazie danych, który będzie zawierał dane użytkowników z obu tabel.

// Edit:
W kodzie ~kosmosa zamień nic nie mówiące:
  1. print_r($result1); // co zwraca?

na:
  1. var_dump(mysql_num_rows($result1)); // co zwraca?
Go to the top of the page
+Quote Post
artkow00
post
Post #13





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

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


Cytat(phpion @ 5.11.2013, 15:23:26 ) *
Czyli dodasz kolejną tabelę do przeszukiwania? Co jeśli w każdej tabeli pojawi się użytkownik o tym samym loginie?


Nie pojawi się - zadbałem o to.

Sprawdzenie zwróciło: int(0)

W ostateczności stworzę jedną tabelę z danymi wszystkich, ale to nie zmienia faktu, że do celów choćby edukacyjnych, chciałbym poznać rozwiązanie swojej "zagadki", zwłaszcza, że (jak wielu z was zauważyło) kod napisany jest poprawnie - a nie działa. tongue.gif
Go to the top of the page
+Quote Post
phpion
post
Post #14





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(artkow00 @ 5.11.2013, 15:50:33 ) *
Nie pojawi się - zadbałem o to.

Zadbałeś o to zapewne po stronie aplikacji, ale zmieniając dane np. przez phpMyAdmina możesz doprowadzić do takiej sytuacji. Wolałbym by baza sama z siebie zapewniła mi unikalność nazw użytkowników.

Cytat(artkow00 @ 5.11.2013, 15:50:33 ) *
Sprawdzenie zwróciło: int(0)

Czyli nie ma rekordów spełniających zadane kryteria, czyli nie ma takiego admina w bazie danych.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 04:57