Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Logowanie użytkowników - problem
Forum PHP.pl > Forum > Przedszkole
gogomania
Kawałek kodu strony logowanie.php
  1. <?php
  2. if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['form_name'] == 'loginform')
  3. {
  4. $success_page = './info_dodaj.php';
  5. $error_page = './error_page.html';
  6. $mysql_server = 'localhost';
  7. $mysql_login = 'root';
  8. $mysql_haslo = '';
  9. $mysql_database = 'www';
  10. $mysql_table = 'uzytkownicy';
  11. $crypt_pass = md5($_POST['haslo']);
  12. $found = false;
  13. $imie = '';
  14.  
  15. $db = mysql_connect($mysql_server, $mysql_login, $mysql_haslo);
  16. if (!$db)
  17. {
  18. die('Failed to connect to database server!<br>'.mysql_error());
  19. }
  20. mysql_select_db($mysql_database, $db) or die('Failed to select database<br>'.mysql_error());
  21. mysql_query("set charset latin2");
  22. $sql = "SELECT haslo, imie, status FROM ".$mysql_table." WHERE login = '".mysql_real_escape_string($_POST['login'])."'";
  23. $result = mysql_query($sql, $db);
  24. if ($data = mysql_fetch_array($result))
  25. {
  26. if ($crypt_pass == $data['haslo'] && $data['status'] != 0)
  27. {
  28. $found = true;
  29. $imie = $data['imie'];
  30. }
  31. }
  32. if($found == false)
  33. {
  34. header('Location: '.$error_page);
  35. }
  36. else
  37. {
  38. if (session_id() == "")
  39. {
  40. }
  41. $_SESSION['login'] = $_POST['login'];
  42. $_SESSION['imie'] = $imie;
  43. $rememberme = isset($_POST['rememberme']) ? true : false;
  44. if ($rememberme)
  45. {
  46. setcookie('login', $_POST['login'], time() + 3600*24*30);
  47. setcookie('haslo', $_POST['haslo'], time() + 3600*24*30);
  48. }
  49. header('Location: '.$success_page);
  50. }
  51. }
  52. $login = isset($_COOKIE['login']) ? $_COOKIE['login'] : '';
  53. $haslo = isset($_COOKIE['haslo']) ? $_COOKIE['haslo'] : '';
  54. ?>

  1. <meta http-equiv="Content-Language" content="pl">
  2. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">
  3. <title>Serwis - Logowanie</title>
  4. <meta name="author" content="Bogumił Kraszewski">
  5. <link rel="shortcut icon" href="Favorites.ico">
  6. <style type="text/css">
  7. html, body
  8. function Validateloginform(theForm)
  9. {
  10. var regexp;
  11. regexp = /^[A-Za-zAÁÂAÄAAÇEÉEËIÍÎIDNOÓÔOÖOUÚUÜÝ?ßaáâaäaaçeéeëiíîi?noóôoöouúuüý?y0-9-]*$/;
  12. if (!regexp.test(theForm.Editbox1.value))
  13. {
  14. alert("Wpisz Login!");
  15. theForm.Editbox1.focus();
  16. return false;
  17. }
  18. if (theForm.Editbox1.value == "")
  19. {
  20. alert("Wpisz Login!");
  21. theForm.Editbox1.focus();
  22. return false;
  23. }
  24. if (theForm.Editbox2.value == "")
  25. {
  26. alert("Wpisz Hasło!");
  27. theForm.Editbox2.focus();
  28. return false;
  29. }
  30. return true;
  31. }
  32. //-->
  33. <script type="text/javascript" src="./wwb8.js"></script>
  34. </head>
  35. <div id="space"><br></div>
  36. <div id="container">
  37. <div id="wb_Shape10" style="position:absolute;left:249px;top:0px;width:402px;height:52px;z-index:10;">
  38. <img src="images/logowanie_0011.png" id="Shape10" alt="" style="border-width:0;width:402px;height:52px;"></div>
  39. <div id="wb_loginform" style="position:absolute;left:231px;top:90px;width:436px;height:199px;z-index:11;">
  40. <form name="loginform" method="post" action="<?php echo basename(__FILE__); ?>" id="loginform" onsubmit="return Validateloginform(this)">
  41. <input type="hidden" name="form_name" value="loginform">
  42. <div id="wb_lock1" style="position:absolute;left:0px;top:0px;width:180px;height:180px;z-index:0;">
  43. <img src="images/login.png" id="lock1" alt="" border="0" style="width:180px;height:180px;"></div>
  44. <div id="wb_Text2" style="position:absolute;left:176px;top:28px;width:78px;height:18px;text-align:right;z-index:1;">
  45. <div><span style="color:#000000;font-family:Tahoma;font-size:15px;"> Login</span></div>
  46. </div>
  47. <div id="wb_Text3" style="position:absolute;left:176px;top:69px;width:78px;height:18px;text-align:right;z-index:2;">
  48. <div><span style="color:#000000;font-family:Tahoma;font-size:15px;"> Hasło</span></div>
  49. </div>
  50. <hr id="Line1" class="ui-widget-header" style="margin:0;padding:0;position:absolute;left:181px;top:150px;width:237px;heigh
    t:1px;z-index:3;"
    >
  51. <input type="text" id="Editbox1" onfocus="SetStyle('Editbox1', 'stylramkafocus1');return false;" onblur="SetStyle('Editbox1', 'stylramka1');return false;" class="stylramka1" style="position:absolute;left:264px;top:25px;width:148px;height:23px;line-height:23px;z-index:4;" name="login" value="<?php echo $login; ?>">
  52. <input type="password" id="Editbox2" onfocus="SetStyle('Editbox2', 'stylramkafocus1');return false;" onblur="SetStyle('Editbox2', 'stylramka1');return false;" class="stylramka1" style="position:absolute;left:264px;top:65px;width:148px;height:23px;line-height:23px;z-index:5;" name="haslo" value="<?php echo $haslo; ?>">
  53. <button id="AdvancedButton1" onmouseover="ShowObjectWithEffect('AdvancedButton2', 0, 'fade', 300);return false;" onmouseout="ShowObjectWithEffect('AdvancedButton2', 1, 'fade', 300);return false;" type="submit" name="login" value="Loguj" class="button1" style="position:absolute;left:184px;top:164px;width:110px;height:25px;z-index:6;"><div style="text-align:center"><span style="color:#FFFFFF;font-family:Tahoma;font-size:15px">Loguj</span></div></button>
  54. <button id="AdvancedButton2" onmouseover="ShowObjectWithEffect('AdvancedButton1', 0, 'fade', 300);return false;" onmouseout="ShowObjectWithEffect('AdvancedButton1', 1, 'fade', 300);return false;" type="button" onclick="window.location='rejestracja.php'" name="" value="rejestruj" class="button1" style="position:absolute;left:312px;top:164px;width:110px;height:25px;z-index:7;"><div style="text-align:center"><span style="color:#FFFFFF;font-family:Tahoma;font-size:15px">Rejestracja</span></div></button>
  55. <div id="wb_Text8" style="position:absolute;left:282px;top:105px;width:100px;height:16px;z-index:8;text-align:left;">
  56. <span style="color:#000000;font-family:Tahoma;font-size:13px;">Pamiętaj mnie</span></div>
  57. <input type="checkbox" id="rememberme" name="rememberme" value="on" style="position:absolute;left:265px;top:104px;z-index:9;">
  58. </form>
  59. </div>
  60. <div id="wb_Text5" style="position:absolute;left:231px;top:308px;width:438px;height:16px;text-align:center;z-index:12;">
  61. <div><span style="color:#000000;font-family:Tahoma;font-size:13px;"> WprowadĽ nazwę użytkownika (<strong>Login</strong>) oraz <strong>hasło</strong> aby rozpocząć pracę.</span></div>
  62. </div>
  63.  
  64. </div>
  65. </body>
  66. </html>


