V prvním článku o přihlašování na stránky jsme si ukázali, jak umožnit přihlášení uživatele a jak tento stav poté otestovat. V dnešním článku si na četné žádosti čtenářů ukážeme, jak dovolit uživateli změnit heslo.

Pro změnu hesla si nejprve vytvoříme formulář, kde uživatel vyplní své původní heslo a poté i heslo nové a ještě jednou nové heslo pro ověření. Po odeslání formuláře jsou vyplněné údaje předány skriptu, který zajistí jejich zpracování. Pro změnu hesla je ovšem nutné, aby byl uživatel již přihlášen.

Ve skriptu nejprve otestujeme, zda-li jsou vyplněny všechny položky ve formuláři a následně ověříme, zdali se položky password1 (nové heslo) a password2 (nové heslo pro kontrolu) shodují. Pokud jsou tyto výchozí podmínky splněny, přistoupíme k dalším kontrolám, v opačném případě vypíšeme důvod, proč nelze heslo změnit.

V dalším kroku ověříme, že staré heslo odpovídá ID přihlášeného uživatele. Pokud jsou obě podmínky splněny provedeme změnu hesla, kterou si následně ověříme a uživateli vypíšeme informaci o úspěchu či neúspěchu změny hesla.

Z minulého článku použijeme všechny soubory bez jakékoliv modifikace a dnešní funkci umístíme do souboru changepsw.asp ve kterém bude umístěna veškerá logika pro změnu hesla.

<!doctype html public „-//w3c//dtd html 4.0 transitional//en“>
<html>
<head>
<title>interval.cz – změna hesla</title>
<meta http-equiv=“content-type“ content=“text/html; charset=windows-1250″></head>
<body>
<center>
<!–#include file=“connect.asp“–>
<!–#include file=“islogin.asp“–>
<%
password1=trim(request.form(„password1“))
password2=trim(request.form(„password2“))
passwordold=trim(request.form(„passwordold“))
zmenaok=0
on error resume next
if len(password1)>0 and len(passwordold)>0 and len(password2)>0 then ‚ test zda jsou položky vyplněné
   if strcomp(password1,password2)=0 then ‚ test zda bylo heslo pro kontrolu zadáno stejné
      if isconnectdb() then
         ‚ ověření zda bylo správně zadáno staré heslo
         sql=“select id from users where heslo='“&passwordold&“‚ and id=“&session(„userid“)
         set rs=objconn.execute(sql)
         if not rs.eof then
         ‚ změna hesla
            sql=“update users set heslo='“&password1&“‚ where id=“&session(„userid“)&“and heslo='“&passwordold&“‚“
            objconn.execute(sql)
            if err.number=0 then‚ ověření zda se něco nestalo
               response.write(„heslo bylo změněno“)
               zmenaok=1
            else
               response.write(„heslo nebylo změněno – problém s databází“)
            end if
         else
            response.write(„heslo nebylo změněno – špatné staré heslo“)
         end if
         rs.close
         set rs=nothing
         disconnect()
      else
         response.write(„heslo nebylo změněno – problém s databází“)
      end if
   else
      response.write(„heslo nebylo změněno – problém s databází – nové heslo se neshoduje s heslem pro kontrolu“)
   end if
end if
if zmenaok=1 then
else
%>
<form action=““ method=“post“ id=“form1″ name=“form1″>
   <table cellspacing=“2″ cellpadding=“2″>
      <tr>
         <td>původní heslo</td>
         <td><input type=“password“ id=“password1″ name=“passwordold“></td>
      </tr>
      <tr>
         <td>nové heslo:</td>
         <td><input type=“password“ id=“password1″ name=“password1″></td>
      </tr>
      <tr>
         <td>heslo pro kontrolu:</td>
         <td><input type=“password“ id=“password1″ name=“password2″></td>
      </tr>
      <tr>
         <td colspan=“2″><input type=“submit“ name=“submit1″ value=“odeslat“ id=“submit1″></td>
      </tr>
   </table>
</form>
<%end if%>
</font> </center>
</body>
</html>

Ve skriptu je použita ještě proměnná zmenaok. Tato proměnná je na počátku skriptu nastavena na 0 a v případě úspěšné změny hesla je nastavena na 1. Pomocí podmínky, která testuje hodnotu této proměnné je v případě neúspěšné změny hesla zobrazen formulář pro zadání příslušných údajů pro změnu hesla. Pozorný čtenář už tuší, že formulář se díky skladbě podmínek zobrazí také v případě prvního přístupu na stránku changepsw.asp.

V changepsw.asp jsou použity dva include soubory a to sice connect.asp, který slouží pro spojení s databází. Druhý soubor se jmenuje islogin.asp a obsahuje kód, který otestuje, zda-li je uživatel přihlášen. Tento soubor byl popisován v minulém díle.

Dnešní skript si jako vždy můžete stáhnout zde.

Tímto jsme dali uživatelům do ruky nástroj, jak si snadno měnit heslo, ale také jsme si tímto vytvořili další problém – co když si uživatel změní heslo a následně ho zapomene. Za účelem minimalizace tohoto problému si v příštím článku budete moci přečíst, jak umožnit odeslání hesla na email, který je uveden v databázi.

Žádný příspěvek v diskuzi

Odpovědět