Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]/[MySQL] - problem z zapytanie:/
Forum PHP.pl > Forum > Przedszkole
Szypa
Mam problem z zapytanie do SQL`a. Tak wyglądała rejestracja:

  1. <?php
  2. $zapytanie = 'INSERT INTO uzytkownicy (user_id, uzytkownik, haslo, email, data) VALUES (0, "'.$_POST['uzytkownik'].'", "'.crypt($_POST['haslo1']).'", "'.$_POST['email'].'", now())';
  3. ?>


A tak wygląda cały skrypt logowania:

  1. <?php
  2. ini_set ('display_errors', 1);
  3. error_reporting (E_ALL & ~E_NOTICE);
  4. $tytul = "Logowanie";
  5. require ('szablony/menu.html');
  6. ?>
  7.  
  8.  
  9. <div id="content">
  10. <div id="posts">
  11. <div class="post">
  12. <h2 class="title">Tutaj możesz się zalogować</h2> 
  13. <div class="story">
  14. <?php
  15. if (isset ($_POST['login']))
  16. {
  17. $problem = FALSE;
  18.  
  19. if (empty ($_POST['uzytkownik']))
  20. {
  21. $problem = TRUE;
  22. print '<p>Proszę podac nazwę użytkownika!</p>';
  23. }
  24.  
  25. if (empty ($_POST['haslo']))
  26. {
  27. $problem = TRUE;
  28. print '<p>Proszę podac hasło!</p>';
  29. }
  30.  
  31. if (empty ($_POST['email']))
  32. {
  33. $problem = TRUE;
  34. print '<p>Proszę podac adres email!</p>';
  35. }
  36.  
  37.  
  38. if (!$problem)
  39. {
  40.  
  41. // Sprawdzanie działania Bazy Danych
  42. if ($dbc = @mysql_connect ('localhost', 'uzytkownik', 'XxX'))
  43. {
  44. if (!@mysql_select_db ('XxX'))
  45. {
  46. die ('<p>Nie można wybrać bazy danych, ponieważ: <b>' . mysql_error() . '</b></p>');
  47. }
  48. }
  49. else
  50. {
  51. die ('<p>Nie można połączyć się z MySQL, ponieważ: <b>' . mysql_error() . '</b></p>');
  52. }
  53.  
  54. $zapytanie = 'SELECT haslo, email, grupa FROM uzytkownicy WHERE (uzytkownik=' . $_POST['uzytkownik'] . ')';
  55. if ($r = mysql_query ($zapytanie))
  56. {
  57. $wiersz = mysql_fetch_array ($r);
  58. if ( ($_POST['email'] == $wiersz['email']) AND (crypt($_POST['haslo']) == $wiersz['haslo']))
  59. {
  60. print '<p><b>Zostałeś zalogowany na stronie!</b><br />
  61. Możesz teraz skorzystać z funkcji zapewnionych Twojej grupie</p>';
  62. $_SESSION['uzytkownik'] = $_POST['uzytkownik'];
  63. $_SESSION['grupa'] = $wiersz['grupa'];
  64. $_SESSION['zalogowany'] = time();
  65. }
  66. else
  67. {
  68.  
  69. if ($_POST['email'] != $wiersz['email'])
  70. {
  71. print '<p>Podałeś zły adres Email!</p>';
  72. }
  73. if (crypt($_POST['haslo']) != $wiersz['haslo'])
  74. {
  75. print '<p>Podałeś złe hasło!</p>';
  76. }
  77. }
  78.  
  79. }
  80.  
  81.  
  82. }
  83. else
  84. {
  85. print '<p>Uzupełnij brakujące dane i spróbuj jeszcze raz!</p>';
  86. }
  87. } 
  88. else
  89. {
  90. ?>
  91. <p><strong>Wpisz odpowiednie dane w przeznaczone do tego miesjca w formularzu</strong></p>
  92. <form action ="logowanie.php" method="post">
  93. <p>Nazwa użytkownika: <input style="position:relative; left:13px" type="text" name="uzytkownik" size="20" /><br />
  94. Hasło: <input style="position:relative; left:80px" type="password" name="haslo" size="20" /><br />
  95. Adres Email: <input style="position:relative; left:52px"type="text" name="email" size="20" /><br />
  96. <input type="submit" name="login" value="Zaloguj" /></p>
  97. </form>
  98. <?php
  99. }
  100. ?>
  101.  
  102.  
  103. </div>
  104. </div>
  105. </div>
  106. <!-- end #posts -->
  107. <?php
  108. require ('szablony/linki.html');
  109. require ('szablony/stopka.html');
  110. ?>


No i gdzieś tutaj coś popieprzyłem. Po podaniu nawet nieprawidłowego hasła, nazwy i adresu email pokazuje mi puste okno bez informacji o zalogowaniu lub jego błędzie:/ Jedynie reaguje w razie nieuzupełnienia jakiegoś pola. Wydaje mi się że to po prostu problem z odczytywaniem danych z MySQL`a ale nie jestem pewien. Mógłby ktoś to sprawdzić?
Grzyw
Czemu do pola user_id wsadzasz wartość zero?
Szypa
Szczerze? Nie mam pojęcia:) To pole jest w bazie zapisane jako auto_increment. W książce z której uczę się PHP tak to właśnie było rozwiązane. Zresztą sprawdzałem i kolejni użytkownicy mają kolejne numery ID, wiec to nie tutaj jest błąd, tym bardziej że nawet tego nie wykorzystuje w skrypcie logowania.
Grzyw
Hmm... Zatem kombinujemy dalej. Nie musisz przypadkiem wsadzić apostrofów/cudzysłowów w zapytaniu? (bez backslashów możesz):
  1. <?php
  2. $zapytanie = 'SELECT haslo, email, grupa FROM uzytkownicy WHERE uzytkownik="' . $_POST['uzytkownik'] . '")';
  3. ?>
