表单处理
我们都知道,一个动态网站的核心就是数据的交互。而如何进行数据的交互,答案就是表单。我们通过提交表单,将需要保存的数据提交给后台处理程序。后台处理程序在经过过滤等其他处理,然后保存到数据库中。但我们需要展现他们的时候,我们再从数据库中取出他们。
首先简单介绍下什么是表单。表单是html中的一个基本元素,它设计的目的就是为了数据的交互。有两种提交表单的方式,一种是get,一种是post.
下面主要讲解go web中如何处理表单。
- 编写html表单页面,action为需要提交的后台处理url.
- 编写表单处理逻辑,嗲用request parseForm方法进行表单接收 r.PostForm.Get(“title”)接收具体的表单值
- 编写回显表单处理结果
<form method="post" action="formadd">
<textarea name="title"></textarea>
<button type="submit">添加新闻</button>
</form>
method是提交表单的方式,get是在url中提交,post是在header中提交
name是要提交给后台接收的值,这里是title.
func handleFormAdd(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
title := r.PostForm.Get("title")
//TODO:将数据保存到数据库,然后再显示到页面上
db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test_new")
if err != nil {
panic(err)
}
db.Exec("insert into news set title = ?", title)
}
这里我们调用r.ParseForm()对表单提交的title字段进行接收,然后插入到数据库中。
func handleForm(w http.ResponseWriter, r *http.Request) {
//数据库获取数据
db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test_new")
if err != nil {
panic(err)
}
rows, err := db.Query("select id,title from news")
if err != nil {
panic(err)
}
var (
id string
title string
)
var news []string
for rows.Next() {
rows.Scan(&id, &title)
news = append(news, title)
}
templates.ExecuteTemplate(w, "form.html", news)
}
然后我们调用handleForm方法回显表单处理结果,将新插入的数据显示在表单上。