Вообщем полезная опция для пользовательской системы, ведь ни для кого не секрет, что юзер на сайте существо забывчивое :) и зачастую свой пароль он не помнит. Именно поэтому функция восстановления пароля на сайте нужна. На этот раз код будет оформлен в виде функции. Где и в каком месте её применить, решать вам :) .

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
  // Функция восстановления пароля, в качестве аргументов принимает почтовый ящик дескриптор соединения с базой данных,  название сайта и мыло отправителя и возвращает true, если операция восстановления пароля прошла успешно, false в противном случае
  function restoration_password ($email, $dbdeskriptor, $site_name, $adm_mail)
    {
      // Проверим валидность мыла
      if(!preg_match("/^[dw-_.]+@[dw-.]+.[w]{2,4}/i",$email))
        {
          mysql_close ($dbdeskriptor);
          echo "Некорректно введён e-mail адрес";
          return false;
        }
      // Составим запрос к базе данных
      $query_select = "SELECT `login`,`pass` FROM `user` WHERE mail="$email"";
      // Проведём запрос к базе данных
      $ath = mysql_query ($query_select, $dbdeskriptor);
      // Проверим успешность запроса
      if (!$ath)
        {
          mysql_close ($dbdeskriptor);
          echo "Ошибка базы данных";
          return false;
        }
      // Извлечём результаты запроса
      $result = mysql_fetch_assoc ($ath);
      // Проверим на NULL результат запроса
      if (isset ($result ['user']))
        {
          mysql_close ($dbdeskriptor);
          include "Такого e-mail в базе нет!";
          return false;
        }
      // Если пользователь существует, сгенерируем для него новый пароль, состоящий из 6 знаков
      $simvols = array ("0","1","2","3","4","5","6","7","8","9",
                        "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
                        "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
      for ($key = 0; $key < 6; $key++)
        {
          shuffle ($simvols);
          $string = $string.$simvols[1];
        }
      // Найдём хеш пароля
      $pass = md5 ($string);
      // Составим запрос к базе данных
      $query_update = "UPDATE user SET pass = "$pass" WHERE mail="$email"";
      // Проведём запрос
      $ath = mysql_query ($query_update, $dbdeskriptor);
      // Проверим результат запроса
      if (!$ath)
        {
          mysql_close ($dbdeskriptor);
          echo "Ошибка базы данных";
          return false;
        }
      // Вышлем письмо с логином и новым паролем пользователю
      $ath = mail ("$email", "Восстановление пароля на сайте {$site_name}", "Вы запросили восстановление логина и/или пароля на сайте {$site_name}. Ваш логин и новый пароль:n
            Логин: {$result['login']}n
            Пароль: {$string}"
, "From: amin <{$adm_mail}>");
      // Проверим успешность отправки
      if (!$ath)
        {
          include "Ошибка при отправке письма";
          return false;
        }
      echo "Пароль восстановлен";
      return true;
    }
?>

Ну собственно всё, ничего сложно в функции нет.
____________________________________________
Постовый.
Обзор блогосферы от Virtual-lab.
Рецепт заработка от Спрута.
А здесь можно выйграть iPhone :) .

Похожие записи: