За последние 24 часа нас посетили 17476 программистов и 1719 роботов. Сейчас ищет 1681 программист ...

Проблема с созданием - восстановления пароля

Тема в разделе "PHP для новичков", создана пользователем Terminator004, 24 янв 2017.

  1. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    Нечаянно )) теперь во что :
    array(1) { ["Database"]=> string(18) "information_schema" }
     
  2. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Ну значит точно 1 База, которая называется "information_schema". Осталось разобраться где все остальные.
     
  3. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    И что теперь будем делать?
     
  4. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Я, наверное спать пойду, а ты посиди, подумай, может поймёшь что...
    --- Добавлено ---
    Вот, нагуглил. Поменяй запрос на этот: SELECT schema_name FROM information_schema.schemata;
     
  5. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    Ну это конечно вряд ли )) Но подумать можно ;). Ок, спокойной ночи!
    --- Добавлено ---
    А как запрос меняется ?
     
  6. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    У меня как раз уже 603 сообщения. Квест на сегодня я выполнил :D
    --- Добавлено ---
    PHP:
    1. $db = mysqli_connect ($localhost, $root, $ $pr2);
    2.  
    3. $q = $db->query ("SELECT schema_name FROM information_schema.schemata;");
    4.  
    5. while ($res = $q->fetch_assoc()) {
    6.  
    7. var_dump ($res); echo "<br>";
    8.  
    9. die();
    10.  
    11. }
     
  7. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    вот :
    PHP:
    1. <?php  
    2.  
    3.  
    4. $db = mysqli_connect ($localhost, $root, $ $pr2);
    5. $q = $db->query ("SELECT schema_name FROM information_schema.schemata;");
    6. while ($res = $q->fetch_assoc()) {
    7. var_dump ($res); echo "<br>";
    8. die();
    9. }
    10.  
    11.  
    12. $login = mysql_real_escape_string($_POST['login']);
    13. $password = mysql_real_escape_string($_POST['password']);
    14. $email = mysql_real_escape_string($_POST['email']);
    15.  
    16. // проверяем, если юзер в таблице с таким же логином
    17.     $query = "SELECT `id`
    18.                FROM `users`
    19.                WHERE `login`='{$login}'
    20.                LIMIT 1";
    21.     $sql = mysql_query($query) or die(mysql_error());
    22.     if (mysql_num_rows($sql)==1)
    23.     {
    24. //если есть
    25. //генерируем пароль      
    26. $simvols = array ("0","1","2","3","4","5","6","7","8","9",
    27.                         "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",
    28.                         "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");
    29.       for ($key = 0; $key < 6; $key++)
    30.         {
    31.           shuffle ($simvols);
    32.           $string = $string.$simvols[1];
    33.  
    34.         }
    35.  
    36. //перегоняем в md5 хэш
    37. $pass = md5(md5($string));
    38.  
    39. //переписываем пороль в базе уже хэшированый
    40.  
    41. $query = "UPDATE `users`
    42.                    SET
    43.                        `password`='{$pass}'
    44.                                                   WHERE `login`='{$login}' ";
    45.         $sql = mysql_query($query) or die(mysql_error());
    46.  
    47. //получаем мыло из базы для нашего пользователя
    48.  
    49. $query = "SELECT `email`
    50.                FROM `users`
    51.                                 WHERE
    52.                `login`='{$login}'
    53.                LIMIT 1";
    54.     $sql = mysql_query($query) or die(mysql_error());
    55.  
    56. $row = mysql_fetch_assoc($sql);
    57. $mail = $row['email'];
    58.  
    59. //шлём пороль на это мыло
    60.  
    61. mail($mail, "Запрос на востонавление пороля", "Здравствуйте $login ваш новый пороль : $string");
    62.  
    63.     }
    64.  
    65. ?>
    А на сайте :
    array(1) { ["schema_name"]=> string(18) "information_schema" }
     
  8. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    Ну во общем. Если тот вариант не работает, так можно другой код взять.Вот :
    PHP:
    1. <?php
    2. include_once('db.php');
    3. ?>
    4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    5. <html>
    6. <head>
    7.   <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    8.   <title>Восстановление пароля</title>
    9.  
    10. </head>
    11. <body>
    12.  
    13. <?php
    14. if (isset($_POST['submit'])){    
    15.     $login = $_POST['login'];
    16.     $email = $_POST['email'];
    17.    
    18.     if (empty($login)){
    19.         echo "Введите логин!";
    20.     }
    21.     elseif (empty($email)){
    22.         echo "Введите e-mail!";
    23.     }
    24.    else{
    25.         $resultat = mysql_query("SELECT * FROM users WHERE login = '$login' AND email = '$email'");
    26.         $array = mysql_fetch_array($resultat);
    27.         if (empty($array)){
    28.             echo 'Ошибка! Такого пользователя не существует';
    29.         }
    30.         elseif (mysql_num_rows($resultat) > 0){
    31.             $chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP";
    32.             $max=10;
    33.             $size=StrLen($chars)-1;
    34.             $password=null;
    35.            
    36.             while($max--){
    37.             $password.=$chars[rand(0,$size)];
    38.             }
    39.             $newmdPassword = md5($password);
    40.             $title = 'Востановления пароля пользователю '.$login.' для сайта Site.ru!';
    41.             $headers  = "Content-type: text/plain; charset=windows-1251\r\n";
    42.             $headers .= "Админестрация сайта Site.ru";
    43.             $letter =     'Вы запросили восстановление пароля для аккаунта '.$login.' на сайте Site.ru \r\nВаш новый пароль: '.$password;
    44.  
    45. // Отправляем письмо
    46.             if (mail($email, $title, $letter, $headers)) {
    47.                mysql_query("UPDATE users SET password = '$newmdPassword' WHERE login = '$login'  AND users.email = '$email'");
    48.                echo 'Новый пароль отправлен на ваш e-mail!<br><a href="index.php">Главная страница</a>';
    49.             }
    50.         }      
    51.     }
    52. }
    53. ?>
    54.  
    55. <table>
    56.       <form method="POST">
    57.       <tr>
    58.       <td>Логин:</td>
    59.       <td><input type="text" size="20" name="login" ></td>
    60.       </tr>
    61.       <tr>
    62.       <td>E-mail:</td>
    63.       <td><input type="text" size="20" name="email"></td>
    64.       </tr>
    65.       <tr>
    66.        <td></td>
    67.       <td colspan="2"><input type="submit" value="Восстановить пароль" name="submit" ></td>
    68.       </tr>
    69.      <br>
    70.       </form>
    71. </table>
    72. </body>
    73. </html>
    Но тут проблема с mysql_close();
    Когда захожу на страницу с восстановлением пароля, так высвечивает ошибку :
    Warning: mysql_close(): no MySQL-Link resource supplied in Z:\home\localhost\www\Tests\project\password.php on line 53
     
  9. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    Всё, сумел решить. Вот так должно быть :
    PHP:
    1. <?php
    2. $myConnect = mysql_connect('localhost', 'root', '');
    3. mysql_select_db('pr2', $myConnect);
    4. ?>
    5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    6. <html>
    7. <head>
    8.   <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    9.   <title>Восстановление пароля</title>
    10.  
    11. </head>
    12. <body>
    13.  
    14. <?php
    15. if (isset($_POST['submit'])){  
    16.     $login = $_POST['login'];
    17.     $email = $_POST['email'];
    18.  
    19.     if (empty($login)){
    20.         echo "Введите логин!";
    21.     }
    22.     elseif (empty($email)){
    23.         echo "Введите e-mail!";
    24.     }
    25.    else{
    26.         $resultat = mysql_query("SELECT * FROM users WHERE login = '$login' AND email = '$email'");
    27.         $array = mysql_fetch_array($resultat);
    28.         if (empty($array)){
    29.             echo 'Ошибка! Такого пользователя не существует';
    30.         }
    31.         elseif (mysql_num_rows($resultat) > 0){
    32.             $chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP";
    33.             $max=10;
    34.             $size=StrLen($chars)-1;
    35.             $password=null;
    36.          
    37.             while($max--){
    38.             $password.=$chars[rand(0,$size)];
    39.             }
    40.             $newmdPassword = md5($password);
    41.             $title = 'Востановления пароля пользователю '.$login.' для сайта Site.ru!';
    42.             $headers  = "Content-type: text/plain; charset=windows-1251\r\n";
    43.             $headers .= "Админестрация сайта Site.ru";
    44.             $letter =     'Вы запросили восстановление пароля для аккаунта '.$login.' на сайте Site.ru \r\nВаш новый пароль: '.$password;
    45.  
    46. // Отправляем письмо
    47.             if (mail($email, $title, $letter, $headers)) {
    48.                mysql_query("UPDATE users SET password = '$newmdPassword' WHERE login = '$login'  AND users.email = '$email'");
    49.                echo 'Новый пароль отправлен на ваш e-mail!<br><a href="index.php">Главная страница</a>';
    50.             }
    51.         }      
    52.     }
    53. }
    54. ?>
    55.  
    56. <table>
    57.       <form method="POST">
    58.       <tr>
    59.       <td>Логин:</td>
    60.       <td><input type="text" size="20" name="login" ></td>
    61.       </tr>
    62.       <tr>
    63.       <td>E-mail:</td>
    64.       <td><input type="text" size="20" name="email"></td>
    65.       </tr>
    66.       <tr>
    67.        <td></td>
    68.       <td colspan="2"><input type="submit" value="Восстановить пароль" name="submit" ></td>
    69.       </tr>
    70.      <br>
    71.       </form>
    72. </table>
    73. </body>
    74. </html>
    Но у меня не отправляет новый пароль на почту, Не знаю почему, кто знает, так ответьте. Могу сказать, что когда все данные правильно ввёл и нажал восстановить пароль, так сайт успешно пишет что пароль отправлен вам на почту, но на почте ничего нет.
     
  10. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    @Terminator004 Зачем ты с таким печальным пониманием берешьося
    ты с локального сервера отправляешь?
     
    SamyRed нравится это.
  11. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    Ну а как же. Без локального сервера и регистрации не работали бы.
     
  12. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    ахаха))) первую строку написал и решил не отправлять)) потом вышел и через пол дня написал сообщение и отправил вместе с черновиком))

    С локального сервера не будет работать.
     
    SamyRed нравится это.
  13. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    А как тогда отправить ?
    --- Добавлено ---
    Я посмотрел, что в базе данных, пароль меняется, если его изменить через " Восстановления пароля ". Но на почту не приходит.
     
  14. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    @Terminator004, если я тебе скажу, что у опенсервера/денвера стоят заглушки на отправку почты, что надо либо перенастраивать, либо использовать сторонний почтовый сервер, тебе это что-то даст? А если скажу, что функцией mail() лучше и не пользоваться, а пользоваться библиотекой phpMailer?
     
  15. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    @Terminator004 загрузишь на хостинг - займешься этим вопросом
    Пока что забей
     
  16. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    ок
     
  17. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Я ему это всю ночь толдычил, пока спать не ушёл :D
    --- Добавлено ---
    Ну это ещё библиотеку устанавливать. А если он не знает где цикл заканчивается - лучше над этим, пока что, не заморачиваться.
     
    Terminator004 нравится это.