Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zmiana hasla w bazie MYSQL
Forum PHP.pl > Forum > PHP
michu9010
mam problem z aktualizacja hasla w bazie ktore hashowanie md5. to jest login.php

  1. <?php
  2.  
  3. // rozpoczęcie buforowania (jest to potrzebne by nie mieć błędów typu headers already sent)
  4.  
  5. // start sesji
  6.  
  7. // połšczenie z mysql
  8. require('funkcje.php');
  9. include ('top.php');
  10.  
  11.  
  12. // sprawdzamy czy user jest już zalogowany
  13. if($_SESSION['logged']){
  14. echo 'Panel użytkownika!';
  15.  
  16. include 'profile.php';
  17. }
  18. else
  19. {
  20. // tworzymy prosty formularz
  21. echo '<form action="login.php" method="POST">
  22. <table border="0" align="center" cellpadding="0" cellspacing="0">
  23. <tr>
  24. <td>Login:</td>
  25. <td><input type="text" name="nick" /></td>
  26. </tr>
  27. <tr>
  28. <td>Hasło</td>
  29. <td><input type="password" name="pass" /></td>
  30. </tr>
  31. <tr>
  32. <td colspan="2" align="center">
  33.  
  34. <input type="submit" name="ok" value="Zaloguj" />
  35. </td>
  36. </tr>
  37. </table>
  38.  
  39. </form>';
  40.  
  41. // jeœli zostanie naciœnięty przycisk "Zaloguj"
  42. if(isset($_POST['ok']))
  43. {
  44. $nick = $_POST['nick'];
  45. $pass = $_POST['pass'];
  46.  
  47. // sprawdzamy czy wszystkie dane zostały podane
  48. if(empty($nick) || empty($pass)) echo '<div class="error">Wpisz wszystkie pola!</div>';
  49. // jeœli tak...
  50. else
  51. {
  52. // filtrujemy dane
  53.  
  54. // kodujemy hasło
  55. $pass = md5($pass);
  56.  
  57. // sprawdzamy czy istnieje użytkownik z takim loginem i hasłem
  58. $result = mysql_query("SELECT * FROM users WHERE nick='$nick' AND pass='$pass'");
  59.  
  60. // jeœli nie istnieje
  61. if(mysql_num_rows($result)==0) echo '<div class="error">Niestety podałes niepoprawne dane!</div>';
  62. // jeœli tak...
  63. else
  64. {
  65. // dodajemy wynik zapytania do tablicy
  66. $row = mysql_fetch_array($result);
  67.  
  68. // ustawianie sesji że użytkownik jest zalogowany
  69. $_SESSION['logged'] = true;
  70.  
  71. // dodawanie do sesji id użytkownika, login oraz datę rejestracji
  72. $_SESSION['id'] = $row['id'];
  73. $_SESSION['nick'] = $row['nick'];
  74. $_SESSION['data_rejestracji'] = $row['data_rejestracji'];
  75. $_SESSION['mail'] = $row['mail'];
  76. $_SESSION['pass'] = $row['pass'];
  77. $_SESSION['imie'] = $row['imie'];
  78. $_SESSION['nazwisko'] = $row['nazwisko'];
  79. $_SESSION['telefon'] = $row['telefon'];
  80.  
  81. // wyœwietlenie komunikatu oznaczajšcego poprawne logowanie
  82. echo '<meta http-equiv="Refresh" content="0; url=login.php" />';
  83. }
  84. }
  85. }
  86. }
  87. include 'botom.php';
  88. // rozłšczenie z bazš danych
  89.  
  90. // koniec buforowania
  91. ?>
  92.  
  93.  


baza
  1. CREATE TABLE `users` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `nick` varchar(100) NOT NULL DEFAULT '',
  4. `pass` varchar(60) NOT NULL DEFAULT '',
  5. `data_rejestracji` int(11) NOT NULL DEFAULT '0',
  6. `imie` varchar(20) NOT NULL DEFAULT '',
  7. `nazwisko` varchar(30) NOT NULL DEFAULT '',
  8. `telefon` varchar(15) NOT NULL DEFAULT '',
  9. `mail` varchar(40) NOT NULL DEFAULT '',
  10. PRIMARY KEY (`id`)
  11. ) TYPE=MyISAM AUTO_INCREMENT=2 ;