Moja tabela `użytkownicy`:
  1. CREATE TABLE IF NOT EXISTS `uzytkownicy` (
  2. `user_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `login` varchar(25) NOT NULL,
  4. `imie` varchar(100) NOT NULL,
  5. `nazwisko` varchar(100) NOT NULL,
  6. `haslo` varchar(50) NOT NULL,
  7. `data_rejestracji` datetime NOT NULL,
  8. `status` tinyint(1) NOT NULL,
  9. PRIMARY KEY (`user_id`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;


Problem: nie mogę zalogować się użytkownikiem, który jest w bazie. Nie wyświetla mi żadnego błędu mysql, jedynie przekierowuje mnie na error_page.html w przypadku niepoprawnego zalgowania.
Stworzyłem użytkownika "a" z takim samym nazwiskiem, hasłem itd... status ręcznie zmieniłem na "1" w bazie (1 = aktywny).

Pytanie: co w tym kodzie jest źle wpisane? Pewnie jakaś błachostka, ale spać mi to nie daje sad.gif
Domyślam się, że to może być błąd w formularzu, tylko gdzie?
Proszę o pomoc.
Ruch Radzionków
spróbuj zamiast

  1. if ($crypt_pass == $data['haslo'] && $data['status'] != 0)


daj to
  1. if (($crypt_pass == $data['haslo']) || ($data['status'] == "1"))


gogomania
Niestety: error_page.html
Jakieś inne pomysły?
Ruch Radzionków
usun header i daj w

  1. if ($data = mysql_fetch_array($result))
  2. {

np.
  1. echo '1';

także w innych miejscach i sprawdz czy ci pokazuje jak pokazuje to jest dobrze jak nie to znaczy że coś z tym kodem jest nie tak chodzi mi bedziesz wiedział do jakiego momentu działa poprawnie
gogomania
  1. if ($data = mysql_fetch_array($result))
  2. { echo '1';
  3. if (($crypt_pass == $data['haslo']) || ($data['status'] == "1"))
  4. {
  5. $found = true;
  6. $imie = $data['imie'];
  7. }
  8. }
  9. if($found == false)
  10. { echo '2';
  11. // header('Location: '.$error_page);
  12. }
  13. else
  14. {
  15. if (session_id() == "")
  16. {
  17. }
  18. $_SESSION['login'] = $_POST['login'];
  19. $_SESSION['imie'] = $imie;
  20. $rememberme = isset($_POST['rememberme']) ? true : false;
  21. if ($rememberme)
  22. {
  23. setcookie('login', $_POST['login'], time() + 3600*24*30);
  24. setcookie('haslo', $_POST['haslo'], time() + 3600*24*30);
  25. }
  26. // header('Location: '.$success_page);
  27. }
  28. }
  29. $login = isset($_COOKIE['login']) ? $_COOKIE['login'] : '';
  30. $haslo = isset($_COOKIE['haslo']) ? $_COOKIE['haslo'] : '';


na stronie wyświetla mi "2". czyli na tym miejscu "echo '2'; się zatrzymuje skrypt, co powinienem zrobić w takiej sytuacji?
Próbowałem dać echo mysql_error() ale nic nie pokazało.
Ruch Radzionków
zamiast tego
  1. $sql = "SELECT haslo, imie, status FROM ".$mysql_table." WHERE login = '".mysql_real_escape_string($_POST['login'])."'";
  2. $result = mysql_query($sql, $db);

daj to
  1. $result = mysql_query("SELECT * FROM ".$mysql_table." WHERE login = '$_POST['login']'");
gogomania
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\xampp\htdocs\logowanie.php on line 26

Wracając do pierwszego postu może to jednak problem tkwi w źle skonfigurowanym formularzu w kodzie html? Wiem, że to duże poświęcenie pomagać ludziom, ale jakbyś mógł spojrzeć na ten kod html...
Spawnm
Forum nie parser, nie przychodź do nas z błędami typu 'Parse error: syntax error'.
W podanym zapytaniu wyraźnie widać błąd z $_POST, popraw.
Ruch Radzionków
zapomiałem ci usunac tego
  1. '$_POST['login']'

na
  1. '$_POST[login]'
Spawnm
Zmienne przed dodaniem do sql filtruje się przez mysql_real_escape_string
gogomania
Nic nie szkodzi, osobiście już mam dość tego problemu - też sie nie pokapowałem więc dodałem po prostu zmienna $login = $_POST['login'];
ale już powoli zaczynam rozumieć jak to rozwiązać i chyba jestem coraz bliżej celu.
  1. // $sql = "SELECT haslo, imie, status FROM ".$mysql_table." WHERE login = '".mysql_real_escape_string($_POST['login'])."'";
  2. // $result = mysql_query($sql, $db);
  3. $result = mysql_query("SELECT * FROM ".$mysql_table." WHERE login = ".$login."") or die(mysql_error());
  4. if ($data = mysql_fetch_array($result))
  5. {
  6. if (($crypt_pass == $data['haslo']) || ($data['status'] == "1"))
  7. {
  8. $found = true;
  9. $imie = $data['imie'];
  10. }
  11. }
  12. if($found == false)
  13. { echo 'błąd 1';
  14. // header('Location: '.$error_page);
  15. }
  16. else
  17. {
  18. if (session_id() == "")
  19. { echo 'błąd 2';
  20. }
  21. $_SESSION['login'] = $_POST['login'];
  22. $_SESSION['imie'] = $imie;
  23. $rememberme = isset($_POST['rememberme']) ? true : false;
  24. if ($rememberme)
  25. { echo 'błąd 3';
  26. setcookie('login', $_POST['login'], time() + 3600*24*30);
  27. setcookie('haslo', $_POST['haslo'], time() + 3600*24*30);
  28. }
  29. // header('Location: '.$success_page);
  30. }
  31. }
  32. $login = isset($_COOKIE['login']) ? $_COOKIE['login'] : '';
  33. $haslo = isset($_COOKIE['haslo']) ? $_COOKIE['haslo'] : '';
  34. ?>

Na chwilę obecną trochę zmodernizowałem kod i wywaliło mi błąd: Unknown column 'Loguj' in 'where clause'

Czyli coś napieprzyłem w kodzie html
  1. <button id="AdvancedButton1" onmouseover="ShowObjectWithEffect('AdvancedButton2', 0, 'fade', 300);return false;" onmouseout="ShowObjectWithEffect('AdvancedButton2', 1, 'fade', 300);return false;" type="submit" name="login" value="Loguj" class="button1" style="position:absolute;left:184px;top:164px;width:110px;height:25px;z-index:6;"><div style="text-align:center"><span style="color:#FFFFFF;font-family:Tahoma;font-size:15px">Loguj</span></div></button>


value zmieniłem na:
  1. value="login"


I na chwilę obecną wyrzuca mi echo 'błąd 2' czyli na tym miejscu zatrzymuje się skrypt;
  1. if (session_id() == "")
  2. { echo 'błąd 2';
  3. }
Ruch Radzionków
spróbuj zamiast:

  1. $rememberme = isset($_POST['rememberme']) ? true : false;
  2. if ($rememberme)
  3. {

dac
  1. if (isset($_POST['rememberme']))
  2. {
gogomania
  1. $result = mysql_query("SELECT * FROM ".$mysql_table." WHERE login = '$_POST[login]'") or die(mysql_error());
  2. if ($data = mysql_fetch_array($result))
  3. {
  4. if (($crypt_pass == $data['haslo']) || ($data['status'] == "1"))
  5. {
  6. $found = true;
  7. $imie = $data['imie'];
  8. }
  9. }
  10. if($found == false)
  11. { echo 'błąd 1';
  12. // header('Location: '.$error_page);
  13. }
  14. else
  15. {
  16. if (session_id() == "")
  17. { echo 'błąd 2';
  18. }
  19. $_SESSION['login'] = $_POST['login'];
  20. $_SESSION['imie'] = $imie;
  21.  
  22. if (isset($_POST['rememberme']))
  23. { echo 'błąd 3';
  24. setcookie('login', $_POST['login'], time() + 3600*24*30);
  25. setcookie('haslo', $_POST['haslo'], time() + 3600*24*30);
  26. }
  27. header('Location: '.$success_page);
  28. }
  29. }
  30. $login = isset($_COOKIE['login']) ? $_COOKIE['login'] : '';
  31. $haslo = isset($_COOKIE['haslo']) ? $_COOKIE['haslo'] : '';
  32. ?>


Wypluło mi błąd 1.
Na dzisiaj już się poddaję, jutro ze świeżym umysłem powalczę z tym problemem. Dziękuję za dzisiejszą pomoc.

Udało się, dla potomnych może się przydać odpwoiedź. Nie może być dwa razy użyte name"login" i po prostu formularz przejmował wartość z buttona podczas przycisku logowania, zmieniłem wartość na name="loginbut" i działa smile.gif Przechwytuje wartość z formularza i poprawnie mogę się zalogować. Co prawda po chwili wypieprza mnie do strony error_page.html ale to już pikuś, teraz z górki. Dziękuję za poświęcony czas.
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.