Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logowanie za pomocą danych z forum mybb
Forum PHP.pl > Forum > PHP
kiepski96
Mam forum i własną stronę,na tę swoją chciałbym logować się danymi z forum.
Tylko po podaniu tabeli z użytkownikami mybb wyskakuje błąd:

  1. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/nagrody/public_html/zlecenia/punktowicze/logowanie.php on line 19
  2.  
  3. Warning: Cannot modify header information - headers already sent by (output started at /home/nagrody/public_html/zlecenia/punktowicze/logowanie.php:19) in /home/nagrody/public_html/zlecenia/punktowicze/logowanie.php on line 30




Mam takie logowanie na stronę,dane bazy ukryłem pod przypadkowymi literami :


  1. <?php
  2. if($_SERVER['REQUEST_METHOD'] == 'POST')
  3. {
  4. $success_page = '';
  5. $error_page = basename(__FILE__);
  6. $mysql_server = 'mvbm';
  7. $mysql_username = 'mvbm';
  8. $mysql_password = 'ncvn';
  9. $mysql_database = 'cfhb';
  10. $mysql_table = 'nvbm';
  11. $crypt_pass = md5($_POST['password']);
  12. $found = false;
  13. $fullname = '';
  14.  
  15. $db = mysql_connect($mysql_server, $mysql_username, $mysql_password);
  16. mysql_select_db($mysql_database, $db);
  17. $sql = "SELECT password, fullname, active FROM ".$mysql_table." WHERE username = '".$_POST['username']."'";
  18. $result = mysql_query($sql, $db);
  19. if ($data = mysql_fetch_array($result))
  20. {
  21. if ($crypt_pass == $data['password'] && $data['active'] != 0)
  22. {
  23. $found = true;
  24. $fullname = $data['fullname'];
  25. }
  26. }
  27. if($found == false)
  28. {
  29. header('Location: '.$error_page);
  30. }
  31. else
  32. {
  33. $_SESSION['username'] = $_POST['username'];
  34. $_SESSION['fullname'] = $fullname;
  35. header('Location: '.$success_page);
  36. }
  37. }
  38. $username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
  39. $password = isset($_COOKIE['password']) ? $_COOKIE['password'] : '';
  40. ?>
Quadina
Jeżeli drukuje Ci błąd w linii 19 przy wyciąganiu tablicy danych z resource z bazy danych mówiąc, że ten resource nie jest resourcem, to prawdopodobnie baza zwróciła jakiś błąd. Walnij sobie tam po tym mysql_query coś w stylu echo mysql_error(); i zobacz jaki błąd się generuje.
kiepski96
Dało to :
  1. Unknown column 'fullname' in 'field list'
  2. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/nagrody/public_html/zlecenia/punktowicze/logowanie.php on line 20




To znaczy chyba,że w kodzie próbuję pobrać z bazy fullname ,ale w bazie nie istnieje taka wartość ?

Czy mam rację ?
matx132
tak w bazie a dokładnie w tabeli nie ma fullname sprawdź czy na pewno jest i czy dobra pisownia
kiepski96
Bo nie ma ^^

Usunę wszystkie ślady po fullname i będzie git.
Spróbuję i dam znać.

@edit

Przerobiłem skrypt tak,aby nie czytał fullname,ale też błąd array mam,chyba coś za dużo usunąłem?


  1. <?php
  2. if($_SERVER['REQUEST_METHOD'] == 'POST')
  3. {
  4. $success_page = '';
  5. $error_page = basename(__FILE__);
  6. $mysql_server = 'localhost';
  7. $mysql_username = 'xxx';
  8. $mysql_password = 'xxx';
  9. $mysql_database = 'xxx';
  10. $mysql_table = 'mybb_users';
  11. $crypt_pass = md5($_POST['password']);
  12. $found = false;
  13.  
  14. $db = mysql_connect($mysql_server, $mysql_username, $mysql_password);
  15. mysql_select_db($mysql_database, $db);
  16. $sql = "SELECT password, active FROM ".$mysql_table." WHERE username = '".$_POST['username']."'";
  17. $result = mysql_query($sql, $db);
  18. if($data = mysql_fetch_array($result))
  19. {
  20. if ($crypt_pass == $data['password'] && $data['active'] != 0)
  21. {
  22. $found = true;
  23. }
  24. }
  25. if($found == false)
  26. {
  27. @header('Location: '.$error_page);
  28. }
  29. else
  30. {
  31. $_SESSION['username'] = $_POST['username'];
  32. header('Location: '.$success_page);
  33. }
  34. }
  35. $username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
  36. $password = isset($_COOKIE['password']) ? $_COOKIE['password'] : '';
  37. ?>



Prosiłbym o doradzenie,co jeszcze zapomniałem usunąć?
Aby nie czytało fullname z bazy ?

Bo w końcu loguje się tylko username i password
CuteOne
podmień to:
  1. $result = mysql_query($sql, $db);

na to:
  1. $result = mysql_query($sql, $db) or die(mysql_error());


i wrzuć tu błędy, które się pojawią
kiepski96
Unknown column 'active' in 'field list'

To chyba oznacza,że nie może z bazy pobrać aktywnych użytkowników(czy ktoś jest zaakceptowany przez admina)

Czy się nie mylę?

Tylko co usunąć w kodzie aby nie czytało tego?
plsd
Nie masz kolumny active w tabeli.
kiepski96
Tak,nawet sam w poprzednim poście na to wpadłem,tylko teraz co w kodzie usunąć,aby nie próbowało się łączyć z tym polem active ?
Samo password i username
CuteOne
  1. $db = mysql_connect($mysql_server, $mysql_username, $mysql_password);
  2. mysql_select_db($mysql_database, $db);
  3. $sql = "SELECT password FROM ".$mysql_table." WHERE username = '".$_POST['username']."'";
  4. $result = mysql_query($sql, $db);
  5. if($data = mysql_fetch_array($result))
  6. {
  7. if ($crypt_pass == $data['password'])
  8. {
  9. $found = true;
  10. }
  11. }
