За последние 24 часа нас посетили 17504 программиста и 1714 роботов. Сейчас ищут 1656 программистов ...

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

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

  1. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Ну да, так. Я же готовый код выложил. Покажи выхлоп.
    --- Добавлено ---
    Стой, только die(); после цикла впили, а то ошибок щас нахватаешся.
     
  2. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    вот :
    PHP:
    1. <?php  
    2.  
    3.  
    4. $db = mysqli_connect ($localhost, $root, $ $pr2);
    5. $q = $db->query ("SHOW DATABASES");
    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) { ["Database"]=> string(18) "information_schema" }
    --- Добавлено ---
    Если хочешь, могу дать проект. Может так быстрее будет, ты то хорошо всё умеешь.
     
  3. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Да после цикла, а не в нём die() ...
     
  4. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    PHP:
    1. <?php  
    2.  
    3.  
    4. $db = mysqli_connect ($localhost, $root, $ $pr2);
    5. $q = $db->query ("SHOW DATABASES");
    6. die();
    7. while ($res = $q->fetch_assoc()) {
    8. var_dump ($res); echo "<br>";
    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. ?>
    Мне кажется что получилось. Больше ничего не пишет
     
  5. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Ты понимаешь вообще что ты делаешь? Давай ты успокоишся, отдышишся, почитаешь что делает die(), что такое цикл, каким символом он обычно заканчивается, потом вернёшся, и мы с тобой продолжим)
     
  6. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    Но ошибка то пропала ))
     
  7. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Щас умру со смеху :D:D:D Ну конечно не пишет... Ты остановил скрипт перед его работой. Я же говорю,
    --- Добавлено ---
    Отличный способ решать проблемы. Когда не будет что-то получаться - напишу die (); в самом начале скрипта и сдам проект. А заказчик пусть потом радуется что у него ошибок нет. Да, пусть сайт не работает, зато ошибок нет :D
     
  8. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    Читаю уже... Узнал, что есть
    • Цикл с предусловием (while);
    • Цикл с постусловием (do-while);
    • Цикл со счетчиком (for);
    • Специальный цикл перебора массивов (foreach).
     
  9. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Молодец. Читай дальше. Можешь не докладывать о каждом шаге. Просто прочти то, о чём я писал, и возвращайся когда поймёшь в чём прикол того чуда, которое ты сделал.
     
  10. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    Ну я почитал про die. Допустим есть такая команда:
    $Link = mysql_connect ($Host, $User, $Password) or die("Couldn't
    connect to the database!");
    Ну тут типа php попытаться установить связь с MySQL и если сделать это не удаётся, так тот die высветит ошибку с тем текстом.
    Ну короче так понял что он может ошибки сообщать.
     
  11. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Ну вот, молодец. Это, конечно никак не относится к тому приколу, который ты сделал, но уже какие-то знания почерпнул. Ты почитай в официальной документации, что вообще делает die().
     
  12. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    вот что я еще прочёл:

    Дальнейшее распространение ошибок можно остановить с помощью ин струкции die. Эта инструкция заставляет РНР прекратить исполнение сцена рия, как только происходит первая ошибка и дальнейшая работа невозможна. Она также может отправить в браузер сообщение об ошибке или вызвать функ цию.
     
  13. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Не совсем то что нужно, но в целом - да, это так. А вообще - die тупо прерывает работу скрипта. И если поставить эту функцию перед каким либо кодом, то этот код, соответственно, не используется. А теперь объясни мне, что делает этот код:
     
  14. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    Ну сначала пытается подключиться к базе данных. Тогда while будет выполнять что-то. Fetch_assoc - Обрабатывает ряд результата запроса и возвращает ассоциативный массив. Var_dumb - Эта функция возвращает структурированную информацию об одном или более выражений, которая включает его тип и значение.Массивы обрабатываются рекурсивно со значениями, предназначенными для показа структуры.Ну я только не знаю что такое $res
     
  15. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Ничего не пропустил? А die()?
    --- Добавлено ---
    Это называется массив. Если ты не знал, то в php все выражения, перед которыми есть $ это либо переменные, либо массивы. В данном случаи - это массив.
     
    Terminator004 нравится это.
  16. Terminator004

    Terminator004 Новичок

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

    SamyRed Старожил

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

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    Так значит вот так должно быть :
    PHP:
    1. $db = mysqli_connect ($localhost, $root, $ $pr2);
    2. $q = $db->query ("SHOW DATABASES");
    3. while ($res = $q->fetch_assoc()) die("");{
    4. var_dump ($res); echo "<br>";
    5. }
    Так сюда die ставить? Просто, мне трудно разобраться куда поставить die. знаю что после цикла, но где точно так не очень ))
     
  19. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Давай дальше... Где заканчивается цикл?
     
  20. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    Но мы про цикли вообще не разговаривали. Мы выяснили что такое массивы или переменные.
     
  21. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Ну надо же понять где die () ставить. Так что давай, дерзай))) Где конец цикла?
     
  22. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    ААА, вспомнил что такое цикл. Ну я думал что die должен тут быть :
    PHP:
    1. $db = mysqli_connect ($localhost, $root, $ $pr2);
    2. $q = $db->query ("SHOW DATABASES");
    3. while ($res = $q->fetch_assoc()) ;die(""){
    4. var_dump ($res); echo "<br>";
    5. }
    Ну так цикл заканчивается после " ; "
    Например :
    while ($res = $q->fetch_assoc()) ; <--- это конец
    --- Добавлено ---
    или может так :
    PHP:
    1. $db = mysqli_connect ($localhost, $root, $ $pr2);
    2. $q = $db->query ("SHOW DATABASES");
    3. while ($res = $q->fetch_assoc()) die("");{
    4. var_dump ($res); echo "<br>";
    5. }
     
  23. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Неееет. Это только нечало. Конец это где "}". Вот там и ставь die(); И говори выхлоп. Спать уже хочу)
     
  24. Terminator004

    Terminator004 Новичок

    С нами с:
    1 дек 2016
    Сообщения:
    195
    Симпатии:
    1
    Ааааа, всё ясно. Я так и бы подумавши. Ну так вот мой код :
    PHP:
    1. <?php  
    2.  
    3.  
    4. $db = mysqli_connect ($localhost, $root, $ $pr2);
    5. $q = $db->query ("SHOW DATABASES");
    6. while ($res = $q->fetch_assoc()) ;{
    7. var_dump ($res); echo "<br>";
    8. }
    9. die("");
    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. ?>
    На сайте написано : NULL
     
  25. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Что за ";"?