Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [SQL][PHP] Panel logowania
o2w5n778
post 28.05.2011, 22:32:17
Post #1





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 10.12.2009

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


Witam!
Czemu w tym skrypcie login i hasło się nie pobiera, przez co nie da się zalogować?
Połączenie jest dobre, dane w bazie są.
  1. <?php
  2. // lacze z baza danych
  3. $mysql = mysql_connect('localhost', 'root', 'pass') or die('Padl serwer');
  4. $mysql = mysql_select_db('cms') or die('Padla baza');
  5.  
  6.  
  7. $zapytanie = mysql_query("SELECT * FROM users WHERE login='$login' and haslo='$haslo'");
  8.  
  9. if (isset($_GET['id']) && $_GET['id']=='wyloguj'){
  10. unset($_SESSION['zalogowany']);
  11. }
  12.  
  13. if (isset($_POST['login']) && isset ($_POST['haslo']) && $_POST['login']==$login && $_POST['haslo']==$haslo){
  14. $_SESSION['zalogowany'] = 1;
  15. }
  16. ?>


--------------------
Go to the top of the page
+Quote Post
mit2
post 28.05.2011, 22:44:45
Post #2





Grupa: Zarejestrowani
Postów: 160
Pomógł: 5
Dołączył: 4.08.2010

Ostrzeżenie: (40%)
XX---


a może pokażesz formularz logowania a po 2
  1. $_POST['login']='$login' && $_POST['haslo']='$haslo')


Ten post edytował mit2 28.05.2011, 22:48:26
Go to the top of the page
+Quote Post
peter13135
post 28.05.2011, 23:44:59
Post #3





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


heh, no nie wiem co napisać. Dawno czegoś takiego nie widziałem.

linijka nr 7. ani $login ani $haslo nie istnieje, zapytanie wygląda więc tak :
  1. SELECT * FROM users WHERE login='' AND haslo=''


Ślepy zobaczy, że ten kod jest BEZ SENSU.


--------------------
:)
Go to the top of the page
+Quote Post
o2w5n778
post 29.05.2011, 08:17:36
Post #4





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 10.12.2009

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


Trochę poprawiłem kod ale teraz z kolei jakich kolwiek danych bym nie wpisał to mnie loguje:
  1. <?php
  2. // lacze z baza danych
  3. $mysql = mysql_connect('localhost', 'root', 'pass') or die('Padl serwer');
  4. $mysql = mysql_select_db('cms') or die('Padla baza');
  5.  
  6.  
  7. $zapytanie = mysql_query("SELECT * FROM users WHERE login = '$login' and haslo = '$haslo'");
  8.  
  9.  
  10. if (isset($_GET['id']) && $_GET['id']=='wyloguj'){
  11. unset($_SESSION['zalogowany']);
  12. }
  13.  
  14. if (isset($_POST['login']) && isset ($_POST['haslo']) && $_POST['login']=='$login' && $_POST['haslo']=='$haslo'){
  15. $_SESSION['zalogowany'] = 1;
  16. }
  17. ?>


Może jakieś pomysły w jaki inny sposób mogę napisać to poprawnie?

Ten post edytował o2w5n778 29.05.2011, 08:24:50


--------------------
Go to the top of the page
+Quote Post
kadlub
post 29.05.2011, 08:38:24
Post #5





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


  1. WHERE login = '$login'
  2.  

w zapytaniu do tego $login powinna być przypisana wartość z formularza

ale jeśli tak to co to jest:
  1. $_POST['login']=='$login'

apostrof nie jest potrzebny
coś mi się wydaje że do $login wstawiasz wartość z formularza a później je porównujesz z POST
dlatego cały czas masz spełniony warunek
nie lepiej sprawdzić funkcją mysql_num_rows czy zapytanie zwraca jakiś rekord jak tak to logujemy jak nie to nie

Ten post edytował kadlub 29.05.2011, 08:43:56
Go to the top of the page
+Quote Post
kamil_lk
post 29.05.2011, 08:51:10
Post #6





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


