Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błąd w logowaniu
Forum PHP.pl > Forum > PHP
pb17
Mam problem z logowaniem, zawsze wyskakuje mi: niezalogowany.
Pliki admin.php
  1. <?php
  2. if(isset($_POST['login']) && isset($_POST['password']))
  3. {
  4. $login = $_POST['login'];
  5. $password = $_POST['password'];
  6.  
  7. $lacz = new mysqli('localhost', 'sonic', 'sonic', 'mycms');
  8. if (mysqli_connect_errno())
  9. {
  10. echo 'Połączenie z bazą danych nie powiodło się: '.mysqli_connect_error();
  11. exit();
  12. }
  13. $zapytanie = 'select * from users '."where user='$login' "." and password=md5('$password')";
  14.  
  15. $wynik = $lacz->query($zapytanie);
  16. if($wynik->num_rows > 0)
  17. {
  18. // jeżeli dane są w bazie, zarejestrowanie identyfikatora użytkownika
  19. $_SESSION['user'] = $login;
  20. }
  21. $lacz->close();
  22. }
  23. ?>
  24. <html>
  25. <head>
  26. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  27. <title>Panel Administracyjny</title>
  28. <link rel="stylesheet" href="admin_style.css" type="text/css">
  29. </head>
  30. <span="font12">
  31. </span>
  32. <body>
  33. <?php
  34. if(isset($_SESSION['user']))
  35. {
  36. echo 'Użytkownik zalogowany jako: '.$_SESSION['user'].'<br />';
  37. echo '<a href="wylog.php">Wylogowanie</a><br />';
  38. }
  39. else
  40. {
  41. if(isset($user))
  42. {
  43. // jeżeli próba logowania była nieudana
  44. echo 'Zalogowanie niemożliwe.<br />';
  45. }
  46. else
  47. {
  48. // nie było próby logowania lub nastąpiło wylogowanie
  49. echo 'Użytkownik niezalogowany.<br />';
  50. }
  51. echo '<table align="center">';
  52. echo '<tr><td><br />';
  53. echo '<div id="font12">';
  54. echo '<div id="font11">';
  55. echo '<table id="table_all" cellpadding="3" cellspacing="0">';
  56. echo '<form method="post" action="admin_site.php">';
  57. echo '<tr><td id="td_header_orange" valign="top">Login: </td>';
  58. echo '<td valign="top">';
  59. echo '<input id="form_input" type="text" name="login"></td></tr>';
  60. echo '<tr><td id="td_header_orange" valign="top">Hasło:</td>';
  61. echo '<td valign="top">';
  62. echo '<input id="form_input" type="password" name="password"></td></tr>';
  63. echo '<tr><td id="td_header_orange" valign="top">';
  64. echo '<input id="form_button" type="submit" value=" ZALOGUJ ">';
  65. echo '</td></tr></form></div></div></td></tr></table>';
  66. }
  67. ?>
  68. </body>
  69. </html>


i plik na który dostęp ma tylko zalogowany: admin_site.php
  1. <?php
  2. echo '<h1>=]</h1>';
  3. if(isset($_SESSION['user']))
  4. {
  5. echo '<p>Użytkownik zalogowany jako '.$_SESSION['user'].'</p>';
  6. echo '<p>Oto zawartość dostępna tylko dla administratora</p>';
  7. }
  8. else
  9. {
  10. echo '<p>Użytkownik niezalogowany.</p>';
  11. echo '<p>Tylko zalogowani użytkownicy mogą przeglądać zawartość tej strony.</p>';
  12. }
  13. echo '<a href="admin.php">Powrót do strony logowania</a>';
  14. ?>


Prosze o pomoc, jestem średnio początkujący
strife
Witam,

Zobacz czy napewno dana zmienna sesyjna zostaje dodawana, w linijce 19 w pierwszym pliku napisz
  1. <?php
  2. // ..
  3. die('sesja dodana');
  4. // ..
  5. ?>

Jeżeli to się pojawi znaczy, że warunek został spełniony, zmienna prawdopodobnie zostaje dodana i błąd tkwi gdzie indziej. Wtedy na początku skryptu dodaj:
  1. <?php
  2. echo '<pre>';
  3. var_export($_SESSION);
  4. echo '</pre>';
  5. ?>

żeby się napewno przekonać, czy zmienna nie istnieje.

Pozdrawiam!
pb17
Gdy dodałem do pierwszego pliku:
  1. <?php
  2. die('sesja dodana');
  3. ?>

nic się nie pokazało, natomiast gdy dodałem na początku:
  1. <?php
  2. echo '<pre>';
  3. var_export($_SESSION);
  4. echo '</pre>';
  5. ?>

pojawiły się błędy:

NULL


Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at c:\usr\apache\httpd\html\myCMS\admin.php:2) in c:\usr\apache\httpd\html\myCMS\admin.php on line 7

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at c:\usr\apache\httpd\html\myCMS\admin.php:2) in c:\usr\apache\httpd\html\myCMS\admin.php on line 7

Plik teraz wygląda tak:
  1. <?php
  2. echo '<pre>';
  3. var_export($_SESSION);
  4. echo '</pre>';
  5. ?>
  6. <?php
  7. if(isset($_POST['login']) && isset($_POST['password']))
  8. {
  9. $login = $_POST['login'];
  10. $password = $_POST['password'];
  11.  
  12. $lacz = new mysqli('localhost', 'sonic', 'sonic', 'mycms');
  13. if (mysqli_connect_errno())
  14. {
  15. echo 'Połączenie z bazą danych nie powiodło się: '.mysqli_connect_error();
  16. exit();
  17. }
  18. $zapytanie = 'select * from users '."where user='$login' "." and password=md5('$password')";
  19.  
  20. $wynik = $lacz->query($zapytanie);
  21. if($wynik->num_rows > 0)
  22. {
  23. die('sesja dodana');
  24. $_SESSION['user'] = $login;
  25. }
  26. $lacz->close();
  27. }
  28. ?>
  29. <html>
  30. <head>
  31. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  32. <title>Panel Administracyjny</title>
  33. <link rel="stylesheet" href="admin_style.css" type="text/css">
  34. </head>
  35. <span="font12">
  36. </span>
  37. <body>
  38. <?php
  39. if(isset($_SESSION['user']))
  40. {
  41. echo 'Użytkownik zalogowany jako: '.$_SESSION['user'].'<br />';
  42. echo '<a href="wylog.php">Wylogowanie</a><br />';
  43. }
  44. else
  45. {
  46. if(isset($user))
  47. {
  48. // jeżeli próba logowania była nieudana
  49. echo 'Zalogowanie niemożliwe.<br />';
  50. }
  51. else
  52. {
  53. // nie było próby logowania lub nastąpiło wylogowanie
  54. echo 'Użytkownik niezalogowany.<br />';
  55. }
  56. echo '<table align="center">';
  57. echo '<tr><td><br />';
  58. echo '<div id="font12">';
  59. echo '<div id="font11">';
  60. echo '<table id="table_all" cellpadding="3" cellspacing="0">';
  61. echo '<form method="post" action="admin_site.php">';
  62. echo '<tr><td id="td_header_orange" valign="top">Login: </td>';
  63. echo '<td valign="top">';
  64. echo '<input id="form_input" type="text" name="login"></td></tr>';
  65. echo '<tr><td id="td_header_orange" valign="top">Hasło:</td>';
  66. echo '<td valign="top">';
  67. echo '<input id="form_input" type="password" name="password"></td></tr>';
  68. echo '<tr><td id="td_header_orange" valign="top">';
  69. echo '<input id="form_button" type="submit" value=" ZALOGUJ ">';
  70. echo '</td></tr></form></div></div></td></tr></table>';
  71. }
  72. ?>
  73. </body>
  74. </html>
strife
No to sam sobie odpowiedziałeś na pytanie, warunek w linijkach 17-21 nie jest spełniony oznacza to, że Twoja zmienna sesyjna nie zostanie dodana. Teraz musisz dojść czemu tak się dzieje, zobacz czy zapytanie masz dobrze napisane ( mysql_error" title="Zobacz w manualu php" target="_manual ) i czy w bazie napewno istnieją takie rekordy do których się odwołujesz.

