Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP] Panel logowania
Forum PHP.pl > Forum > Przedszkole
o2w5n778
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. ?>
mit2
a może pokażesz formularz logowania a po 2
  1. $_POST['login']='$login' && $_POST['haslo']='$haslo')
peter13135
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.
o2w5n778
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?
kadlub
  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
kamil_lk
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>
peter13135
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)
worek
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ę.
o2w5n778
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
plej
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
o2w5n778
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
plej
wiem:)
ale do tego też książki służą ebooki darmowe na necie:)
a także kursy wystarczy poszukać.
Rid
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.
worek
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)
plej
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:)
gino
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
worek
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
plej
no coment haha.gif
gino
popieram, programuję ładnych parę lat, ale już komentować nie będę.

gino
plej
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
worek
Można powiedzieć że ten skrypt co pisałem to taka lżejsza wersja pma dla klienta dla którego pma jest zbyt nieogarnięte a on woli mieć ładnie wszystko w tabelkach biggrin.gif Klient płaci i wymaga no to piszę jak on sobie zażyczy. Przecież nie odprawie gościa z kwitkiem.
o2w5n778
A ja jeszcze wracając co do tego:
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
................................................................................
Czy każdy zarejestrowany użytkownik musi mieć swoje id, czy nie może za id posłużyć login? Przecież jest on indywidualny dla każdego użytkownika.
Ja narazie nie napisałem jeszcze rejestracji więc użytkowników dodałem ręcznie w takiej formie:
imie, nick, haslo, email
I chciałem zrobić to tak:
1. Łączę z bazą
2. Wysyłam zapytanie do MySQL czy użytkownik o takim loginie i haśle jest.
3. Jeżeli jest pobieram jego dane
4. Jeżeli tak session=1

Tylko teraz pojawiają się pytania:
Jak mam skonstruować to zapytanie i jeżeli jest taki user to pobrać jego dane?

Oglądałem rożne skrypty logowania ale w każdym jest to inaczej zrobione i nie mogę tego w prosty sposób zrozumieć. Jeżeli ktoś mógł by to pokazać na jakimś banalnie prostym przykładzie był bym bardzo wdzięczny.
plej
o2w5n778

wysłałem ci tam linka i tam pobierz to i rozpakuj masz gotowce:) możesz je wykorzystać wszystkie ale możesz mieć wzór:)
o2w5n778
No i znów problem:
  1. <?php
  2. $mysql = mysql_connect('localhost', 'root', '9fecd4cf') or die('Padl serwer');
  3. $mysql = mysql_select_db('cms') or die('Padla baza');
  4.  
  5. $login = $_POST['login'];
  6. $haslo = $_POST['haslo'];
  7. $haslo = (md5($haslo));
  8.  
  9. $query = "SELECT * FROM $tabela WHERE login='$login' and haslo='$haslo' and status=0";
  10.  
  11. if (mysql_num_rows($query) == 1){
  12. $_SESSION['zalogowany'] = 1;
  13. }
  14.  
  15. if (isset($_GET['id']) && $_GET['id']=='wyloguj'){
  16. unset($_SESSION['zalogowany']);
  17. }
  18.  
  19. ?>


Jeżeli login i hasło jest poprawny powinno mi ustawiać
  1. $_SESSION['zalogowany'] = 1;

A tak nie jest
Hpsi
zrób sobie:
  1. echo "SELECT * FROM $tabela WHERE login='$login' and haslo='$haslo' and status=0";

i wrzuć do phpmyadmina, zobacz czy ci wyświetli który kolwiek rekord....

w sumie bym zrobił troszkę inaczej ale to już tylko propozycja

  1. $q = mysql_query('SELECT count(`id`) AS `count` FROM '.$tabela.' WHERE `login`="'.$login.'" AND `haslo`="'.$haslo.'" and `status`=0');
  2. $ilosc = mysql_fetch_array($q);
  3. if($q['count'] == 1) $_SESSION['zalogowany'] =1;
o2w5n778
wrzuciłem i error
robię złe zapytanie?
Hpsi
może jakieś dokładniejsza informacja wink.gif ?
o2w5n778
#1054 - Unknown column 'status' in 'where clause'
Hpsi
sprawdź czy dobrze przekopiowałeś to co napisałem. Chodzi o apostrofy i cudzysłowy w zapytaniu smile.gif
jak edytujesz, to zostaw poprzedni bo teraz mój post był bezsensu smile.gif

podaj mi strukturę twojej tabeli wink.gif
o2w5n778
Wkleiłem ma się rozumieć bez echo i " "
  1. SELECT * FROM $tabela WHERE login='$login' AND haslo='$haslo' AND STATUS=0

i zamiast $tabela dałem nazwę tabeli:
  1. SELECT * FROM users WHERE login='$login' AND haslo='$haslo' AND STATUS=0

Hpsi
Struktura tabeli to nie jest zapytanie kolego smile.gif
twój błąd mówi ze w tabeli users nie masz kolumny status ...
o2w5n778
Struktura tabeli:


A mogę równiedobrze usunąć z zapytania status?
nospor
Myślisz, że jak to teraz zrobisz bez pytania to wybuchnie Twój pokój?
Hpsi
a wręcz powinieneś usunąć status z zapytania smile.gif

@nospor: naprawdę czasem brakuje mi opcji na forum "i like it" twoje teksty przeważnie mnie pozytywnie nastawiają do dnia ;]
o2w5n778
  1. <?php
  2. $mysql = mysql_connect('localhost', 'root', 'pass') or die('Padl serwer');
  3. $mysql = mysql_select_db('cms') or die('Padla baza');
  4.  
  5. $login = $_POST['login'];
  6. $haslo = $_POST['haslo'];
  7. $haslo = (md5($haslo));
  8.  
  9. $query = "SELECT * FROM users WHERE login='$login' AND haslo='$haslo'";
  10.  
  11. if (mysql_num_rows($query) == 1){
  12. $_SESSION['zalogowany'] = 1;
  13. }
  14.  
  15. if (isset($_GET['id']) && $_GET['id']=='wyloguj'){
  16. unset($_SESSION['zalogowany']);
  17. }
  18.  
  19. ?>


Usunąłem. Tylko jak się nie dało zalogować tak się nadal nie da smile.gif
Dane w bazie do zalogowania mam na 100%
nospor
Cytat
$query = "SELECT * FROM users WHERE login='$login' AND haslo='$haslo'";

if (mysql_num_rows($query) == 1){

Weź zapoznaj się wpierw z podstawami podstaw!
Najpierw trzeba zrobić mysql_query()
http://pl.php.net/manual/en/function.mysql-query.php

Cytat
@nospor: naprawdę czasem brakuje mi opcji na forum "i like it" twoje teksty przeważnie mnie pozytywnie nastawiają do dnia ;]
smile.gif
gino
@o2w5n778 jeśli mam być szczery: nigdy nie zalogowałbym się i nie podał danych do zalogowania dla systemu, który został napisany przez kogoś kto nie ma o tym pojęcia. Najbardziej niepokojące nie jest to, że nie potrafisz, ale to, że mając podane gotowe skrytpy, maniual, dokumantacje mySQL-a online po prostu Ci się nie chce. Dziwię się cierpliwości kolegów.

gino
plej
haha.gif ja typa nie ogarniam tym bardziej że mu dałem linka do gotowych skryptów zalogowania, rejestracji itd. nawet baze tam ma:>
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.