Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 1
Регистрация: 27.05.2013
Сообщений: 65
1

Перерисовка страницы или что это?

08.01.2014, 23:34. Показов 1804. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Извиняюсь за глупый вопрос, просто хочу разобраться.

Допустим есть страница восстановления пароля mysite.ru/forgetpass.php

При открытии появляется поле для ввода мыла и кнопка далее. После ввода мыла и нажатия на кнопку страница должна "перерисоваться". Как бы очиститься и должно появится поле для ввода ответа на секретный вопрос и так же кнопка далее. После того как введёшь ответ и нажмёшь далее на этой же странице появится новый сгенерированный пароль (простенький вариант восстановления).

На мэйл.ру приблизительный пример реализации такой фишки (у них конечно покруче, но все же..).


Ребят подскажите как это реализуется (кто понял меня)... Сам только начал изучать php, и появились некоторые вопросы. Узнал бы в гугле, но даже не знаю как запрос в поиске составить))

P.S Знаю как реализовать, если создать 2-3 отдельные php файла)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2014, 23:34
Ответы с готовыми решениями:

Неизвестная кодировка или я не знаю что это)
Задача - получить исходный код плагина на PHP. Плагин рабочий и запускается без ошибок, а вот...

Почему это так работает или я что-то не догоняю?
Вот есть у меня скрипт, который обрабатывает запросы по ajax. Приходит запрос q в формате: q - имя...

Нашел подозрительный код. Это дыра или что?
Всем привет! В скрипте нашел подозрительный код: $url = isset($_POST) ? trim($_POST) : ''; Это...

Проблема передачи переменных, что это глюк или происки империализма?
Народ! Ответ для многих конечно очевидный, для меня он тоже был года два подряд очевыдным :)...

2
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
09.01.2014, 00:09 2
Лучший ответ Сообщение было отмечено drka как решение

Решение

Создаете форму, ставите условие "если данные формы не отправлены, то ...", внутри отображаете первую форму. В else (иначе) проверяете все введенные данные, выдаете ошибки, если что-то не так, соответственно, и, если все ок, отправляете письмо с секретным кодом (который, конечно, куда-то сохраняете, в БД или в файлик) и отображаете вторую форму с вводом секретного кода из письма. Добавляете еще одно условие - если данные формы отправлены, то проверяете ключ. Если он верный, то отображаете пароль.

Только два жирных НО:
1. Любой пользователь может указать свое мыло, получит секретный код на мыло, получит новый пароль. Учетная запись взломана "без единой строчки кода". Профит. Решение - либо сверять с мылом пользователя, либо использовать для проверки проверочное слово. В любом случае, имхо, лучше отсылать на сохраненное мыло пользователя. За исключением восстановления самого мыла - там обратная ситуация.
2. Отображение пароля "на экран" - плохая идея. Отсылайте пароль на почту пользователя, т.к., во-первых, кто-то может его "подглядеть", во-вторых, он может его банально забыть, к примеру, по дороге домой из интернет-кафе или с работы, в-третьих, просто, так надежнее.

Код, примерно такой
PHP
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
if(empty($_POST['имя_инпута_формы_активации']))
{
    if(empty($_POST['email']))
    {
        //отображаем форму для ввода мыла (...<input name="email" type="email">...)
    }
    else
    {
        if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
            echo 'Неверный формат e-mail.';
        else
        {
            if($_POST['email'] != email_из_бд)
                echo 'E-mail не найден в БД';
            else
            {
                $code = sha1('Y%$IR%$*&((#$%#fhsh$#^*;' . date('YmdHis') . '%$*(#*%&*(#*)');
                //сохраняем куда-то код активации
                mail($_POST['email'], 'Change Password..', 'Bla-bla-bla new code is ' . $code);
                //отображаем форму ввода для кода активации
            }
        }
    }
}
else
{
    //сверяем полученный код с сохраненным, и, если все ок, обновляем пароль.
    //Если что-то не так - выдаем ошибку.
}
Конечно, код несколько сумбурный, но, при желании, можно и покрасивее все сделать, я лишь накидал образно..

Добавлено через 1 минуту
хотя, конечно, лучше разные формы активации разделить с помощью GET, а то я что-то забыл, что страницу могут "обновить"..
0
1 / 1 / 1
Регистрация: 27.05.2013
Сообщений: 65
09.01.2014, 00:25  [ТС] 3
Да я не пытаюсь сделать конфетку, пока с низов разбираюсь. На "коленке", на локалхосте создаю авторизацию, регистрацию, восстановление пароля.

Вот смотрите. Открывается страница, вводим мыло.

Перерисовка страницы или что это?


После этого нажимаю далее, на этой же странице (forget.php) должна как бы очищаться прошлая форма и появляеться другая.

Перерисовка страницы или что это?


Нажимаю далее и на экран выводится сгенерированный пароль.

Я придумал так:

Кликните здесь для просмотра всего текста

PHP
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
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<html>
<head>
        <title>Восстановление пароля</title>
</head>
<body>
    <center>
        <form method = GET>
            Введите ваш E-mail
            <br>
            <input type = text name = email value = "<?php if(isset($_POST['submit'])) echo $_POST['email']; ?>" />
            <br>
<?php
 
    if(isset($_POST['submit']))
    {
        $query = mysql_query("SELECT COUNT(user_id) FROM users WHERE email='".$_POST['email']."'");     
    
        if(mysql_result($query, 0) > 0)
        {
            
            mysql_query("SET NAMES 'cp1251'");           
            $query = mysql_query("SELECT secret_answ, secret_qw FROM users WHERE email='".mysql_real_escape_string($_POST['email'])."'");
            $secret = mysql_fetch_assoc($query);
            echo "Секретный вопрос: ".$secret['secret_answ']."?";
            echo "<br>";
            echo "Ответ на секретный вопрос<input type = text name = secret_qw /><br>";
 
 
        } 
        
        else
        
        {
            echo "<font color = red><b>Пользователь с таким E-mail не найден!</b></font><br>";
        }
    
         #Тут должен быть дальше код: Сравнение введённого ответа на секретный вопрос с ответом в базе + генерация нового пароля.
                   Но как сделать это все на одной странице я не знаю...
}
 
 
?>
            <input type = submit name = submit value = "Далее">
        </form>
    </center>
</body>
</html>
0
09.01.2014, 00:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2014, 00:25
Помогаю со студенческими работами здесь

Не работает intval или как выяснить что строка это число
Я в ступоре, код: $s='win 8'; echo '$s=&quot;'.$s.'&quot;&lt;br&gt;'; echo 'intval($s)=&quot;'.intval($s).'&quot;&lt;br&gt;';...

Это действительно код для защиты или это дыра?
Всем привет! Один человек порекомендовал мне вставить код ниже, на мой сайт для защиты. &lt;? if(...

Что это может быть? или как это называется? Меня взломали!
Доброго дня всем, мне по майл.ру.агент отправили сообщением так: Витя Гасай (08.03.2011 23:29)...

Время жизни страницы - что это?
Привет Объясните плз, что такое время жизни страницы? Задали вопрос, не смог ответить. В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru