Html 在忘记密码页面中添加其他表单

Html 在忘记密码页面中添加其他表单,html,forms,cgi,tcl,Html,Forms,Cgi,Tcl,我有一个忘记密码的表单,它会检查用户名,如果它有效,会向他的电子邮件发送临时密码 它工作正常,但我需要的是在我提交用户名后,我需要页面显示另一个表单,其中显示带有安全问题的表单,如果该表单有效,则创建临时密码并通过电子邮件发送给它。 这是到目前为止我的代码,我不知道在哪里添加新表单以及在哪里准确地验证它 HTML::cgi_read ############################################################### # READ

我有一个忘记密码的表单,它会检查用户名,如果它有效,会向他的电子邮件发送临时密码

它工作正常,但我需要的是在我提交用户名后,我需要页面显示另一个表单,其中显示带有安全问题的表单,如果该表单有效,则创建临时密码并通过电子邮件发送给它。 这是到目前为止我的代码,我不知道在哪里添加新表单以及在哪里准确地验证它

HTML::cgi_read

    ###############################################################
    #   READ / VERIFY CGI VARIABLES
    ###############################################################
    SET_GLOBAL_VARS


    if { [catch {set REMOTE_ADDR        $CGI_DATA(REMOTE_ADDR)      } e] }  { set REMOTE_ADDR   "" }
    if { [catch {set HTTP_USER_AGENT    $CGI_DATA(HTTP_USER_AGENT)  } e] }  { set HTTP_USER_AGENT   "" }
    if { [catch {set COOKIE         $CGI_DATA(HTTP_COOKIE)      } e] }  { set COOKIE        "" }
    if { [catch {set MSG            $CGI_DATA(msg)          } e] }  { set MSG       "" }
    if { [catch {set USERNAME       $CGI_DATA(username)     } e] }  { set USERNAME      "" }
    if { [catch {set SECQUESTION        $CGI_DATA(secquestion)      } e] }  { set SECQUESTION   "" }
    if { [catch {set SECANSWER      $CGI_DATA(secanswer)        } e] }  { set SECANSWER     "" }

    ###############################################################
    #   ONLY ALLOW HTML START TO HAPPEN ONCE!
    #       Remember:   Redirects don't have HTML Start
    #               Meta Tags have to have it beforehand
    #               Cannot do both a redirect and a meta tag
    ###############################################################
    set HTMLSTARTFLAG 0
    proc HTML_START { } {
        global HTMLSTARTFLAG

        if {$HTMLSTARTFLAG < 1} {
            HTML::Start
            set HTMLSTARTFLAG 1
        }
    }

    ###############################################################
    #   START OF SCRIPT
    ###############################################################

    if {$USERNAME != ""} {
        ################################
        #   Do the hit for the entered user
        ################################
        set queryresult1 [InfxGetLogin $USERNAME]

        #any errors go back and show the blank login page
        if { [regexp -nocase "error" [lindex [split $queryresult1 ,] 0] ] } {
            set junk [InfxInsertLoginHistory $USERNAME "ForgotPassword" "$REMOTE_ADDR|$HTTP_USER_AGENT" "Error"]
            Redirect_Login "DB Error, Please try again."
            exit
        }

        set login   [lindex [lindex $queryresult1 0] 0]
        set locked  [lindex [lindex $queryresult1 0] 4]
        set dbquestion  [lindex [lindex $queryresult1 0] 5]
        set dbanswer    [lindex [lindex $queryresult1 0] 6]
        set emailTo [lindex [lindex $queryresult1 0] 7]
        set userId  [lindex [lindex $queryresult1 0] 8]

        ################################
        #   Validate user info
        ################################
        if {$login == ""} {
            set junk [InfxInsertLoginHistory $USERNAME "ForgotPassword" "$REMOTE_ADDR|$HTTP_USER_AGENT" "DoesNotExist"]
            Redirect_LoginForgotPass "Login Does Not Exist"
            exit
        }

        #locked people shouldn't get here, but if they do, they entered the page directly, send them away
        if {$locked == "t"} {
            set junk [InfxInsertLoginHistory $login "ForgotPassword" "$REMOTE_ADDR|$HTTP_USER_AGENT" "AcctLocked"]
            Redirect_LoginForgotPass "Account is Locked"
            exit
        }

        ################################
        #   Create temporary password
        #       Base64 encoding an rc4 encrypted text, then removing all special characters
        #       and taking the 1st 6 characters.
        ################################
        set pass [::base64::encode [rc4::rc4 -key [clock scan "now"] "randomizeme"]]
        regsub -all {[^a-zA-Z0-9]} $pass "" pass
        set pass [string range $pass 0 5]

        ################################
        #   Update DB w/ temporary password
        ################################
        set result [InfxResetUserPassword $userId $pass]

        if { $result != "ok" } {
            set junk [InfxInsertLoginHistory $login "ForgotPassword" "$REMOTE_ADDR|$HTTP_USER_AGENT" "Error"]
            Redirect_LoginForgotPass "DB Error, Please try again."
            exit
        }

        set result "ERROR"
        set result [HTML::mail "test@test.com $emailTo" "$emailFrom" "$emailSubj" "$emailMsg"]

        ################################
        #   Go back to login screen on success
        ################################
        if { $result == "0" } {
            Redirect_Login "Password Changed and Email Sent"
            exit
        } else {
            set junk [InfxInsertLoginHistory $login "ForgotPassword" "$REMOTE_ADDR|$HTTP_USER_AGENT" "EmailError"]
            Redirect_LoginForgotPass "Error Sending Email"
            exit
        }
    } else {
        ################################
        #   Initial display of username form
        ################################
        HTML_START

        puts {
        <head>
            <link rel="stylesheet" type="text/css" href="css/login.css" type="text/css">
            <script type="text/javascript" src="js/login.js"></script>

            <title> Services</title>

        </head>
        <body>
            <br><br>
            <img src="images/.gif" />
            <br><br><br>
            <div id="login">
                <form onsubmit="return validate_login_username(this)" action="login_forgotpw.cgi" method="post">
                    <table cellpadding="0" cellspacing="0">
                        <tr>
                            <th colspan="2"> Password Reset</th>
                        </tr>
                        <tr>
                            <td><label>Username:</label></td>
                            <td><input name="username"></input></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td><input type="submit" value="Submit"></input></td>
                        </tr>
                    </table>
                </form>
            </div>
        }

    puts "  <h3 class=\"errormessage\">$MSG</h3>"

        exit
    }