Szypa
Obydwie opcje dają taki sam rezultat. Nie w tym siedzi psikus. Wydaje mi się że coś mam źle z odzyskiwaniem informacji z bazy danych, ale nie mogę namierzyć błędu:/
Grzyw
To może w drugim skrypcie wklej tylko funkcje odpowiadające za pogranie danych i wyrzuć tylko dane na ekran. Zobaczysz, czy z bazy otrzymujesz poprawne wartości.
Szypa
No zrobiłem coś co tylko wyświetla zawartość. Jak ktoś mi to poprawi, to sam będę w stanie przerobić resztę poprawnie.
  1. <?php
  2.  
  3.  
  4. $uzytkownik = 'Administrator';
  5. mysql_connect ('localhost', 'uzytkownik', 'XxX');
  6.  
  7. mysql_select_db ('XxX');
  8.  
  9. $zapytanie = 'SELECT uzytkownik, haslo, email, grupa FROM uzytkownicy WHERE uzytkownik="' . $uzytkownik . '")';
  10. $wiersz = mysql_query ($zapytanie);
  11. $row = mysql_fetch_array($wiersz); // To jest 22 linijka
  12.  
  13. print "<p>Zostałeś zalogowany na stronie<b>" . $_POST['uzytkownik'] . "</b>!<br />
  14. Możesz teraz skorzystać z funkcji zapewnionych Twojej grupie</p><br />
  15. Jesteś:" . $row['uzytkownik'] . "<br />Twój email to: " . $row['email'];
  16.  
  17.  
  18.  
  19. ?>


Przeglądarka zwraca taki napis:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\wlan.ostrorog\test.php on line 22

Zostales zalogowany na stronie!
Mozesz teraz skorzystac z funkcji zapewnionych Twojej grupie

Jestes:
Tw�j email to:
Roguś
A spróbuj tak :
  1. <?php
  2. While ($row = mysql_fetch_array($wiersz))
  3. {
  4. print "<p>Zostałeś zalogowany na stronie<b>" . $_POST['uzytkownik'] . "</b>!<br />
  5. Możesz teraz skorzystać z funkcji zapewnionych Twojej grupie</p><br />
  6. Jesteś:" . $row['uzytkownik'] . "<br />Twój email to: " . $row['email'];
  7.  
  8. }
  9. ?>
Szypa
Pokierowaliście mnie na dobrą drogę:) Nie mam już błędów składniowych, ale jest problem z cryptowaniem hasła.

Skrypt zapisywania hasłą i jego cryptowania :

  1. <?php
  2. $zapytanie = 'INSERT INTO uzytkownicy (user_id, uzytkownik, haslo, email, data) VALUES (0, "'.$_POST['uzytkownik'].'", "'.crypt($_POST['haslo1']).'", "'.$_POST['email'].'", now())';
  3. ?>


oraz skrypt odczytując hasło przy logowaniu:

  1. <?php
  2. $zapytanie = "SELECT uzytkownik, haslo, email, grupa FROM uzytkownicy WHERE uzytkownik = '{$_POST['uzytkownik']}'";
  3.  
  4. $wiersz = mysql_query ($zapytanie);
  5.  
  6. while ($row = mysql_fetch_array($wiersz))
  7. {
  8. if ( ($_POST['email'] == $row['email']) AND (crypt($_POST['haslo']) == $row['haslo']))
  9. {
  10. print '<p><b>Zostałeś zalogowany na stronie!</b><br />
  11. Możesz teraz skorzystać z funkcji zapewnionych Twojej grupie</b></p>';
  12. $_SESSION['uzytkownik'] = $_POST['uzytkownik'];
  13. $_SESSION['grupa'] = $row['grupa'];
  14. $_SESSION['zalogowany'] = time();
  15. }
  16. else
  17. {
  18.  
  19. if ($_POST['email'] != $row['email'])
  20. {
  21. print '<p>Podałeś zły adres Email!</p>';
  22. }
  23. if (crypt($_POST['haslo']) != $row['haslo'])
  24. {
  25. print '<p>Podałeś złe hasło!</p>';
  26. }
  27. }
  28. }
  29. ?>


Mógłby ktoś podpowiedzieć co jest źle że za każdym razem wyrzuca komunikat o złym haśle?
Przy czym na bank to samo hasło jest podawane

Edit 30 lipca 11:38

Już wiem co robiłem źle. Nie podawałem klucza do deskrypcji przy porównaniach. Wszystko ładnie już śmiga. Dzięki wszystkim zaangażowanym za pomoc!

A tak przecież powinno wyglądać porównanie takich kluczy:

  1. <?php
  2. (crypt($_POST['haslo'], $row['haslo']) == $row['haslo'])
  3. ?>


Pozdro
loonger
a jaki ustawiles limit dlugosci hasla zapisanego w bazie? moze podczas szyfrowania staje sie dluzszy i ucina go podczas zapisu do bazy. kiedys mialem taki problem smile.gif
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.