Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php & MySQL] Logowanie - tylko liczby.
Forum PHP.pl > Forum > Przedszkole
Wotekk
Witam

Mam zrobione logowanie, najlepsze jest to że moge zalogować się tylko poprzez liczby, nie moge podać np Wotekk, tylko 1111

  1. <?php
  2. $query = mysql_query("SELECT * FROM user WHERE `user_name` = " . $_POST['user'] . " ");
  3. $fetch = mysql_fetch_array($query);
  4. if ( $fetch ) 
  5. {
  6. if ( md5( $_POST['password'] ) == $fetch['user_password'] ) 
  7. {  
  8.  
  9.  
  10. }
  11. else
  12. {
  13. echo 'Przykro mi, ale podane haslo jest bledne';  
  14. }
  15. }
  16. else
  17. {  
  18. echo 'Podany uzytkownik nie istnieje w bazie danych';
  19. }
  20. ?>
acztery
dziwne logowanie. a kolumny jaki maja typ ? moze int zmien moze na varchal
Wotekk
  1. CREATE TABLE `user` (
  2. `id` int(8) NOT NULL AUTO_INCREMENT,
  3. `user_name` varchar(128) NOT NULL DEFAULT '',
  4. `user_full` varchar(128) NOT NULL DEFAULT '',
  5. `user_password` varchar(128) NOT NULL DEFAULT '',
  6. `user_group` varchar(5) NOT NULL DEFAULT '',
  7. PRIMARY KEY (`id`)
  8. ) ;

Tak mam SQL'a
blizniak
a moze spruboj
  1. <?php
  2. $query = mysql_query("SELECT user_name FROM user WHERE `user_name` = " . $_POST['user'] . " ");
  3. ?>

a pozniej jezeli bedzie taki user to zrobisz nastepne zapytanie i sprawdzisz haslo
Wotekk
odpowiedź:
Podany uzytkownik nie istnieje w bazie danych
Nadal to samo ohmy.gif
empathon
1. Wstawianie w zapytanie danych bezposrednio formularza bez jakiejkolwiek kontroli jest dosc glupie. Szukaj: SQL injection
2. SELECT user_password FROM... wiecej nie potrzebujesz. + za to, ze masz sprawdzanie hasla oddzielnym warunkiem.
3. na hash md5 potrzebujesz 32 znakow nie 128...poczytaj rowniez o sha1" title="Zobacz w manualu php" target="_manual albo o soli stosowanej w systemach unix
4. Pomysl o zabezpieczniu kodu przed zbyt duza liczba niepoprawnie wpisanych hase

A co do tego czemu loguje Cie przez liczby to sprawdz co tak masz w tabeli, moze pomyliles sie przy tworzeniu kont.
skowron-line
poszukaj na forum pod haslem logowanie i zobacz jak inni to robia.
w zapytaniu daj jeszcze zeby szukalo w 2 warunkach

  1. WHERE user = zmienna AND haslo = zmienna_haslo


i przez funkcje mysq_num_rows zobacz ile rekordow zwraca zapytanie i wtedy ustaw sesje

edit: no i punkt 1 tego co napisal empathon o SQL injection to tez mozna znalesc na forum
empathon
Lepiej robic to przez dwa zapytania bo np w tym przypadku bez filtrowania wpisujac jako user ";--" haslo zostanie pominiete. Na php Solution jest do sciagniecia art na ten temat z dokladnym wyjasnieniem zagadnienia bezpiecznego logowania.
Wotekk
Zmieniłem z
  1. <?php
  2. mysql_query("SELECT * FROM user WHERE `user_name` = " . $_POST['user'] . " ");
  3. ?>


na to i chodzi.

  1. <?php
  2. mysql_query("SELECT * FROM user WHERE user_name='$user' ")
  3. ?>


Dobrze zabezpieczyłem ? czy zrobilem jeszcze gorzej niż było tongue.gif biggrin.gif

  1. <?php
  2. if (!get_magic_quotes_gpc()) { 
  3.  $user = addslashes($_POST['user']); 
  4. } else { 
  5.  $user = $_POST['user']; 
  6. } 
  7.  
  8. if (!get_magic_quotes_gpc()) { 
  9.  $password = addslashes($_POST['password']); 
  10. } else { 
  11.  $password = $_POST['password']; 
  12. } 
  13.  
  14.  
  15.  
  16.  
  17. $query = mysql_query("SELECT * FROM user WHERE user_name='$user' ");
  18. $fetch = mysql_fetch_array($query);
  19. if ( $fetch ) // jesli user zostanie znaleziony w bazie
  20. {
  21. if ( md5( $_POST['password'] ) == $fetch['user_password'] ) // jesli haslo sie zgadza
  22. {  
  23. echo 'zalogowany';
  24.  
  25.  
  26. }
  27. else
  28. {
  29. echo 'Przykro mi, ale podane haslo jest bledne';  
  30. }
  31. }
  32. else
  33. {  
  34. echo 'Podany uzytkownik nie istnieje w bazie danych';
  35. }
  36. ?>
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.