Masz tutaj działający skrypt do logowania.
  1. <?php
  2. session_register("zalogowany");
  3. if($_GET['id'] == logout) session_unset();
  4. if(empty($_SESSION["zalogowany"])) $_SESSION["zalogowany"] = 0;
  5. if(empty($_SESSION["login"])) $_SESSION["login"] = "anonim";
  6.  
  7. function PokazFormularz($komunikat = ""){
  8. if($komunikat) echo "$komunikat<br />";
  9. echo '<table>';
  10. echo '<form action="index.php" method="post">';
  11. echo '<tr><td>Login:</td><td><input type="text" name="login"></td></tr>';
  12. echo '<tr><td>Hasło:</td><td><input type="password" name="haslo"></td></tr>';
  13. echo '<tr><td></td><td><input type="submit" name="submit" value="Zaloguj"></td></tr>';
  14. echo '</form>';
  15. echo '</table>';
  16. echo '<br /><a href="rejestruj.php">Zarejestruj</a>';
  17. }
  18. ?>
  19. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  20. <html xmlns="http://www.w3.org/1999/xhtml">
  21. <head>
  22. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  23. </head>
  24.  
  25. <body>
  26. <?php
  27. if($_SESSION["zalogowany"]==0){
  28. if(!isset($_POST['submit'])) PokazFormularz();
  29. else {
  30. $login = $_POST['login'];
  31. $haslo = $_POST['haslo'];
  32. $polacz = mysql_connect('host', 'nazwa_uzytkowanika', 'haslo') or die ("Nie połączono z bazą danych!");
  33. mysql_select_db('nazwa_bazy');
  34. $zapytanie = "SELECT * FROM `user_log` WHERE `login` LIKE '$login'";
  35. $idzapytania = mysql_query($zapytanie);
  36. if(mysql_fetch_array($idzapytania) == 0) echo PokazFormularz("Nie ma takiej osoby w bazie!");
  37. else{
  38. $zapytanie = "SELECT * FROM `user_log` WHERE `login` LIKE '$login'";
  39. $idzapytania = mysql_query($zapytanie);
  40. $user = mysql_fetch_array($idzapytania);
  41. if($login == $user['1'] && $haslo == $user['2']){
  42. echo "Witaj ".$login.". Jesteś zalogowany!";
  43. $_SESSION["zalogowany"] = 1;
  44. $_SESSION["login"] = $login;
  45. echo '<br /><a href="index.php?id=logout">Wyloguj</a>';
  46. }
  47. else PokazFormularz("Złe dane!!!");
  48. }
  49. }
  50. }
  51. else{
  52. echo "Witaj ".$_SESSION["login"].". Jesteś zalogowany!";
  53. echo '<br /><a href="index.php?id=logout">Wyloguj</a>';
  54. }
  55. ?>
  56. </body>
  57. </html>
Go to the top of the page
+Quote Post
peter13135
post 29.05.2011, 14:25:06
Post #7





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Cytat(o2w5n778 @ 29.05.2011, 09:17:36 ) *
Trochę poprawiłem kod ale teraz z kolei jakich kolwiek danych bym nie wpisał to mnie loguje:
  1. <?php
  2. // lacze z baza danych
  3. $mysql = mysql_connect('localhost', 'root', 'pass') or die('Padl serwer');
  4. $mysql = mysql_select_db('cms') or die('Padla baza');
  5.  
  6.  
  7. $zapytanie = mysql_query("SELECT * FROM users WHERE login = '$login' and haslo = '$haslo'");
  8.  
  9.  
  10. if (isset($_GET['id']) && $_GET['id']=='wyloguj'){
  11. unset($_SESSION['zalogowany']);
  12. }
  13.  
  14. if (isset($_POST['login']) && isset ($_POST['haslo']) && $_POST['login']=='$login' && $_POST['haslo']=='$haslo'){
  15. $_SESSION['zalogowany'] = 1;
  16. }
  17. ?>


Może jakieś pomysły w jaki inny sposób mogę napisać to poprawnie?


nie zauważyłem poprawek, bład ten sam co był.
Po pierwsze, zmienne login i hasło nigdy nie przyjmują żadnych wartości.


Napiszę Ci w punktach co masz zrobić:
1. połącz się z bazą.
2. jeśli istnieją dane z formularza, pobierz id użytkownika którego login i hasło odpowiadają loginowi i hasłu w bazie danych.
3. sprawdź czy ilość osób spełniających te kryteria jest równa 1, jeśli tak zapisz w sesji usera id które pobrałeś z bazy


To co ty robisz to:
1. łączysz się z bazą
2. pobierasz użytkowników których login i hasło są równe '' czyli takich którzy nie mają loginu ani hasła
3. sprawdzasz czy dane z formularza zgadzają się ze zmiennymi login i hasło, których zawartość jest równa '' czyli są puste
Dodam że nie wykorzystujesz danych które są w bazie danych (pomijając fakt, że pewnie i tak zapytanie zwraca zerową liczbę rekordów)


--------------------
:)
Go to the top of the page
+Quote Post
worek
post 29.05.2011, 22:07:22
Post #8





Grupa: Zarejestrowani
Postów: 82
Pomógł: 3
Dołączył: 26.04.2011

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


Kumam kolego o co ci chodzi, ja mam zrobiony panel logowania na podobnej zasadzie. Ja mam zrobione to tak:

Na stronie logowania(login.php) mam formularz, który przesyła potem za pomocą $_POST hasło i nazwę usera do pliku (logowanie.php) Potem w plik logowania zmiennej $_SESSION['user'] i $_SESSION['pass'] przypisuję nazwę usera i hasło otrzymane z $_POST. Jeżeli jedna z tych zmiennych jest pusta daje redirecta na panel logowania. Potem dołączam plik logowania się do bazy MYSQL gdzie $connect = mysql_connect('%',$_SESSION['username'], $_SESSION['pass']); Jeżeli logowanie się powiedzie to git jak nie to dostaje redirecta. w pliku do łączenia z bazą danych zczytuję jeszcze rekordy z bazy i tabeli zawierającej nazwy użytkownika, hasła i poziomy dostępu i przypisuje je do smiennej $data. Następnie w kodzie(logowanie.php) przypisywana jest zmienna sesyjna $_SESSION['authority'] = 1; jeżeli nazwa usera i hasło równe są rekordowi z bazy $data['user'] i $data['pass']. Jeżeli wszystko okej to użytkownik dostaje treść która domyślnie znajduje się dalej za instrukcją warunkową sprawdzającą właśnie zgodność nazwy usera i hasła. Jeżeli hasło jest złe to dostaje outa na login.php. To tyle. Myślę że ci rozjaśniłem trochę. Aha na początku panelu login.php ustawiamy
session_start();
session_unset();
session_destroy();

Aha zamiast && wpisz AND. Bo && to alternatywa. Jeżeli jeden warunek jest prawdziwy wtedy zwraca prawdę.

Ten post edytował worek 29.05.2011, 22:10:03
Go to the top of the page
+Quote Post
o2w5n778
post 30.05.2011, 14:52:55
Post #9





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 10.12.2009

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


Ale z:
  1. $connect = mysql_connect('%',$_SESSION['username'], $_SESSION['pass']);

to się jeszcze nigdy nie spotkałem. Przecież tu to się wpisuję hosta, użytkownika i hasło do bazy danych smile.gif


--------------------
Go to the top of the page
+Quote Post
plej
post 30.05.2011, 15:17:08
Post #10





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


Masz pobierz sobie cały system, rejestracja, logowanie, weryfikacja, przypomnienie, zmienna danych, gotowa baza danych smile.gif
i przykład demo:
www.nauka.e-putana.pl/kkkkk/a.zip



Edit:
A jak nie znasz dobrze php to oglądnij sobie te filmiki:
http://www.uw-team.org/videoarty_kurs_php.html
nauczą cię trochębiggrin.gif

Ten post edytował plej 30.05.2011, 15:22:45
Go to the top of the page
+Quote Post
o2w5n778
post 30.05.2011, 15:32:53
Post #11





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 10.12.2009

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


Drogi kolego... Ja całą moją wiedzę posiadam z kursów uw-team, ale niestety o połączeniu PHP z MySQL była tylko 1 lekcja i nie była ona zbyt rozwinięta smile.gif


--------------------
Go to the top of the page
+Quote Post
plej
post 30.05.2011, 15:45:03
Post #12





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


wiem:)
ale do tego też książki służą ebooki darmowe na necie:)
a także kursy wystarczy poszukać.
Go to the top of the page
+Quote Post
Rid
post 30.05.2011, 15:53:23
Post #13





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Cytat
$connect = mysql_connect('%',$_SESSION['username'], $_SESSION['pass']);

Chyba na niezbyt dobrym poziomie był ten kurs.
Żeby parametry połączenia z bazą danych trzymać w sesji,normalnie nóż w plecy.
Go to the top of the page
+Quote Post
worek
post 30.05.2011, 17:43:28
Post #14





Grupa: Zarejestrowani
Postów: 82
Pomógł: 3
Dołączył: 26.04.2011

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


Cytat(Rid @ 30.05.2011, 16:53:23 ) *
Chyba na niezbyt dobrym poziomie był ten kurs.
Żeby parametry połączenia z bazą danych trzymać w sesji,normalnie nóż w plecy.