rejestracja.php

<?php

// rozpoczêcie buforowania (jest to potrzebne by nie mieæ b³êdów typu headers already sent)
ob_start();

// start sesji
session_start();

// po³¹czenie z mysql
require('funkcje.php');
include ('top.php');
// nag³ówek
if($_SESSION['logged'])
{
// wyœwietlamy userowi jego dane
echo '<div class="error">Nie możesz wykonać rejestracji jak jestes zalogowany!</div>';
}
else
{
echo '<h2>Rejestracja</h2>';

// tworzymy prosty formularz
echo '<form action="register.php" method="POST">
<table width="380" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td>Login:</td>
<td><input type="text" name="nick" /></td>
</tr>
<tr>
<td>Haslo:</td>
<td><input type="password" name="pass" /></td>
</tr>
<tr>
<td>Potwierdz haslo:</td>
<td><input type="password" name="pass2" /></td>
</tr>
<tr>
<td>Imie:</td>
<td><input type="text" name="imie" id="imie" /></td>
</tr>
<tr>
<td>Nazwisko:</td>
<td><input type="text" name="nazwisko" id="nazwisko" /></td>
</tr>
<tr>
<td>numer telefonu:</td>
<td><input type="text" name="telefon" id="telefon" /></td>
</tr>
<tr>
<td>Twój E-mail:</td>
<td><input type="text" name="mail" id="mail" /></td>
</tr>
<tr>
<td>Powtórz E-mail</td>
<td><input type="text" name="mail2" id="mail2" /></td>
</tr>
<tr>
<td><input type="reset" value="Reset" /></td>
<td><input type="submit" name="ok" value="Rejestruj" /></td>
</tr>
<tr>
<td colspan=2><div class="error">Aby rejestracja przebiegła pomyślnie to wszystkie pola muszą być uzupełnione!</div></td>
</tr>
</table>
</form>';

// jeœli zostanie naciœniêty przycisk "Rejestruj"
if(isset($_POST['ok']))
{
$nick = $_POST['nick'];
$pass = $_POST['pass'];
$pass2 = $_POST['pass2'];
$imie = $_POST['imie'];
$nazwisko = $_POST['nazwisko'];
$telefon = $_POST['telefon'];
$mail = $_POST['mail'];
$mail2 = $_POST['mail2'];
// sprawdzamy czy wszystkie dane zosta³y podane
if(empty($nick) ||
empty($pass) ||
empty($pass2) ||
empty($imie) ||
empty($nazwisko)
|| empty($telefon) ||
empty($mail) ||
empty($mail2) ) echo '<div class="error">Wpisz wszystkie pola!</div>';
// jeœli tak...
else
{
// filtrujemy dane
$nick = trim(strip_tags(mysql_real_escape_string(HTMLSpecialChars($nick))));
$pass = trim(strip_tags(mysql_real_escape_string(HTMLSpecialChars($pass))));

// sprawdzamy czy jest ju¿ u¿ytkownik o takim loginie
$result = mysql_query("SELECT * FROM users WHERE nick='$nick'");

// jeœli ju¿ istnieje
if(mysql_num_rows($result)!=0) echo '<div class="error">Juz istnieje konto z takim loginem!</div>';
// jeœli nie...
if ($pass!=$pass2) echo '<div class="error">Hasla sie niezgadzaja!</div>';
// sprawdzenie poprawnosci adresu mail
// w zmiennej $email mamy e-mail do sprawdzenia

//sprawdzanie czy sia adresy email zgadzaja

if ($mail!=$mail2) {
echo '<div class="error">Adresy E-mail sie niezgadzaja!</div>';
}
elseif(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$",$mail))
{
echo '<div class="error">Adres E-mail jest nieprawidlowy!</div>';
}
else
{

// pobieramy aktualn¹ datê
$data = time();

// kodujemy has³o
$pass = md5($pass);

// tworzymy zapytanie
$query = "INSERT INTO users (nick , pass, data_rejestracji, imie, nazwisko, telefon, mail)
VALUES ('$nick', '$pass', '$data', '$imie', '$nazwisko', '$telefon', '$mail')";


// jeœli zapytanie wykona siê poprawnie to zostanie wyœwietlony stosowny komunika


if(mysql_query($query)) echo 'Zostales poprawnie zarejestrowany! Mozesz sie teraz <a href="login.php">zalogować</a>';
}

}
}
}


include 'botom.php';
// roz³¹czenie z baz¹ danych
mysql_close();

// koniec buforowania
ob_end_flush();
?>

i moj nie udolnie napisany pliczek ;/

<?php
$pass = $_SESSION['pass'];

$a = trim($_GET['a']);
$id = trim($_GET['id']);

if($a == 'edit' and !empty($id)) {
/* zapytanie do tabeli */
$wynik = mysql_query("SELECT * FROM users WHERE id='$id'")
or die('Błąd zapytania');
/*
wyświetlamy wyniki, sprawdzamy,
czy zapytanie zwróciło wartość większą od 0
*/
if(mysql_num_rows($wynik) > 0) {
/* odczytujemy zawartość wiersza z tabeli */
$r = mysql_fetch_assoc($wynik);

echo '<form action="login.php?change=pass" method="POST">
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td>Stare hasło</td>
<td><input type="password" name="pass" id="pass" /></td>
</tr>
<tr>
<td>Nowe hasło</td>
<td><input type="password" name="npass" id="npass" /></td>
</tr>
<tr>
<td>Ponowenie nowe hasło</td>
<td><input type="password" name="npass2" id="npass2" /></td>
</tr>
<tr>
<td colspan="2" align="center">

<input type="submit" name="ok" value="Zaloguj" />
</td>
</tr>
</table>

</form>';
}
}
elseif($a == 'save') {
$pass = $_POST['pass'];
$npass = $_POST['npass'];
$npass2 = $_POST['npass2'];


// sprawdzamy czy wszystkie dane zosta³y podane
if(empty($pass) || empty($npass) || empty($npass2)) echo '<div class="error">Wpisz wszystkie pola!</div>';
// jeœli tak...
else
{
// filtrujemy dane
$pass = trim(strip_tags(mysql_real_escape_string(HTMLSpecialChars($pass))));
$npass = trim(strip_tags(mysql_real_escape_string(HTMLSpecialChars($npass))));
$npass2 = trim(strip_tags(mysql_real_escape_string(HTMLSpecialChars($npass2))));

// kodujemy has³o
$npass = md5($npass);

mysql_query("UPDATE users SET pass='$npass' WHERE id='$id'")
or die('Błąd zapytania');
echo 'Dane zostały zaktualizowane';
echo '<meta http-equiv="Refresh" content="1; url=login.php" />';
}
}
?>

ostatnie pliczki musialem tak zrobic bo bbcode bo tresc jest za dluga ;/
Kshyhoo
Nie ma takiej opcji. Musisz wygenerować nowe hasło, zapisujesz w bazie i wysyłasz do usera w e-mailu podanym przy rejestracji.

Użyj codebox, to się kod zmieści.
michu9010
a ja mam juz pliczek tylko on nie wyswietla formularza a tym bardziej nie zmieni hasla ;/;/
  1. <?php
  2. $pass = $_SESSION['pass'];
  3.  
  4. $a = trim($_GET['a']);
  5. $id = trim($_GET['id']);
  6.  
  7. if($a == 'edit' and !empty($id)) {
  8. /* zapytanie do tabeli */
  9. $wynik = mysql_query("SELECT * FROM users WHERE id='$id'")
  10. or die('Błąd zapytania');
  11. /*
  12.   wyświetlamy wyniki, sprawdzamy,
  13.   czy zapytanie zwróciło wartość większą od 0
  14.   */
  15. if(mysql_num_rows($wynik) > 0) {
  16. /* odczytujemy zawartość wiersza z tabeli */
  17. $r = mysql_fetch_assoc($wynik);
  18.  
  19. echo '<form action="login.php?change=pass" method="POST">
  20. <table border="0" align="center" cellpadding="0" cellspacing="0">
  21. <tr>
  22. <td>Stare hasło</td>
  23. <td><input type="password" name="pass" id="pass" /></td>
  24. </tr>
  25. <tr>
  26. <td>Nowe hasło</td>
  27. <td><input type="password" name="npass" id="npass" /></td>
  28. </tr>
  29. <tr>
  30. <td>Ponowenie nowe hasło</td>
  31. <td><input type="password" name="npass2" id="npass2" /></td>
  32. </tr>
  33. <tr>
  34. <td colspan="2" align="center">
  35.  
  36. <input type="submit" name="ok" value="Zaloguj" />
  37. </td>
  38. </tr>
  39. </table>
  40.  
  41. </form>';
  42. }
  43. }
  44. elseif($a == 'save') {
  45. $pass = $_POST['pass'];
  46. $npass = $_POST['npass'];
  47. $npass2 = $_POST['npass2'];
  48.  
  49.  
  50. // sprawdzamy czy wszystkie dane zostały podane
  51. if(empty($pass) || empty($npass) || empty($npass2)) echo '<div class="error">Wpisz wszystkie pola!</div>';
  52. // jeœli tak...
  53. else
  54. {
  55. // filtrujemy dane
  56.  
  57. // kodujemy hasło
  58. $npass = md5($npass);
  59.  
  60. mysql_query("UPDATE users SET pass='$npass' WHERE id='$id'")
  61. or die('Błąd zapytania');
  62. echo 'Dane zostały zaktualizowane';
  63. echo '<meta http-equiv="Refresh" content="1; url=login.php" />';
  64. }
  65. }
  66. ?>



nie wiem jak to poprawic zeby dzialalo ;/
Kshyhoo
Podpowiedź:
  1. if ($opcja=="przypomnij") {
  2. <form action="rejestracja.php" method="post">
  3. ...
  4. </form>
  5. }
  6. /* generujesz nowe hasło */
  7. function haslo() {
  8. $min = 6; $max = 12;
  9. for($i=0;$i<rand($min,$max);$i++) {
  10. $znak=chr(rand(48,122));
  11. if (eregi("[0-9a-zA-Z]",$znak)) $haslo .= $znak;
  12. else $i--;
  13. }
  14. return $haslo;
  15. }
  16.  
  17. /* wysyłasz hasło */
  18. if ($opcja=="wyslijhaslo") {
  19.  
  20. $login = htmlspecialchars(stripslashes(trim($_POST["login"])), ENT_QUOTES);
  21. $hasloczytelne = haslo();
  22. $haslo = md5($hasloczytelne);
  23. if ($login<>"") {
  24.  
  25. // tu zapis nowego hasła kodowanego do bazy
  26.  
  27. if (mysql_num_rows($wynik)==1) {
  28. $dane = mysql_fetch_array($wynik);
  29. $email = $dane["email"];
  30. $list="Oto przypominane haslo: $hasloczytelne";
  31. mail($email, "Przypomnienie hasła", $list,"From: <$twoj_adres>");
  32. echo "<p>Hasło zostało wysłane na e-mal podany przy rejestracji.</p>";
  33. } else {
  34. echo "<p>Użytkownik o podanym loginie nie istnieje!</p>";
  35. }
  36. }
  37. }

Ze względów bezpieczeństwa wysyłasz tylko hasło, login user musi pamiętać. To tylko przykład, musisz go sobie dopasować.
michu9010
troszke nie bardzo zrozumialem to co napisales blinksmiley.gif blinksmiley.gif
moje haslo jest kodowane md5 ( a tak na marginesie jest jakas metoda zeby to od hashowac i pokazac ten zahaszkowany wyraz??)
dziekuje wszystkim za odp o podpowiedzi
Kshyhoo
Są strony, które się tym trudnią, ale wydaje mi się, że po prostu zapisują w bazie hasło i hash, żeby później porównywać, niż rzeczywiście je łamią... MD5 to kodowanie w jedną stronę i lepiej nie zaprzątać sobie głowy odkodowaniem. Chcesz się w to bawić, zmień forum na tematykę hack ;p
Ten kod, który podałem jest dość prosty, łatwo go zaadoptujesz.
michu9010
troszke przerobilem i pare rzeczy od siebie ale nadla nie dziala dokladnie nie porownuje hasla z sessji z tym w polu stare haslo;/;/

  1. <?php
  2. echo '<form action="login.php?change=pass" method="POST">
  3. <table border="0" align="center" cellpadding="0" cellspacing="0">
  4. <tr>
  5. <td>Stare hasło</td>
  6. <td><input type="password" name="pass" id="pass" /></td>
  7. </tr>
  8. <tr>
  9. <td>Nowe hasło</td>
  10. <td><input type="password" name="npass" id="pass" /></td>
  11. </tr>
  12. <tr>
  13. <td>Ponowenie nowe hasło</td>
  14. <td><input type="password" name="npass2" id="pass" /></td>
  15. </tr>
  16. <tr>
  17. <td colspan="2" align="center">
  18.  
  19. <input type="submit" name="ok" value="Zmień" />
  20. </td>
  21. </tr>
  22. </table>
  23.  
  24. </form>';
  25.  
  26. // jeœli zostanie naciœnięty przycisk "Rejestruj"
  27. if(isset($_POST['ok']))
  28. {
  29. $pass = $_POST['pass'];
  30. $npass = $_POST['npass'];
  31. $npass2 = $_POST['npass2'];
  32. // sprawdzamy czy wszystkie dane zostały podane
  33. if(empty($pass) || empty($npass2) || empty($npass2)) echo '<div class="error">Wpisz wszystkie pola!</div>';
  34. // jeœli tak...
  35. else
  36. {
  37. // filtrujemy dane
  38. ///porownianie hasla z bazy do wpisanego w formularzu (stare)
  39. $pass = md5($pass);
  40. if ($pass!=$_SESSION['pass']) echo '<div class="error">Stare hasło nie poprawne!</div>';
  41. /// porownianie nowych hasel
  42. if ($npass!=$npass2) echo '<div class="error">Hasla sie niezgadzaja!</div>';
  43.  
  44. $npass = md5($npass);
  45.  
  46. $query = "UPDATE users SET (pass) VALUES ('$npass')";
  47.  
  48.  
  49. // jeœli zapytanie wykona się poprawnie to zostanie wyœwietlony stosowny komunika
  50.  
  51.  
  52. if(mysql_query($query)) echo 'Hasło zostało zmienione poprawnie';
  53. }
  54. }
  55. ?>
  56.  
Kshyhoo
To Ty chcesz pozwolić zmienić hasło userowi, czy wysłać mu nowe? Zmiana hasła przez usera:
  1. if ($opcja=="zmienhaslo" {
  2. $haslo = htmlspecialchars(stripslashes(trim($_POST["haslo"])), ENT_QUOTES);
  3.  
  4. if (strlen($haslo)<6 or strlen($haslo)>50
  5. or !eregi("^[a-zA-Z0-9]+$",$haslo)) { $blad++;
  6. echo "Hasło od 6 do 50 znaków bez polskich liter i spacji.<br />";
  7. }
  8.  
  9. if ($blad==0) {
  10. $kod = uniqid(rand());
  11. $haslo = md5($haslo); // zaszyfrowanie hasla w md5
  12.  
  13. if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
  14. if (mysql_select_db($mysql_baza)) {
  15. $wynik = mysql_query("UPDATE $mysql_tabela SET haslo='$haslo' WHERE login='$login'");
  16. } else echo "Nie można połączyć się z bazą";
  17. mysql_close($baza);
  18. } else echo "Nie można połączyć się z serwerem MySQL";
  19. if ($wynik) {
  20. echo "Dane zostały zmienione";
  21. }
  22. } else echo "Dane nie zostały zmienione!";
  23. }
  24.  
  25. // tu sprawdzasz, czy user jest zalogowany i wyświetlasz formularz

To przykład, bez autoryzacji usera...
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.