我要執行的signup.html檔案中有兩個表單。
- 第一個表單重定向到
/login但不將資料插入到資料庫中。 - 第二種形式既不插入資料也不重定向到注冊頁面。
如果我將兩者設定action為相同的鏈接,那么它會將資料插入到資料庫中。如何POST在單個函式中執行多個請求并重定向到多個頁面?
謝謝!
控制器
func Signup(w http.ResponseWriter, r *http.Request) error {
if r.Method == "GET" {
return SignupTmpl.Execute(w, nil)
} else if r.Method == "POST" && http.MethodPost == "Register" {
register := models.RegisterUser{
Name: r.FormValue("name"),
Email: r.FormValue("email"),
Password: r.FormValue("password"),
}
values := [3]string{register.Name, register.Email, register.Password}
database.InsertRegister(values)
return LoginTmpl.Execute(w, nil)
} else if r.Method == "POST" && http.MethodPost == "Newsletter" {
Newsletter(w, r)
return SignupTmpl.Execute(w, nil)
}
return nil
}
注冊.html
// Signup form
<form class="form" method="post" action="/login">
...
<input type="submit" value="Register">
</form>
// Newsletter form
<form class="newsletter" method="post" action="/signup">
...
<input type="submit" value="Newsletter">
</form>
uj5u.com熱心網友回復:
http.MethodPost == "Register" ... http.MethodPost == "Newsletter"
這些比較毫無意義。 http.MethodPost是一個常量,它包含 HTTP Post 請求(“POST”)的動詞。常量變數比硬編碼值更受歡迎,因為與硬編碼字串不同,typeo 會導致編譯時錯誤。
<input type="submit" value="Newsletter">
如果你希望能夠訪問這個輸入標簽的值,你需要給它一個name:
<input type="submit" name="operation" value="Newsletter">
然后您可以檢查該表單值:
if r.Method == "GET" {
return SignupTmpl.Execute(w, nil)
} else if r.Method == "POST" {
if r.FormValue("operation") == "Register" {
...
} else if r.FormValue("operation") == "Newsletter" {
...
}
}
我個人會為所有這些操作撰寫不同的處理程式,然后將它們指向不同的 URL。您的大部分處理程式邏輯都是路由,并且可以使用不同的處理程式免費完成。但是你所做的很好 - 只要確保:
- 稍后需要參考的名稱輸入欄位
- 不要將 'POST' 與 'POST' 進行比較,而是將命名的輸入欄位值與預期值進行比較
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/385055.html