HTML::cgi\u读取
###############################################################
#读取/验证CGI变量
###############################################################
设置\u全局\u变量
如果{[catch{set REMOTE_ADDR$CGI_DATA(REMOTE_ADDR)}e]}{set REMOTE_ADDR”“}
如果{[catch{set HTTP_USER_AGENT$CGI_DATA(HTTP_USER_AGENT)}e]}{set HTTP_USER_AGENT”“}
如果{[catch{set COOKIE$CGI_DATA(HTTP_COOKIE)}e]}{set COOKIE”“}
如果{[catch{set MSG$CGI_DATA(MSG)}e]}{set MSG”“}
如果{[catch{set USERNAME$CGI_DATA(USERNAME)}e]}{set USERNAME”“}
如果{[catch{set SECQUESTION$CGI_DATA(SECQUESTION)}e]}{set SECQUESTION”“}
如果{[catch{set SECANSWER$CGI_DATA(SECANSWER)}e]}{set SECANSWER”“}
###############################################################
#只允许HTML开始发生一次!
#记住:重定向没有HTML开始
#Meta标签必须事先准备好
#无法同时执行重定向和元标记
###############################################################
将HTMLSTARTFLAG设置为0
proc HTML_START{}{
全局HTMLSTARTFLAG
如果{$HTMLSTARTFLAG<1}{
HTML::开始
将HTMLSTARTFLAG设置为1
}
}
###############################################################
#脚本开头
###############################################################
如果{$USERNAME!=“”}{
################################
#对输入的用户进行点击
################################
设置queryresult1[InfxGetLogin$USERNAME]
任何错误返回并显示空白登录页
如果{[regexp-nocase“error”[lindex[split$queryresult1,]0]}{
设置垃圾邮件[InfxInsertLoginHistory$USERNAME“ForgotPassword”“$REMOTE_ADDR |$HTTP_USER_AGENT”“Error”]
重定向\u登录“数据库错误,请重试。”
出口
}
设置登录名[lindex[lindex$queryresult1 0]0]
设置锁定[lindex[lindex$queryresult1 0]4]
设置数据库问题[lindex[lindex$queryresult1 0]5]
设置dbanswer[lindex[lindex$queryresult1 0]6]
将Email设置为[lindex[lindex$queryresult1 0]7]
设置用户标识[lindex[lindex$queryresult1 0]8]
################################
#验证用户信息
################################
如果{$login==“”}{
设置垃圾邮件[InfxInsertLoginHistory$USERNAME“ForgotPassword”“$REMOTE_ADDR |$HTTP_USER_AGENT”“DoesNotExist”]
重定向\u LoginForgotPass“登录不存在”
出口
}
#被锁定的人不应该到这里,但是如果他们到了,他们直接进入页面,把他们送走
如果{$locked==“t”}{
设置垃圾邮件[InfxInsertLoginHistory$login“ForgotPassword”“$REMOTE_ADDR |$HTTP_USER_AGENT”“AcctLocked”]
重定向\u LoginForgotPass“帐户已锁定”
出口
}
################################
#创建临时密码
#Base64对rc4加密文本进行编码,然后删除所有特殊字符
#取前6个字符。
################################
设置过程[::base64::encode[rc4::rc4-key[clock scan“now”]“randomizeme”]]
regsub-所有{[^a-zA-Z0-9]}$pass“”pass
设置传递[字符串范围$pass 0 5]
################################
#使用临时密码更新数据库
################################
设置结果[InfxResetUserPassword$userId$pass]
如果{$result!=“ok”}{
设置垃圾邮件[InfxInsertLoginHistory$login“ForgotPassword”“$REMOTE_ADDR |$HTTP_USER_AGENT”“Error”]
重定向\u LoginForgotPass“数据库错误,请重试。”
出口
}
设置结果“错误”
设置结果[HTML::mail”test@test.com$emailTo”“$emailFrom”“$emailSubj”“$emailMsg”]
################################
#成功后返回登录屏幕
################################
如果{$result==“0”}{
重定向\u登录“更改密码并发送电子邮件”
出口
}否则{
设置垃圾邮件[InfxInsertLoginHistory$login“ForgotPassword”“$REMOTE_ADDR |$HTTP_USER_AGENT”“EmailError”]
重定向\u LoginForgotPass“发送电子邮件时出错”
出口
}
}否则{
################################
#用户名表单的初始显示
################################
HTML_开始
放置{
服务





密码重置 用户名: } 放入“$MSG” 出口 }
这是我想要添加和验证的表单,最好在同一页中

puts "<form action='login_forgotpw.cgi' method='post'>"
    puts "<td><label><b>Security Question : </b></td><td>$dbquestion ?</label></td></tr>"
    puts "<tr>"
    puts "<td><label><b>Answer:</b></td><td><input type='text' name='secanswer'></input></td>"
    puts "<td><input type='submit' value='Submit'></input></td>"
put“”
提出“安全问题:$d
puts {
<form ...>...blah static stuff
}
# Now a dynamic bit
puts "<input type='hidden' name='whatever' value='$whatever'>"
# Back to a static part
puts {
</form>
}