Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]System logowania problem z działąniem skryptu
Forum PHP.pl > Forum > Przedszkole
Kociowisko
Witajcie. OD razu mówię że jestem dopiero po kursie PHP i żeby poznać wiele funkcji oraz innych rzeczy związanych z PHP postanowiłem utworzyć cms. I mam taki problem, że mimo wpisania dobrego loginu i hasła wyskakuje komunikat że błędne dane, Tutaj znajduje się kod:

System logowania
boro11
  1. <form method="post" action="logowanie.php">

zamień na:

  1. <form method="post" action="">
Kociowisko
To nie jest związane z problem. Ale dzięki za chęci wink.gif
Niktoś
Bo masz zchrzanionego Selecta , który żadnych danych nie będzie ci zwracał z bazy danych.
Zobacz jak wygląda składnia select.Mała podpowiedź ,nazwy kolum,tabel nie daje się w apostrofy,ale jakbyś dawał "or die" to byś wiedział że coś nie gra w tej kwerendzie.
GoOx
  1. <?php
  2. if(isset($_POST['zaloguj'])) {
  3. $login = $_POST['login'];
  4. $haslo = $_POST['haslo'];
  5. $haslo = md5($haslo);
  6.  
  7. if (empty($login)) {
  8. echo 'Pole z loginem nie zostało wypełnione!!!';
  9. }
  10. if(empty($haslo)) {
  11. echo 'Pole z hasłem nie zostało wypełnione!!!';
  12. }
  13.  
  14. $zapytanie = mysql_query("SELECT COUNT(*) FROM 'uzytkownicy' WHERE `login` = '$login' AND `haslo` = '$haslo'");
  15. if($zapytanie[0] == 0) {
  16. echo 'Podane dane są nieprawidłowe';
  17. }
  18. else {
  19. $_SESSION['login'] = $login;
  20. $_SESSION['haslo'] = $haslo;
  21. header("Location:index.php");
  22. }}
  23. ?>


zmień na:

  1. <?php
  2. if(isset($_POST['zaloguj'])) {
  3. $login = $_POST['login'];
  4. $haslo = $_POST['haslo'];
  5. $haslo = md5($haslo);
  6.  
  7. if (empty($login)) {
  8. $blad++
  9. echo 'Pole z loginem nie zostało wypełnione!!!';
  10. }
  11. if(empty($haslo)) {
  12. $blad++
  13. echo 'Pole z hasłem nie zostało wypełnione!!!';
  14. }
  15. if($blad == 0) {
  16. $zapytanie = mysql_query("SELECT COUNT(*) FROM `uzytkownicy` WHERE `login` = '$login' AND `haslo` = '$haslo'");
  17. if(mysql_num_rows($zapytanie) >0) {
  18. $_SESSION['zalogowany'] = true;
  19. $_SESSION['login'] = $login;
  20. }
  21. }
  22. }
  23. ?>


nie sprawdziałem czy działa jak pominalem jakąs klamerkę lub jest jakiś błąd to pisz.
Niktoś
specool.gif ,będzie działać, a ja chyba po hiszpańsku pisze.
Kociowisko
To co napisałeś trochę pomgogło, będy które zrobiłeś poprawiłem ale teraz niezależnie jakie bedzie haslo to i tak przekieruje na podnaa stronę. Bo zawsze zwróci jakąś wartość a chce, żeby tylko ci co wpisali porpawnie przekierowywało do podanej podstrony. Tutaj jest kod:

http://wklej.org/id/706372/
Niktoś
Widzę, że poprawiłeś Selecta, to jednak po hiszpańsku nie pisze smile.gif.
Zamień kwerende:
  1. $zapytanie = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE login = '$login' AND haslo = '$haslo'"));


na:
  1. $zapytanie = mysql_fetch_row(mysql_query("IF EXISTS (SELECT login FROM uzytkownicy WHERE login = '$login' AND haslo = '$haslo') SELECT 1 else SELECT 0 "));


