[PHP] Przypominanie hasła logowania za pomocą pytania

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
justynasankiel
Posty: 18
Rejestracja: ndz sty 11, 2009 10:20 am

[PHP] Przypominanie hasła logowania za pomocą pytania

Post autor: justynasankiel »

Witam!

Ostatnio próbuję napisać pewien skrypt, który po wciśnięciu przycisku "Zapomniałeś hasła?", pokarze formularz z pytaniem i polem odpowiedzi na nie.
Pytanie i odpowiedź będą pobierane z bazy danych z tabelki Przebywanie użytkowników:

Kod: Zaznacz cały

  $wynik =mysql_query("CREATE TABLE `Przebywanie_uzytkownikow` (
`id` INT( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`stan` VARCHAR( 4 ) NOT NULL,
`status` VARCHAR( 10 ) NOT NULL,
`nazwa` VARCHAR( 15 ) NOT NULL,
`pytanie` VARCHAR( 30 ) NOT NULL,
`odpowiedz` VARCHAR( 15 ) NOT NULL,
`ostatnie_logowanie` DATETIME NOT NULL
) ENGINE = MYISAM COMMENT = 'Podgląd przebywania użytkowinków na stronach'");
która jest powiązana z drugą tabelką Wykaz użytkowników:

Kod: Zaznacz cały

  $wynik =mysql_query("CREATE TABLE `Wykaz_uzytkownikow` (
`id` INT( 15 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`status` VARCHAR( 10 ) NOT NULL,
`nazwa` VARCHAR( 15 ) NOT NULL,
`haslo` VARCHAR( 15 ) NOT NULL,
`data_rejestracji` DATE NOT NULL,
`imie` VARCHAR( 15 ) NOT NULL,
`nazwisko` VARCHAR( 30 ) NOT NULL,
`nr_kont` INT( 6 ) NOT NULL,
`wydz` VARCHAR( 15 ) NOT NULL,
`fun` VARCHAR( 10 ) NOT NULL
) ENGINE = MYISAM COMMENT = 'Wykaz użytkowników'");
if ($wynik) echo "Tabela została stworzona";
  }
i tabelką status użytkownika:

Kod: Zaznacz cały

$wynik =mysql_query('CREATE TABLE `status_uzytkownika` ('
        . ' `id` INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY, '
        . ' `status` VARCHAR(10) NOT NULL COMMENT \'Status\', '
        . ' `nazwa` VARCHAR(15) NOT NULL COMMENT \'Nazwa\''
        . ' )'
        . ' ENGINE = myisam'
        . ' COMMENT = \'Status dla użytkowników\';';
oraz kod skryptu:

Kod: Zaznacz cały

SELECT * FROM Wykaz_uzytkownikow WHERE username = '{$username}' or password = '{$pass}' 
$username = mysql_real_escape_string($_POST['username']); 
$pass = md5($_POST['password']); 
print $user[0]['pytanie']; 
$odpowiedz = mysql_real_escape_string($_POST['odpowiedz']); 
if ($odpowiedz == $user[0]['odpowiedz']) { 
... <html><head></head><body><fieldset style="border: 6px solid black; width: 500px; height: 50%;  text-align: center; background-color: snow;"> 
                    <p style="color: blue;"><big>FORMULARZ ODZYSKIWANIA ZAPOMNIANEGO HASŁA</big></p> 


                       <center><form action="zaloguj.php" name="przypominanie" method="post" onsubmit="return setAction(this);" style="margin:0px;"> 

                          <fieldset style="border: 3px solid blue; width: 460px; height: 180px; text-align: center; background-color: snow;"> 
                            <legend><big>Wpisz dane:</big></legend> 


                                     <a> Nazwa użytkownika:           </a><input type="text" name="login" id="input" style="color: blue; background-color: yellow;"/>  </a> <br><br> 

                                     <a> Odpowiedz na następujące pytanie:</a><input type="text" name="pytanie" id="input" size="20" style="color: blue; background-color: InactiveCaptionText;"/>  <a href="#" title="To jest twoje pytanie przypominające, jakie podałeś przy rejestracji użytkownika"><small>INFO</small><br><br> 

                                     <a> Wpisz odpowiedź na pytanie:           </a><input type="password" name="odpowiedz" id="input" style="color: blue; background-color: InactiveCaptionText;"/> <a href="#" title="Tuataj wpisz twoja odpowiedź na powyższe pytanie przypominające, jakie podałeś przy rejestracji użytkownika"><small>INFO</small><br><br> 



                               <label for><a><button name="submit" value="Zatwierdź" onClick="parent.location.href='index.html'"/>Zatwierdź</button></a></label> 


                          </form></center> 

                  </fieldset></body></html> 

} else { 
          <html><head></head><body><table border=1 align=center> 
                   <tr> 
                        <td bgcolor=aqua height=20 width=500>Komunikat</td> 
                   </tr> 
                   <tr> 
                        <td bgcolor="yellow" height=40 width=500>Podałeś błędną odpowiedź na zadane pytanie. Wpisz jeszcze raz poprawną odpowiedź na zadane pytanie!</td> 
                   </tr> 

             </table></body></html> 
}
Jeśli użytkownik nie odpowie prawidłowo na pytanie to zostanie przekierowany na stronę logowania, a jeśli odpowie prawidłowo to zostanie przekierowany na strony głównej.

Hasło nie może być wysyłane na maila tak jak to ma miejsce w skrzynkach pocztowych.

Czy mógłby mi ktoś sprawdzić ten skrypt i poprawić błędy?

justynasankiel
htmlowiecii
Nowy
Nowy
Posty: 86
Rejestracja: sob lip 19, 2008 11:51 am

Re: [PHP] Przypominanie hasła logowania za pomocą pytania

Post autor: htmlowiecii »

takie rozwiązanie ma wady, bo dajmy mamy pytanie "imię twojego psa" i co jak ktoś ma kilka psów i nie pamięta którego imię podał, poza tym przy wypełnianiu formularza można zrobić literówkę i już hasła nie odzyska (bo komu przypomni się że napisał "Az;or" pól roku temu zamiast "Azor") lepszym sposobem jest podanie w formularzu rejestracyjnym nr.komórki i potem zapominalski musiałby wysłać SMS pod nr 7xxx(x) żeby odzyskać hasło z numeru podanym w formularzu
justynasankiel
Posty: 18
Rejestracja: ndz sty 11, 2009 10:20 am

Re: [PHP] Przypominanie hasła logowania za pomocą pytania

Post autor: justynasankiel »

Też myślałam o numerze komórki, ale nie wiem jak to zrobić, żeby przysyłany był sms z hasłem na komorkę. Tutaj może być tylko darmowa bramka sms.

Dlatego wymyśliłam taki sposób przypominania, ponieważ moje strony będą działać w wewnętrznej malutkiej sieci, która nie będzie powiązana z ogólnie dostępną siecią.
htmlowiecii
Nowy
Nowy
Posty: 86
Rejestracja: sob lip 19, 2008 11:51 am

Re: [PHP] Przypominanie hasła logowania za pomocą pytania

Post autor: htmlowiecii »

jeżeli chodzi o SMS to są sieci pośredniczącze np.:allpay czy alertpay ale jak strona ma być tylko wewnątrz firmy to rozwiązanie jest bezcelowe wystarczy telefon do administratora strony i po krzyku ewentualnie można zajść nie męczyłbym się z czymś takim w takiej sytuacji
ODPOWIEDZ