Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logowanie do panelu z pobraniem danych z mysql
Forum PHP.pl > Forum > Przedszkole
alpin19
Witam
Zaczynam pracę nad własnym prościutkim cms'em.
Robię logowanie w następujący sposób:

1. Formularz w którym podaję dane (login_form.php):
  1. <?php
  2.  
  3. <form name=&#092;"login_form\" action=\"login_check.php\" method=\"post\">
  4. <table cellspacing=&#092;"1\" cellpadding=\"1\" border=\"0\" align=\"center\" bgcolor=\"#527aa0\">
  5.  <tr>
  6.  <td id=&#092;"wybor\">
  7.  <font size=&#092;"2\">
  8.  <img src=&#092;"ikony/b_search.png\" alt=\"\"> &nbsp <b>Login:</b>
  9.  </font>
  10.  </td>
  11.  <td id=&#092;"login\">
  12.  <font size=&#092;"2\">
  13.  <input type=&#092;"text\" size=\"20\" name=\"login\" value=\"login\"></input> 
  14.  </font>
  15.  </td>
  16.  </tr>
  17.  <tr>
  18.  <td id=&#092;"wybor\">
  19.  <font size=&#092;"2\">
  20.  <img src=&#092;"ikony/b_search.png\" alt=\"\"> &nbsp <b>Password:</b>
  21.  </font>
  22.  </td>
  23.  <td id=&#092;"login\">
  24.  <font size=&#092;"2\">
  25.  <input type=&#092;"password\" size=\"20\" name=\"pass\" value=\"pass\"></input> 
  26.  </font>
  27.  </td>
  28.  </tr>
  29. </table>
  30. <table cellspacing=&#092;"1\" cellpadding=\"1\" border=\"0\" align=\"center\" bgcolor=\"#527aa0\">
  31.  <td id=&#092;"zatwierdz\">
  32.  <input type=&#092;"submit\" name=\"zaloguj\" value=\"zaloguj\">
  33.  <input type=&#092;"reset\" name=\"wyczyść\" value=\"wyczyść\">
  34.  <font size=&#092;"2\">
  35.  </font>
  36.  </td>
  37.  </tr>
  38. </table>
  39. </form>
  40.  
  41. ?>


2. Następnie przesyłam te dane do pliku sprawdzającego ich poprawność na podstawie wpisów w bazie MySQL (login_check.php):
  1. <?php
  2.  
  3. /* uproszczone logowanie */
  4.  
  5. $login = $_POST['login'];
  6. $pass = $_POST['pass'];
  7.  
  8. $mysql_host = 'localhost';
  9. $mysql_user = 'root';
  10. $mysql_pass = '';
  11. $mysql_db  = 'intranet';
  12.  
  13. @ mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die('Nie można połączyć z serwerem MySQL');
  14.  $get_db = mysql_select_db($mysql_db);
  15.  $zapytanie = &#092;"SELECT login, pass FROM admin_users WHERE id = '1'\";
  16.  $row = mysql_fetch_row($zapytanie);
  17.  
  18.  
  19. $admin = &#092;"$row[1]\";
  20. $admin_pass = &#092;"$row[2]\";
  21.  
  22. if($_POST['login'] == $admin && $_POST['pass'] == $admin_pass){
  23. $admin = $_POST['login']; 
  24. $_SESSION['login'] = $admin; 
  25.  
  26. $admin_pass = $_POST['pass']; 
  27. $_SESSION['pass'] = $admin_pass; 
  28.  
  29. print &#092;"<font size='2'><b>Logowanie przebiegło pomyślnie !</b></font><br />\";
  30. echo &#092;"<font size='2'>Kliknij <A HREF=\"index.php?\";
  31. echo &#092;"=\";
  32. echo &#092;"\"><b>tutaj</b></a> aby przejść dalej</font>\";
  33. footer();
  34. }
  35. elseif($_POST['login'] != $admin && $_POST['pass'] != $admin_pass){
  36. $admin = $_POST['login']; 
  37. $_SESSION['login'] = $admin; 
  38.  
  39. $admin_pass = $_POST['pass']; 
  40. $_SESSION['pass'] = $admin_pass; 
  41.  
  42. print &#092;"<font size='2'><b>Logowanie nie powiodło się !</b></font><br />\";
  43. }
  44.  
  45. ?>


3. Problem jest o tyle ciekawy, że jeśli pobieram dane z bazy MySQL logowanie nie udaje się.
  1. <?php
  2. @ mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die('Nie można połączyć z serwerem MySQL');
  3.  $get_db = mysql_select_db($mysql_db);
  4.  $zapytanie = &#092;"SELECT login, pass FROM admin_users WHERE id = '1'\";
  5.  $row = mysql_fetch_row($zapytanie);
  6.  
  7.  
  8. $admin = &#092;"$row[1]\";
  9. $admin_pass = &#092;"$row[2]\";
  10. ?>