Tak na przyszłość, sprawdzaj wartość zmiennych poprzez funkcje do tego przeznaczone ( print_r, var_export itd ). Unikniesz wtedy błędów.
pb17
Możesz dokładnie mi powiedzieć co mam zmienić?
zmodyfikowałem troszke kod:
  1. <?php
  2. echo '<pre>';
  3. var_export($_SESSION);
  4. echo '</pre>';
  5. if(isset($_POST['login']) && isset($_POST['password']))
  6. {
  7. $login = $_POST['login'];
  8. $password = $_POST['password'];
  9.  
  10. $lacz = mysqli_connect('localhost', 'root', 'krasnal', 'mycms');
  11. if (!$lacz)
  12. {
  13. echo 'Połączenie z bazą danych nie powiodło się: '.mysqli_connect_error();
  14. exit();
  15. }
  16. $zapytanie = 'select * from users '."where user='$login' "." and password=md5('$password')";
  17.  
  18. $wynik = $lacz->query($zapytanie);
  19. if($wynik->num_rows > 0)
  20. {
  21. die('sesja dodana');
  22. $_SESSION['user'] = $login;
  23. }
  24. $lacz->close();
  25. }
  26. ?>
  27. <html>
  28. <head>
  29. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  30. <title>Panel Administracyjny</title>
  31. <link rel="stylesheet" href="admin_style.css" type="text/css">
  32. </head>
  33. <span="font12">
  34. </span>
  35. <body>
  36. <?php
  37. if(isset($_SESSION['user']))
  38. {
  39. echo 'Użytkownik zalogowany jako: '.$_SESSION['user'].'<br />';
  40. echo '<a href="wylog.php">Wylogowanie</a><br />';
  41. }
  42. else
  43. {
  44. if(isset($user))
  45. {
  46. // jeżeli próba logowania była nieudana
  47. echo 'Zalogowanie niemożliwe.<br />';
  48. }
  49. else
  50. {
  51. // nie było próby logowania lub nastąpiło wylogowanie
  52. echo 'Użytkownik niezalogowany.<br />';
  53. }
  54. echo '<table align="center">';
  55. echo '<tr><td><br />';
  56. echo '<div id="font12">';
  57. echo '<div id="font11">';
  58. echo '<table id="table_all" cellpadding="3" cellspacing="0">';
  59. echo '<form method="post" action="admin_site.php">';
  60. echo '<tr><td id="td_header_orange" valign="top">Login: </td>';
  61. echo '<td valign="top">';
  62. echo '<input id="form_input" type="text" name="login"></td></tr>';
  63. echo '<tr><td id="td_header_orange" valign="top">Hasło:</td>';
  64. echo '<td valign="top">';
  65. echo '<input id="form_input" type="password" name="password"></td></tr>';
  66. echo '<tr><td id="td_header_orange" valign="top">';
  67. echo '<input id="form_button" type="submit" value=" ZALOGUJ ">';
  68. echo '</td></tr></form></div></div></td></tr></table>';
  69. }
  70. ?>
  71. </body>
  72. </html>

teraz pojawia mi się tylko:
array (
)

ale dalej nie da się zalogować, kod który użyłem do stworzenia bazy danych to:
  1. CREATE DATABASE mycms;
  2. USE mycms;
  3. CREATE TABLE users (
  4. user varchar(20) NOT NULL,
  5. password varchar(40) NOT NULL,
  6. PRIMARY KEY (user)
  7. );
  8. INSERT INTO users VALUES
  9. ('admin', md5('admin'));
strife
Witam ponownie,

Przeanalizowałem ten Twój skrypt od nowa i myślę, że błąd masz tutaj:
  1. <?php
  2. echo '<form method="post" action="admin_site.php">';
  3. ?>

Wysyłasz dane post'em, do strony, w której nie ma żadnych instrukcji tworzących tą sesję. Musisz zmienić to w Twoim przypadku na
  1. <?php
  2. echo '<form method="post" action="admin.php">';
  3. ?>