No to chyba coś kolega nie zrozumiał zamierzenia tego kodu. A w czym mam trzymaćquestionmark.gif Jak panel ma być dostępny tylko dla użytkowników którzy są w bazie?questionmark.gif Może w pliku??exclamation.gif biggrin.gif biggrin.gif Albo jeszcze lepiej w cookies?questionmark.gif Wyjaśnię może jak działa ten skrypt tongue.gif Zawsze mogę trzymać po stronie serwera ale w tym konkretnym wypadku to nie wchodzi w grę. Jest tylko trzech użytkowników którzy mają pełny dostęp do bazy. A każdy nowy użytkownik moderator czy user dostaje brak uprawnień do bazy z uprawnieniami dla tabel tylko. Ot tak to wygląda. Jak na moje oko jest to skalowalne rozwiązanie.

Formularz logowania
|
(Login i Hasło)
|
skrypt logowanie.php
|
$_POST[login] i $_POST[pass]
przypisywane do $_SESSION login
$_SESSION pass
|
logowanie do bazy przy użyciu $_SESSION
|
Połączenie udane $_SESSION[authority] = 1
|
Połączenie nieudane kick na formularz logowania
|
Formularz logowania(session_start, session_unset, session_destroy)

Ten post edytował worek 30.05.2011, 17:54:27
Go to the top of the page
+Quote Post
plej
post 30.05.2011, 18:09:45
Post #15





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


Cytat
$connect = mysql_connect('%',$_SESSION['username'], $_SESSION['pass']);

takiego czegoś to ja jeszcze nie widziałem.

Dlatego popieram Rid
i nie komentuje tego haha.gif



Edit:

pisałem że tu masz cały system logowania itd.:
www.nauka.e-putana.pl/kkkkk/a.zip

jak go nie wykorzystasz to chociaż ci pomoże:)


Ten post edytował plej 30.05.2011, 18:17:58
Go to the top of the page
+Quote Post
gino
post 30.05.2011, 18:15:17
Post #16





Grupa: Zarejestrowani
Postów: 324
Pomógł: 52
Dołączył: 18.02.2008

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


Cytat(worek @ 29.05.2011, 23:07:22 ) *
Na stronie logowania(login.php) mam formularz, który przesyła potem za pomocą $_POST hasło i nazwę usera do pliku (logowanie.php) Potem w plik logowania zmiennej $_SESSION['user'] i $_SESSION['pass'] przypisuję nazwę usera i hasło otrzymane z $_POST. Jeżeli jedna z tych zmiennych jest pusta daje redirecta na panel logowania. Potem dołączam plik logowania się do bazy MYSQL gdzie $connect = mysql_connect('%',$_SESSION['username'], $_SESSION['pass']); Jeżeli logowanie się powiedzie to git jak nie to dostaje redirecta. w pliku do łączenia z bazą danych zczytuję jeszcze rekordy z bazy i tabeli zawierającej nazwy użytkownika, hasła i poziomy dostępu i przypisuje je do smiennej $data. Następnie w kodzie(logowanie.php) przypisywana jest zmienna sesyjna $_SESSION['authority'] = 1; jeżeli nazwa usera i hasło równe są rekordowi z bazy $data['user'] i $data['pass'].


czyli mam rozumieć, że jeśli loguje się 100 userów o pełnym dotsępnie, to tych 100 ma takie samo hasło i nazwę użytkownika (jak wtedy poznać kto jest kto) czy może jest założonych 100 kont połączeniowych do tej bazy ? Bo tak to z Twojego opisu wygląda, z forularza login i hasło do AUTORYZACJI userów to te same dane co do połaczenia ? Jeśli tak, to gratuluję poczucia humoru.

gino
Go to the top of the page
+Quote Post
worek
post 30.05.2011, 18:21:19
Post #17





Grupa: Zarejestrowani
Postów: 82
Pomógł: 3
Dołączył: 26.04.2011

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


Niet niet, pełny dostęp ma tylko 3 userów co już pisałem, a reszta userów czyli zawartość witryny jedzie na jednym haśle z ograniczeniami do SELECTA do określonych tabel. A co do poczucia humoru to owszem, mam biggrin.gif Lubię sobie czasem obejrzeć coś od monthy pythona biggrin.gif Żywot Briana czy Święty Grall biggrin.gif
Go to the top of the page
+Quote Post
plej
post 30.05.2011, 18:29:02
Post #18





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


no coment haha.gif
Go to the top of the page
+Quote Post
gino
post 30.05.2011, 18:33:24
Post #19





Grupa: Zarejestrowani
Postów: 324
Pomógł: 52
Dołączył: 18.02.2008

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


popieram, programuję ładnych parę lat, ale już komentować nie będę.

gino
Go to the top of the page
+Quote Post
plej
post 30.05.2011, 18:44:32
Post #20





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


ja może i od prawie dwóch miesięcy ale jednak sporo już wiem ale takiego czegoś to ja nie spotkałem nigdzie haha.gif
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 2.05.2025 - 04:19