Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] [PHP] problem z logowaniem i md5
Forum PHP.pl > Forum > Przedszkole
szpakoo
znalazłem na tym forum pewien skrypcik i sobie go zapożyczyłem smile.gif


plik index.html
  1. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  2. <title>Logowanie</title>
  3. </head>
  4.  
  5. <h2>Proszę podać nazwę użytkownika i hasło:</h2>
  6. <form name = "formularz" action = "spr.php" method = "POST">
  7.  
  8. <TABLE border="1"><TR>
  9. <TD bordercolor="#FFFFFF">Użytkownik:</TD>
  10. <TD bordercolor="#F
  11. FFFFF"><INPUT TYPE = "text" NAME = "user"></TD>
  12. </TR>
  13.  
  14. <TR>
  15. <TD bordercolor="#FFFFFF">Hasło:</TD>
  16. <TD bordercolor="#FFFFFF"><INPUT TYPE = "password" NAME = "haslo"></TD>
  17. </TR>
  18.  
  19. <TR>
  20. <TD colspan="2" align="center" bordercolor="#FFFFFF">
  21. <INPUT TYPE = "submit" VALUE = "Zaloguj">
  22. </TD>
  23. </TR>
  24. <a href="index/dodaj.html">dopisz sie do nas</a>
  25. </body>
  26. </html>



plik spr.php

  1. <?php
  2. $pass = $_POST["haslo"];
  3. $user = $_POST["user"];
  4.  
  5. function checkPass($pass, $user)
  6. {
  7.  $link = mysql_connect("localhost", "root", "krasnal");
  8.  $flag = mysql_select_db("pilkanozna");
  9.  if(!$link || !$flag){
  10.  echo("Error!");
  11.  return false;
  12. }
  13. $name = addslashes($name);
  14. $pass = addslashes($pass);
  15.  
  16. $query = "SELECT PASS FROM USERS WHERE name = '".$user."' AND pass = '".md5($pass)."' " ;
  17. $result = mysql_query($query);
  18.  
  19.  
  20. if(!$result){
  21.  echo("Problem z baza danych! Zapytanie zostalo odrzucone!");
  22.  mysql_close($link);
  23.  return false;
  24.  }
  25.  
  26.  
  27.  $row = mysql_fetch_row($result);
  28.  if(!$row){
  29. mysql_close($link);
  30. return false;
  31. }
  32.  
  33.  if($row[0] != $pass){
  34. mysql_close($link);
  35. return false;
  36. }
  37.  
  38.  else {mysql_close($link); return true;}
  39.  }
  40.  
  41. if(!checkPass($pass, $user)){
  42.  echo("<HTML><BODY><CENTER>");
  43.  echo("<H2>Niepoprawne dane!</H2>");
  44.  echo("</CENTER></BODY></HTML>");
  45.  }
  46.  
  47.  else{
  48. include('index1.php');
  49. }
  50. ?>


no i wszystko jest w porządku jeśli nie ma kodowania md5, wtedy skrypt działa jak powinien a z kodowaniem md5 nie działa. stworzyłem następny prosty skrypcik do rejestracji

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  5. </head>
  6. <body>
  7. <?php
  8. // utworzenie krótkich anzw zmiennych
  9. $name=$_POST['name'];
  10. $pass=$_POST['pass'];
  11.  
  12. if (!$name || !$pass )
  13. {
  14.  echo 'nie podano wszystkiego';
  15. }
  16.  
  17. {
  18. $name = addslashes($name);
  19. $pass = addslashes($pass);
  20. }
  21.  
  22. $mysql_server = "localhost";
  23. $mysql_admin = "root";
  24. $mysql_pass = "krasnal";
  25. $mysql_db = "pilkanozna";
  26. @mysql_connect($mysql_server, $mysql_admin, $mysql_pass)
  27. or die('Brak połaczenia z serwerem MySQL.');
  28.  @mysql_select_db($mysql_db)
  29. or die('Bład wyboru bazy danych.');
  30.  
  31.  
  32. $zapytanie = "insert into users values ('".$name."', '".md5($pass)."')";
  33. $wynik = mysql_query ($zapytanie) or die ("Zapytanie zakończone niepowodzeniem");
  34. if ($wynik)
  35. echo $db->affected_rows.' Zostałeś zapisany do naszej bazy danych.';
  36. ?>
  37. </body>
  38. </html>


teraz spokojnie przy dodawaniu usera do bazy od razu hasło w bazie jest zapisane w 32-znakowym formacie. przy próbie logowania wyskakujenapis: Niepoprawne dane z tej częsci skryptu.


if(!checkPass($pass, $user)){
echo("<HTML><BODY><CENTER>");
echo("<H2>Niepoprawne dane!</H2>");
echo("</CENTER></BODY></HTML>");
}

else{
include('index1.php');
}
pogubiłem się... pomocy
Petermechanic
  1. <?php
  2. if($row[0] != $pass){
  3. mysql_close($link);
  4. return false;
  5. }
  6. ?>

ma być raczej:
  1. <?php
  2. if($row[0] != md5($pass)){
  3. mysql_close($link);
  4. return false;
  5. }
  6. ?>
