Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]MySql PDO users + md5
Forum PHP.pl > Forum > Przedszkole
martex
Witam
stworzyłem sobię według różnych tematów w necie podstawową stronke żeby obeznać się z działaniem baz danych i PDO
przy jednym uzytkowniku dziala mi ok
ale nie moge znaleźć rozwiącania dla kilku uzytkowników chciałbym wtedy dalej bawić sie w dodawanie rekordów indeksów itd w bazach i np tworzenie sobie profilu uzytkownika

Mam 2 problemy pierwszy z odróżnieniem zalogowanego goscia
a 2 z kodowaniem hasla w obecnym kodzie wywalilem wszedzie md5 w bazie mialem md5 posta przerabialem po pobraniu do nowej zmiennej na md5 ale ucinal mi ostatnią literke

oto kod

HTML form standard post z action na config.php

config
  1. require ('db.php');
  2.  
  3. function user($login, $password){
  4. global $con;
  5.  
  6. $stmt = $con -> prepare("SELECT * FROM users WHERE login = :login AND password = :password");
  7. $stmt -> bindValue(":login", $login, PDO::PARAM_STR);
  8. $stmt -> bindValue(":password", $password, PDO::PARAM_STR);
  9. $stmt -> execute();
  10.  
  11. while($row = $stmt->fetchAll(PDO::FETCH_ASSOC)){
  12. return $row;
  13. }
  14. print_r ($row);
  15. return 0;
  16. }
  17.  
  18.  
  19.  
  20. function userProfile(){
  21. global $con;
  22.  
  23. $stmt = $con -> prepare("SELECT id, login, password, username, surname FROM users");
  24.  
  25. $stmt -> execute();
  26.  
  27. $row = $stmt -> fetchAll(PDO::FETCH_ASSOC);
  28.  
  29. return $row[0];
  30.  
  31. }
  32.  
  33. $user = userProfile();
  34. print_r ($user);
  35. $userlogin = ($user['login']);
  36. $userPass = ($user['password']);
  37. $userName = ($user['username']);
  38. $userSurSurName = ($user['surname']);
  39.  
  40. echo("<BR><BR>");
  41.  
  42.  
  43.  
  44. if(!isset($_SESSION['user'])){
  45. $_SESSION['user'] = 0;
  46.  
  47. }
  48.  
  49. if($_SESSION['user'] > 0 ){
  50. echo 'zalogowany'.' '.$userName.' '.$userSurSurName ;
  51. echo'<br>';
  52. echo "<a href='logout.php'>Wyloguj</a>";
  53. }else{
  54. if($_SERVER['REQUEST_METHOD'] == 'POST'){
  55.  
  56. if($id = user($_POST['login'], $_POST['password'])){
  57. $_SESSION['user'] = $id;
  58. header('Location: index.php');
  59. }else{
  60. echo"<br />niepoprawne dane";
  61. }
  62. }else{
  63. echo '<br />zaloguj sie';
  64.  
  65. }
  66.  
  67. }
  68.  
  69. ?>


no i logout z unset($_SESSION['user']);

Może mnie ktoś jakoś nakieruje w którą stronę spoglądać albo podpowie bo z sql'ow jestem juniorowaty
i jeśli ktoś wie jak porównać to md5 z bazy z postem z formularza questionmark.gif
b4rt3kk
Jeśli nie masz żadnej dodatkowej soli dla hasła, to zwyczajnie:

  1. SELECT * FROM users WHERE login = ? AND password = md5(?);


Każdy user to oczywiście kolejny wiersz w tabeli users, loginy raczej powinny być unikatowe, by uniknąć nieporozumień. Do sesji pakuj przede wszystkim id usera z tabeli users, na tej podstawie rozpoznasz kim on jest.

Jeśli chcesz pobrać konkretnego usera, to w ten sposób:

  1. SELECT id, login, password, username, surname FROM users WHERE id = ?;


Bo obecnie pobierasz wszystkich, a wyświetlasz pierwszego z brzegu.
martex
Nie mam soli ani innych kodowań tylko chce poznac po kolei wiec na standard daje md5 ok z tym powalczę

szukając na necie włąsnie znalazem sposob na login czy tam cos porownuje sie do ?
ale piszą że to nie do konca dobre i ze trzeba bindValue uzywać i tutaj do konca nie czaje jak oni to przypisują z tym : dwukropkiem
bo wtedy już wiem że dalej stmt execute i jak fechne ALL to co zdefinuje w bindValue to bede miał tak questionmark.gif

  1. function user($login, $password){
  2. global $con;
  3.  
  4. $stmt = $con -> prepare("SELECT id, login, password, username, surname FROM users WHERE id = ?");
  5. $stmt -> bindValue(":login", $login, PDO::PARAM_STR);
  6. $stmt -> bindValue(":password", $password, PDO::PARAM_STR);
  7. $stmt -> execute();
  8.  
  9. while($row = $stmt->fetchAll(PDO::FETCH_ASSOC)){
  10. return $row;
  11. }
  12. print_r ($row);
  13. return 0;
  14. }


Czy mogłbyś podpowiedzieć bo wiem ze to sie rozni od siebie z bindem sa : w zapytaniu
i jakis przykład pokazać
wyPrintować np ussera o id 2 questionmark.gif
b4rt3kk
Cytat(martex @ 22.05.2015, 19:12:28 ) *
Nie mam soli ani innych kodowań tylko chce poznac po kolei wiec na standard daje md5 ok z tym powalczę

szukając na necie włąsnie znalazem sposob na login czy tam cos porownuje sie do ?
ale piszą że to nie do konca dobre i ze trzeba bindValue uzywać i tutaj do konca nie czaje jak oni to przypisują z tym : dwukropkiem
bo wtedy już wiem że dalej stmt execute i jak fechne ALL to co zdefinuje w bindValue to bede miał tak questionmark.gif

  1. function user($login, $password){
  2. global $con;
  3.  
  4. $stmt = $con -> prepare("SELECT id, login, password, username, surname FROM users WHERE id = ?");
  5. $stmt -> bindValue(":login", $login, PDO::PARAM_STR);
  6. $stmt -> bindValue(":password", $password, PDO::PARAM_STR);
  7. $stmt -> execute();
  8.  
  9. while($row = $stmt->fetchAll(PDO::FETCH_ASSOC)){
  10. return $row;
  11. }
  12. print_r ($row);
  13. return 0;
  14. }


Czy mogłbyś podpowiedzieć bo wiem ze to sie rozni od siebie z bindem sa : w zapytaniu
i jakis przykład pokazać
wyPrintować np ussera o id 2 questionmark.gif


Placeholderów w postaci znaków zapytania oczywiście użyłem tylko przykładowo, równie dobrze mogą być nazwane, tak jak u Ciebie, czyli np. :password.

Nie potrzebujesz loginu i hasła, żeby wyświetlić usera, nie musisz za każdym razem sprawdzać, że Janek to Janek, wystarczy, że masz zapisane w sesji jego id. Czyli:

  1. function user($id){
  2. global $con;
  3.  
  4. $stmt = $con -> prepare("SELECT id, login, password, username, surname FROM users WHERE id = :id");
  5. $stmt -> bindValue(":id", $id);
  6. $stmt -> execute();
  7.  
  8. while($row = $stmt->fetchAll(PDO::FETCH_ASSOC)){
  9. return $row;
  10. }
  11. print_r ($row);
  12. return $row;
  13. }


Generalnie jak już raz się user zaloguje, to nie męcz go za każdym razem, by znów musiał wklepywać login i hasło.
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.