a reszte pozostaw bez zmian.Daj odpowiedź czy działa
GoOx
bo:

  1. if(mysql_num_rows($zapytanie) >0) {


to jest potrzebne! to sprawdza czy coś w bazie danych jest większe niż 0 bo jeśli tego czegoś nie ma to jest 0 więc to musi być!

a i do zapytania dodaj LIMIT 1 na sam koniec

  1. if ($zapytanie[0] != 0) {

moim zdaniem to jest złe rozwiązanie.
Kociowisko

Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in /home/kociowis/public_html/cms/logowanie.php on line 37
GoOx
A i tem sposobem wykonałem logowanie do mojego portalu. bot o co pdałem było lepsze niz miałem ;p

I działa.
Kociowisko
No ok tylko mówię, że to co podał Niktoś wywala błąd
Niktoś
Spróbuj teraz być może to wina tego że nie dałem spacji.Poprawiłem u góry.
Gość
Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in /home/kociowis/public_html/cms/logowanie.php on line 37

Warning: mysql_num_rows() expects parameter 1 to be resource, null given in /home/kociowis/public_html/cms/logowanie.php on line 38

Kod znajduje się tutaj:
http://wklej.org/id/706390/
Niktoś
Ale zabiłeś mi ćwieka ,te pytanie poniżej jest pod MSSQL ,myślałem że będzie poprawne.
  1. $zapytanie = mysql_fetch_row(mysql_query("IF EXISTS (SELECT login FROM uzytkownicy WHERE login = '$login' AND haslo = '$haslo') SELECT 1 else SELECT 0 "));


Do MYSQL wygląda tak ,ale nie wiem czy za działa :
  1. $zapytanie = mysql_fetch_row(mysql_query("SELECT IF(EXISTS (SELECT login FROM uzytkownicy WHERE login = '$login' AND haslo = '$haslo'),1,0) "));


Dla mnie leży i kwiczy w porównaniu do MSSQL te MYSQL.Ale widze,że masz już rozwiązanie.
Próbowałem podać lepsze ,bo gdzieś czytałem ,że kwerenda sprawdzająca istnienie/występowanie rekordu jest 4 razy szybasza od zliczania ich poprzez count.Może ktoś inny ją poprawi dla potomności w MySQL,dla MSSQL na 100% będzie działać.
Kociowisko
Jeszcze został drugi błąd
Niktoś
Nie możesz używać dwóch funkcji:
  1. $zapytanie = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE login = '$login' AND haslo = '$haslo'"));
  2. if(mysql_num_rows($zapytanie) >0) {
  3. $_SESSION['zalogowany'] = true;
  4. $_SESSION['login'] = $login;
  5. header('Location:index.php');


Daj tak:
  1. $zapytanie = mysql_num_rows(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE login = '$login' AND haslo = '$haslo'"));
  2. if($zapytanie>0) {
  3. $_SESSION['zalogowany'] = true;
  4. $_SESSION['login'] = $login;
  5. header('Location:index.php');
Kociowisko
Troche to pomogło błędy znikły ale nadal nie sprawdza czy login jest poprawny, Byłbym bardzo wdzięczny gdyby ktoś skopiował kod i sprawdził czy wszystko działa i wkleił poprawny bo ja już nerwowo nie wytrzymuje sad.gif
spokoloko123
Swoją drogą nie powinno się szyfrować haseł md5. Nawet w manualu o tym jest.
Kociowisko
Zmieniłem na sha1? Teraz będzie dobrze. Ale ta zmiana i tak nic nie poprawiła...
Tadek888
Zawsze możesz $hasło = md5(sha1(md5($haslo)));

A jeśli przymierzasz sie do budowania cmsa to koniecznie poczytaj art. ma 5 stron ale warto
http://php.pl/phppl/Wortal/Artykuly/Bezpie...ssion-Hijacking
Kociowisko
Bardzo dziękuję. CMS planuję cały czas rozwijać oraz dodawać nowe funkcje. Na razie meczę się nad systemem logowania oraz nad zabecpzieczeniem go.
dakorta
Również uczę się dopiero PHP. Sądzę, że problemem były nazwy zmiennych login i hasło. Spróbuj je zmienić. Mój kod poniżej:
  1. <?php
  2. if(isset($_POST['zaloguj'])) {
  3. $login_f = $_POST['login'];
  4. $login=mysql_real_escape_string($_POST['login']);
  5. $haslo_f = $_POST['haslo'];
  6. $haslo=mysql_real_escape_string($_POST['haslo']);
  7. // $haslo = md5($haslo);
  8.  
  9. if (empty($login_f)) {
  10. $blad++;
  11.  
  12. echo 'Pole z loginem nie zostało wypełnione!!!';
  13. }
  14. if(empty($haslo_f)) {
  15. $blad++;
  16. echo 'Pole z hasłem nie zostało wypełnione!!!';
  17. }
  18. if($blad == 0) {
  19. $zapytanie = mysql_num_rows(mysql_query("SELECT * FROM uzytkownicy WHERE login = '$login_f' AND haslo = '$haslo_f' "));
  20.  
  21. if(($zapytanie) >0) {
  22. $_SESSION['zalogowany'] = true;
  23. $_SESSION['login'] = $login_f;
  24.  
  25.  
  26. header('Location:index.php');
  27. }
  28. else{
  29.  
  30. header('Location:errorx.php');
  31. }
  32.  
  33. }}
  34. ?>


Pominąłem kodowanie hasła.
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.