szpakoo
no niestety to nie pomogło...sad.gif kombinuje dalej i nic
kurdak
Poszukaj na forum.
Już pisałem taki skrypt logowania z dostępen do bazy danych.
szpakoo
rzecz w tym że niestety nie ma tego skryptu na forum, więc może poszukaj błędu w tym co ja stworzyłem smile.gif
winnetu
Mam ten sam problem. Skrypt pochodzi z książki "PHP 101 praktycznych skryptów" (skrypt 72). Próbowałem to jakoś "ugryźć" ale również nie wiem w jaki sposób. Wpisuje poprawne dane użytkownika i hasło a mimo to wyskakuje informacja o błędnie wprowadzonych danych. Wygląda to tak jakby skrypt nie odkodowywał zapisanych w bazie haseł przy pomocy md5 :/
vokiel
Może zapisz do zmiennej i wyświetl przez echo() co wysyła skrypt do bazy (login i hasło)

Wg mnie nie ma sensu doddawania
  1. <?php
  2. $pass = addslashes($pass);
  3. ?>


bo i tak hasło jest przepuszczane przez MD5, zatem nikt i tak nie wstrzyknie kodu.

brakuje średnika w linii 16:
  1. <?php
  2. $query = "SELECT PASS FROM USERS WHERE name = '".$user."' AND pass = '".md5($pass)."' ;" ;
  3. ?>


ja używam takiego srkyptu logowania:

  1. <?php
  2. if (isset($_POST['login']) && isset($_POST['haslo'])){
  3. //jezeli uzytkownik wlasnie podjal probe logowania
  4. $login = str_replace("'", '', $_POST['login']);
  5. $haslo = md5 ($_POST['haslo']);
  6.  
  7. include ('zapytania.php'); // plik z zapytaniami do bazy
  8. $query = $logowanie;  // przpisanie do query zapytania logowania
  9. include ('mysql_connect.php'); // polaczenie z baza danych
  10.  
  11. if ($ile>0) //istnieje uzytkownik o podanym loginie i hasle
  12. {
  13. while($wiersz = mysql_fetch_row($result)){
  14. $_SESSION['zalogowany']="1";
  15. }
  16. header("location: zalogowany.htm");
  17. }
  18. //jezeli proba lgogowania sie nie powiodla
  19. if (isset($login)) {
  20. $tresc_komunikatu = "Nieudane logowanie !"; // Nieudane logowanie!
  21. include ("formularz_logowania.php"); // plik z formularzem logowania
  22. }
  23. }
  24. //nie bylo proby logowania lub nastapilo wylogowanie
  25. else {
  26. $tresc_komunikatu = "Niezalogowany !"; // Niezalogowany
  27. include ("formularz_logowania.php");
  28. }
  29. ?>


Może to się okaże pomocne.
winnetu
Problem rozwiązany na dwa sposoby. Pierwszy prymitywny:

  1. <?php
  2. $pass = $_POST['haslo'];
  3. $user = $_POST['user'];
  4.  
  5.  
  6. $username = "login";
  7. $password = "haslo";
  8. $dbname = "nazwa_bazy";
  9. $sql = mysql_connect('localhost', $username, $password); 
  10. @mysql_select_db($dbname) or die ("nie znaleziono bazy danych");
  11.  
  12. $query = "select count(*) from USERS where NAME = '$user' and PASS = md5('$pass')";
  13. $result = mysql_query($query);
  14. if(!$result)
  15. {
  16. echo 'Nie mozna wykonac zapytania';
  17. }
  18.  
  19. $wiersz = mysql_fetch_row($result);
  20. $ile = $wiersz[0];
  21.  
  22. if ($ile > 0)
  23. {
  24. echo 'OK';
  25. }
  26. else
  27. {
  28. echo 'Podane dane sa nieprawidlowe!';
  29. }
  30. ?>



I drugi, trochę bardziej rozbudowany i poprawiony:

  1. <?php
  2. function islegal($str)
  3. {
  4. if (strpos($str, "'") !== false) return false;
  5. if (strpos($str, "'") !== false) return false;
  6. return true;
  7. }
  8.  
  9. function checkpass($pass, $user)
  10. {
  11. if(!islegal($pass) && !islegal($user)){
  12.  return false;
  13. }
  14. $username = "login";
  15. $password = "haslo";
  16. $dbname = "baza_danych";
  17. $link = mysql_connect('localhost', $username, $password); 
  18. $flag = @mysql_select_db($dbname) or die ("nie znaleziono bazy danych");
  19.  
  20.  
  21. if(!$link || !$flag){
  22.  //echo("problem z połączeniem z bazą danych.");
  23.  return false;
  24. }
  25.  
  26. $query = "select count(*) from USERS where NAME = '$user' and PASS = md5('$pass')";
  27. $result = mysql_query($query);
  28. if(!$result){
  29.  echo("problem z bazą danych. odrzucone zapytanie.");
  30.  mysql_close($link);
  31.  return false;
  32. }
  33.  
  34. $row = mysql_fetch_row($result);
  35. if(!$row){
  36.  mysql_close($link);
  37.  return false;
  38. }
  39. if($row[0] == 0){
  40.  
  41.  mysql_close($link);
  42.  return false;
  43. }
  44. else {mysql_close($link);return true;}
  45. }
  46. if(!checkpass($pass, $user)){
  47. echo("<html><body><center>");
  48. echo("<h5>niepoprawne dane!</h5>");
  49. echo("</center></body></html>");
  50. }
  51. else{
  52. echo 'ok';
  53. }
  54. ?>
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.