Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Logowanie za pomocą danych z forum mybb
kiepski96
post
Post #1





Grupa: Zarejestrowani
Postów: 233
Pomógł: 0
Dołączył: 22.02.2010

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


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. ?>
Go to the top of the page
+Quote Post
Quadina
post
Post #2





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

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


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.


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
kiepski96
post
Post #3





Grupa: Zarejestrowani
Postów: 233
Pomógł: 0
Dołączył: 22.02.2010

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


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ę ?

Ten post edytował kiepski96 16.12.2010, 21:55:43
Go to the top of the page
+Quote Post
matx132
post
Post #4





Grupa: Zarejestrowani
Postów: 243
Pomógł: 19
Dołączył: 12.09.2005

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


tak w bazie a dokładnie w tabeli nie ma fullname sprawdź czy na pewno jest i czy dobra pisownia
Go to the top of the page
+Quote Post
kiepski96
post
Post #5





Grupa: Zarejestrowani
Postów: 233
Pomógł: 0
Dołączył: 22.02.2010

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


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


Ten post edytował kiepski96 16.12.2010, 22:14:25
Go to the top of the page
+Quote Post
CuteOne
post
Post #6





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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ą
Go to the top of the page
+Quote Post
kiepski96
post
Post #7





Grupa: Zarejestrowani
Postów: 233
Pomógł: 0
Dołączył: 22.02.2010

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


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?

Ten post edytował kiepski96 16.12.2010, 22:26:03
Go to the top of the page
+Quote Post
plsd
post
Post #8





Grupa: Zarejestrowani
Postów: 25
Pomógł: 1
Dołączył: 10.09.2009

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


Nie masz kolumny active w tabeli.
Go to the top of the page
+Quote Post
kiepski96
post
Post #9





Grupa: Zarejestrowani
Postów: 233
Pomógł: 0
Dołączył: 22.02.2010

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


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

Ten post edytował kiepski96 16.12.2010, 22:33:32
Go to the top of the page
+Quote Post
CuteOne
post
Post #10





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


  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. }
Go to the top of the page
+Quote Post
kiepski96
post
Post #11





Grupa: Zarejestrowani
Postów: 233
Pomógł: 0
Dołączył: 22.02.2010

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


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. ?>
Go to the top of the page
+Quote Post
CuteOne
post
Post #12





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Zobacz w kod i pomyśl chwile...
Go to the top of the page
+Quote Post
kiepski96
post
Post #13





Grupa: Zarejestrowani
Postów: 233
Pomógł: 0
Dołączył: 22.02.2010

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


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. }
Go to the top of the page
+Quote Post
CuteOne
post
Post #14





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


nie.... widać nie znasz podstaw więc lepiej przygarnij na parę dni jakąś książkę o php i wtedy wróć z pytaniami
Go to the top of the page
+Quote Post
kiepski96
post
Post #15





Grupa: Zarejestrowani
Postów: 233
Pomógł: 0
Dołączył: 22.02.2010

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


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.
Go to the top of the page
+Quote Post
Quadina
post
Post #16





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

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


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


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
kiepski96
post
Post #17





Grupa: Zarejestrowani
Postów: 233
Pomógł: 0
Dołączył: 22.02.2010

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


Że wpisane dane są złe?

Ten post edytował kiepski96 20.12.2010, 07:30:28
Go to the top of the page
+Quote Post
patryczakowy
post
Post #18





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

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


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ć


--------------------
Sztuką jest widzieć to czego nie widać.
Go to the top of the page
+Quote Post
kiepski96
post
Post #19





Grupa: Zarejestrowani
Postów: 233
Pomógł: 0
Dołączył: 22.02.2010

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


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. ?>
Go to the top of the page
+Quote Post
patryczakowy
post
Post #20





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

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


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ł

Ten post edytował patryczakowy 24.12.2010, 11:44:24


--------------------
Sztuką jest widzieć to czego nie widać.
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 Aktualny czas: 20.08.2025 - 22:27