Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zmiana hasla w bazie MYSQL
michu9010
post
Post #1





Grupa: Zarejestrowani
Postów: 104
Pomógł: 0
Dołączył: 2.11.2007
Skąd: Włocławek

Ostrzeżenie: (10%)
X----


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 ;/

Ten post edytował michu9010 13.01.2010, 17:15:36
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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.

Ten post edytował Kshyhoo 13.01.2010, 17:25:50


--------------------
Go to the top of the page
+Quote Post
michu9010
post
Post #3





Grupa: Zarejestrowani
Postów: 104
Pomógł: 0
Dołączył: 2.11.2007
Skąd: Włocławek

Ostrzeżenie: (10%)
X----


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 ;/
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #4





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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ć.


--------------------
Go to the top of the page
+Quote Post
michu9010
post
Post #5





Grupa: Zarejestrowani
Postów: 104
Pomógł: 0
Dołączył: 2.11.2007
Skąd: Włocławek

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #6





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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.


--------------------
Go to the top of the page
+Quote Post
michu9010
post
Post #7





Grupa: Zarejestrowani
Postów: 104
Pomógł: 0
Dołączył: 2.11.2007
Skąd: Włocławek

Ostrzeżenie: (10%)
X----


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.  


Ten post edytował michu9010 14.01.2010, 22:50:08
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #8





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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...


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 05:18