敏哥gege
2017-12-21 18:15:17
golang处理表单的输入+非空判断+防止表单重复提交
package main
import (
"fmt"
"html/template"
"log"
"net/http"
)
func login(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
fmt.Println("method:", r.Method) //获取请求的方法
if r.Method == "GET" {
t, _ := template.ParseFiles("login.gtpl")
log.Println(t.Execute(w, nil))
} else {
//请求的是登录数据,那么执行登录的逻辑判断
//fmt.Println("username:", r.Form["username"])
//fmt.Println("password:", r.Form["password"])
fmt.Println("username:", template.HTMLEscapeString(r.Form.Get("username"))) //输出到服务器端
fmt.Println("password:", template.HTMLEscapeString(r.Form.Get("password")))
//template.HTMLEscape(w, []byte(r.Form.Get("username"))) //输出到客户端
t, err := template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`)
err = t.ExecuteTemplate(out, "T", template.HTML("<script>alert('you have been pwned')</script>"))
}
}
func main() {
http.HandleFunc("/login", login) //设置访问的路由
err := http.ListenAndServe(":9090", nil) //设置监听的端口
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
login.gtpl
<html>
<head>
<title></title>
<script type="text/javascript">
var checkSubmitFlg = false; //防止表单重复提交标示符
function myCheck()
{
if(checkSubmitFlg ==true){
return false; //当表单被提交过一次后checkSubmitFlg将变为true,根据判断将无法进行提交。
}
for(var i=0;i<document.form1.elements.length-1;i++)
{
if(document.form1.elements[i].value=="")
{
alert("当前表单不能有空项");
document.form1.elements[i].focus();
return false;
}
}
checkSubmitFlg ==true;
return true;
}
</script>
</head>
<body>
<form name="form1" action="/login?username=astaxie" method="post" onSubmit="return myCheck()">
用户名:<input type="text" name="username">
密码:<input type="password" name="password">
<input type="submit" value="登录">
</form>
</body>
</html>
评论



最近浏览