I powinno śmigać. Dodam, jeszcze, że jak chcesz od razu po zalogowaniu przekierować na stronę administracyjną to zapoznaj się z header" title="Zobacz w manualu php" target="_manual

Pozdrawiam!
pb17
Poczytałem troszke o tym header i wydeje mi się że trzeba go wstawić po spełnieniu funkcji, lecz to nie działa, gdybyś mógł jeszcze tylko to napisać to byłbym Ci bardzo wdzięczny
Ja mam coś takiego:
  1. <?php
  2. var_export($_SESSION);
  3. if(isset($_POST['login']) && isset($_POST['password']))
  4. {
  5. $login = $_POST['login'];
  6. $password = $_POST['password'];
  7.  
  8. $lacz = mysqli_connect('localhost', 'root', 'krasnal', 'mycms');
  9. if(!$lacz)
  10. {
  11. echo 'Połączenie z bazą danych nie powiodło się: '."mysqli_connect_error()";
  12. }
  13. $zapytanie = 'select * from users '."where user='$login' "."and password=md5('$password')";
  14.  
  15. $wynik = $lacz->query($zapytanie);
  16. if($wynik->num_rows > 0)
  17. {
  18. die('sesja dodana');
  19. $_SESSION['user'] = $login;
  20. }
  21. $lacz->close();
  22. }
  23. ?>
  24. <html>
  25. <head>
  26. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  27. <title>Panel Administracyjny</title>
  28. <link rel="stylesheet" href="admin_style.css" type="text/css">
  29. </head>
  30. <span="font12">
  31. </span>
  32. <body>
  33. <?php
  34. if(isset($_SESSION['user']))
  35. {
  36. echo 'Użytkownik zalogowany jako: '.$_SESSION['user'].'<br />';
  37. echo '<a href="wylog.php">Wylogowanie</a><br />';
  38. header('location: admin_site.php');  #### tu dałem header
  39. }
  40. else
  41. {
  42. if(isset($login))
  43. {
  44. // jeżeli próba logowania była nieudana
  45. echo 'Zalogowanie niemożliwe.<br />';
  46. }
  47. else
  48. {
  49. // nie było próby logowania lub nastąpiło wylogowanie
  50. echo 'Użytkownik niezalogowany.<br />';
  51. }
  52. echo '<table align="center">';
  53. echo '<tr><td><br />';
  54. echo '<div id="font12">';
  55. echo '<div id="font11">';
  56. echo '<table id="table_all" cellpadding="3" cellspacing="0">';
  57. echo '<form method="post" action="admin.php">';
  58. echo '<tr><td id="td_header_orange" valign="top">Login: </td>';
  59. echo '<td valign="top">';
  60. echo '<input id="form_input" type="text" name="login"></td></tr>';
  61. echo '<tr><td id="td_header_orange" valign="top">Hasło:</td>';
  62. echo '<td valign="top">';
  63. echo '<input id="form_input" type="password" name="password"></td></tr>';
  64. echo '<tr><td id="td_header_orange" valign="top">';
  65. echo '<input id="form_button" type="submit" value=" ZALOGUJ ">';
  66. echo '</td></tr></form></div></div></td></tr></table>';
  67. }
  68. ?>
  69. </body>
  70. </html>

plik admin_site.php
  1. <?php
  2. var_export($_SESSION);
  3. echo '<h1>text</h1>';
  4. if(isset($_SESSION['user']))
  5. {
  6. echo '<p>Użytkownik zalogowany jako '.$_SESSION['user'].'</p>';
  7. echo '<p>Oto zawartość dostępna tylko dla administratora</p>';
  8. }
  9. else
  10. {
  11. echo '<p>Użytkownik niezalogowany.</p>';
  12. echo '<p>Tylko zalogowani użytkownicy mogą przeglądać zawartość tej strony.</p>';
  13. }
  14. echo '<a href="admin.php">Powrót do strony logowania</a>';
  15. ?>
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.