kiepski96
Poprawiłem kod na taki i po zalogowaniu wywala mi error.php,nie wiem dlaczego ?

  1. <?php
  2. if($_SERVER['REQUEST_METHOD'] == 'POST')
  3. {
  4. $success_page = './panel.php';
  5. $error_page = './error.php';
  6. $mysql_server = 'localhost';
  7. $mysql_username = 'xxx';
  8. $mysql_password = 'xxx';
  9. $mysql_database = 'xxx';
  10. $mysql_table = 'mybb_users';
  11. $crypt_pass = md5($_POST['password']);
  12. $found = false;
  13.  
  14. $db = mysql_connect($mysql_server, $mysql_username, $mysql_password);
  15. mysql_select_db($mysql_database, $db);
  16. $sql = "SELECT password FROM ".$mysql_table." WHERE username = '".$_POST['username']."'";
  17. $result = mysql_query($sql, $db);
  18. if($data = mysql_fetch_array($result))
  19. {
  20. if ($crypt_pass == $data['password'])
  21. {
  22. $found = true;
  23. }
  24. }
  25. if($found == false)
  26. {
  27. @header('Location: '.$error_page);
  28. }
  29. else
  30. {
  31. $_SESSION['username'] = $_POST['username'];
  32. $rememberme = isset($_POST['rememberme']) ? true : false;
  33. if ($rememberme)
  34. {
  35. setcookie('username', $_POST['username'], time() + 3600*24*30);
  36. setcookie('password', $_POST['password'], time() + 3600*24*30);
  37. }
  38. @header('Location: '.$success_page);
  39. }
  40. }
  41. $username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
  42. $password = isset($_COOKIE['password']) ? $_COOKIE['password'] : '';
  43. ?>
CuteOne
Zobacz w kod i pomyśl chwile...
kiepski96
Czy chodzi ci o to,że po tym true powinienem dać headera z $success_page ?

  1. {
  2. if ($crypt_pass == $data['password'])
  3. {
  4. $found = true;
  5. }
  6. }
CuteOne
nie.... widać nie znasz podstaw więc lepiej przygarnij na parę dni jakąś książkę o php i wtedy wróć z pytaniami
kiepski96
Uczę się,już pomogliście mi w paru problemach i wiem jak na przyszłość je rozwiązać.

Został mi jeszcze 1 problem,więc proszę o pomoc.
Quadina
Zatem w linii 28 masz warunek o tym czy znalazł czy nie znalazł elementu. Jeżeli nie znalazł to gdzie ma header przekierować przeglądarkę? Do strony błędu! Zatem co to może oznaczać? biggrin.gif
kiepski96
Że wpisane dane są złe?
patryczakowy
mybb nie szyfruje chaseł w md5 tam masz coś takiego:
  1. $pass=md5(md5($salt).md5($pass_user));

więc musisz najpierw pobrać sól z bazy wygenerować taki hasch i dopiero sprawdzić
kiepski96
Zrobiłem tak,ale nadal error :


  1. <?php
  2. if($_SERVER['REQUEST_METHOD'] == 'POST')
  3. {
  4. $success_page = './panel.php';
  5. $error_page = './error.php';
  6. $mysql_server = 'localhost';
  7. $mysql_username = 'xxx';
  8. $mysql_password = 'xxx';
  9. $mysql_database = 'xxx';
  10. $mysql_table = 'mybb_users';
  11. $crypt_pass = md5($_POST['password']);
  12. $crypt_pass = md5(md5($salt).md5($crypt_pass));
  13.  
  14. $found = false;
  15.  
  16. $db = mysql_connect($mysql_server, $mysql_username, $mysql_password);
  17. mysql_select_db($mysql_database, $db);
  18. $sql = "SELECT password FROM ".$mysql_table." WHERE username = '".$_POST['username']."'";
  19. $result = mysql_query($sql, $db);
  20. if($data = mysql_fetch_array($result))
  21. {
  22. if ($crypt_pass == $data['password'])
  23. {
  24. $found = true;
  25. }
  26. }
  27. if($found == false)
  28. {
  29. @header('Location: '.$error_page);
  30. }
  31. else
  32. {
  33. $_SESSION['username'] = $_POST['username'];
  34. $rememberme = isset($_POST['rememberme']) ? true : false;
  35. if ($rememberme)
  36. {
  37. setcookie('username', $_POST['username'], time() + 3600*24*30);
  38. setcookie('password', $_POST['password'], time() + 3600*24*30);
  39. }
  40. @header('Location: '.$success_page);
  41. }
  42. }
  43. $username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
  44. $password = isset($_COOKIE['password']) ? $_COOKIE['password'] : '';
  45. ?>
patryczakowy
tak na pewno nie będzie ci działać musisz pobrać sól z bazy a więc swoje zapytanie zamień na:
  1. SELECT password, salt FROM ...

chyba wiesz co trzeba wpisać w miejsce kropek
następnie musisz użyć tej soli do wygenerowania i porównania haseł więc w linii 21 wpisz
  1. $crypt_pass = md5(md5($data['salt']).md5($_POST['password']));

linie 11 i 12 możesz wywalić bo jest bez sensu
a i nie wstawiaj nieprzefiltrowanych danych do zapytań oraz zapisanie w ciasteczku hasła to chyba też nie najlepszy pomysł
kiepski96
Wielkie dzięki,dział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.