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>
}