Ale jeśli zadeklaruję nazwę usera i hasło w pliku na sztywno, czyli naprzykład:
  1. <?php
  2. /*
  3. @ mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die('Nie można połączyć z serwerem MySQL');
  4.  $get_db = mysql_select_db($mysql_db);
  5.    $zapytanie = \"SELECT login, pass FROM admin_users WHERE id = '1'\";
  6.    $row = mysql_fetch_row($zapytanie);
  7. */
  8.  
  9. $admin = 'user_1';
  10. $admin_pass = 'pass_1';
  11. ?>

Wówczas loguję się bez problemu :|

Proszę o pomoc sad.gif
kanji
A po co dajesz where id=1? Zawsze chcesz żeby tylko jedna osoba była zalogowana mianowicie usr ktory ma index 1? wydaje mi się że nie
spróbój tak tylko piszę to z głowy i na kacy ale idea jest dobra smile.gif
  1. <?
  2. $zapytanie=&#092;"Select * from admin, user\";
  3. $wynik=mysql_query($zapytanie);
  4. while($wiersz=mysql_fetch_array($wynik))
  5. {
  6.  if(($_POST['login'] == $wiersz['login']) && ($_POST['pass'] == $wiersz['pass']))
  7.  {
  8. zaloguj :];
  9. }
  10. else
  11. echo&#092;"nie mozna zalogowac\";
  12. }
  13. }
  14. ?>


Powinno pomóc smile.gif
alpin19
Zrobiłem tak:
  1. <?php
  2. @ mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die('Nie można połączyć z serwerem MySQL');
  3.  $get_db = mysql_select_db($mysql_db);
  4.  $zapytanie = &#092;"SELECT * FROM admin_users\";
  5.  $result = mysql_query($zapytanie);
  6.  while($wiersz = mysql_fetch_array($result))
  7. {
  8. if($_POST['login'] == $wiersz['login'] && $_POST['pass'] == $wiersz['pass'])
  9. {
  10.  $admin = $_POST['login']; 
  11. $_SESSION['login'] = $admin; 
  12.  
  13. $admin_pass = $_POST['pass']; 
  14. $_SESSION['pass'] = $admin_pass;
  15. print &#092;"<font size='2'><b>Logowanie przebiegło pomyślnie !</b></font><br />\";
  16. echo &#092;"<font size='2'>Kliknij <A HREF=\"index.php?\";
  17. echo &#092;"=\";
  18. echo &#092;"\"><b>tutaj</b></a> aby przejść dalej</font>\";
  19. footer();
  20. }
  21. elseif($_POST['login'] != $wiersz['login'] && $_POST['pass'] != $wiersz['pass']){
  22. $admin = $_POST['login']; 
  23. $_SESSION['login'] = $admin; 
  24.  
  25. $admin_pass = $_POST['pass']; 
  26. $_SESSION['pass'] = $admin_pass; 
  27.  
  28. print &#092;"<font size='2'><b>Logowanie nie powiodło się !</b></font><br />\";
  29. }
  30. }
  31. ?>


Ale teraz sytuacja się zagmatwała ponieważ skrypt zachowuje się tak jakby z MySQL'a pobierał tylko pierwszy wiersz w tabeli (czyli o ID = 1) i użytkownik o ID = 2 nie może się zalogować sad.gif
kanji
Zrób nawiasy w warunku snitch.gif to raz
a gdzie masz elseif zamien to na else, mi się wydaje że to wina że nie masz nawiasów, a pozatym on przeleci cała tabele i uzytkownik z id 2, czy 50 będzie mógł się zalogować Zrobisz nawasy to powinno zadziałać
alpin19
Możesz mi to "zademonstrować" bo nie zupełnie nie mogę tego przerobić. Wychodzą mi zupełne idiotyzmy sad.gif
kanji
  1. <?php
  2. @ mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die('Nie można połączyć z serwerem MySQL');
  3.  $get_db = mysql_select_db($mysql_db);
  4.  $zapytanie = &#092;"SELECT * FROM admin_users\";
  5.  $result = mysql_query($zapytanie);
  6.  while($wiersz = mysql_fetch_array($result))
  7. {
  8. if(($_POST['login'] == $wiersz['login']) && ($_POST['pass'] == $wiersz['pass']))
  9. {
  10.  $admin = $_POST['login']; 
  11. $_SESSION['login'] = $admin; 
  12.  
  13. $admin_pass = $_POST['pass']; 
  14. $_SESSION['pass'] = $admin_pass;
  15. print &#092;"<font size='2'><b>Logowanie przebiegło pomyślnie !</b></font><br />\";
  16. echo &#092;"<font size='2'>Kliknij <A HREF=\"index.php?\";
  17. echo &#092;"=\";
  18. echo &#092;"\"><b>tutaj</b></a> aby przejść dalej</font>\";
  19. footer();
  20. }
  21. else{
  22. $admin = $_POST['login']; 
  23. $_SESSION['login'] = $admin; 
  24.  
  25. $admin_pass = $_POST['pass']; 
  26. $_SESSION['pass'] = $admin_pass; 
  27.  
  28. print &#092;"<font size='2'><b>Logowanie nie powiodło się !</b></font><br />\";
  29. }
  30. }
  31. ?>


A tak pozatym napisz jakie Ci błędy wychodzą To wkelj sobie bo masz już przeobione snitch.gif
alpin19
Hmmm, dzieje się dokładnie to samo - loguje się tylko pierwszy user sad.gif
PeHaPowiec
  1. <?php
  2.  $zapytanie = &#092;"SELECT login, pass FROM admin_users WHERE login = '$login'\"; 
  3. ?>


Moze tak sprobuj

  1. <?php
  2. [/php] 
  3. WHERE login='$login' AND pass=PASSWORD('$pass') 
  4. ?>


pozdrawiam
kanji
Hmm... dlaczego w else dalej masz logowanie?

  1. <?php
  2. @ mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die('Nie można połączyć z serwerem MySQL');
  3.  $get_db = mysql_select_db($mysql_db);
  4.  $zapytanie = &#092;"SELECT * FROM admin_users\";
  5.  $result = mysql_query($zapytanie);
  6.  while($wiersz = mysql_fetch_array($result))
  7. {
  8. if(($_POST['login'] == $wiersz['login']) && ($_POST['pass'] == $wiersz['pass']))
  9. {
  10.  $admin = $_POST['login']; 
  11. $_SESSION['login'] = $admin; 
  12.  
  13. $admin_pass = $_POST['pass']; 
  14. $_SESSION['pass'] = $admin_pass;
  15. print &#092;"<font size='2'><b>Logowanie przebiegło pomyślnie !</b></font><br />\";
  16. echo &#092;"<font size='2'>Kliknij <A HREF=\"index.php?\";
  17. echo &#092;"=\";
  18. echo &#092;"\"><b>tutaj</b></a> aby przejść dalej</font>\";
  19. footer();
  20. }
  21. else{
  22. print &#092;"<font size='2'><b>Logowanie nie powiodło się !</b></font><br />\";
  23. }
  24. }
  25. ?>

Zrób tak, a jeżeli dalej Ci się loguje tylko 1 usr to znaczy że masz może gdzieś indziej błąd Może w bazie, zobacz czy napewno masz więcej usr w bazie
alpin19
Dalej dzieje się to samo. Sprawdziłem kilkanaście razy tabele w bazie i wszystko jest jak należy, więc nic nie rozumiem sad.gif
kanji
Na początku dodaj jeszcze session_start()
Levabul
Może tak ...

  1. <?php
  2.  
  3. /* uproszczone logowanie */
  4.  
  5. $login = $_POST['login'];
  6. $pass = $_POST['pass'];
  7.  
  8. $mysql_host = 'localhost';
  9. $mysql_user = 'root';
  10. $mysql_pass = '';
  11. $mysql_db  = 'intranet';
  12.  
  13. @ mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die('Nie można połączyć z serwerem MySQL');
  14.  $get_db = mysql_select_db($mysql_db);
  15.  $zapytanie = &#092;"SELECT pass FROM admin_users WHERE login = '$login'\";
  16.  while($row = mysql_fetch_array($zapytanie))
  17.  $admin_pass = $row[pass];
  18.  
  19. if($pass == $admin_pass){
  20. $admin = $_POST['login'];
  21. $_SESSION['login'] = $admin;
  22.  
  23. $admin_pass = $_POST['pass'];
  24. $_SESSION['pass'] = $admin_pass;
  25.  
  26. print &#092;"<font size='2'><b>Logowanie przebiegło pomyślnie !</b></font><br />\";
  27. echo &#092;"<font size='2'>Kliknij <A HREF=\"index.php?\";
  28. echo &#092;"=\";
  29. echo &#092;"\"><b>tutaj</b></a> aby przejść dalej</font>\";
  30. footer();
  31. }
  32. elseif($pass !== $admin_pass){
  33.  
  34. print &#092;"<font size='2'><b>Logowanie nie powiodło się !</b></font><br />\";
  35. }
  36.  
  37. ?>
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.