我需要查看html表单输入值并将它们放入mysql数据库中。我目前正在使用r.Form
来获取地图。因此,我不必为每个有效的r.Form.Get("date")
使用,但是当我尝试将值放入数据库时。它编译得很好但我在浏览器中点击提交后得到sql: converting argument #0's type: unsupported type []string, a slice
。我可以通过
`date := strings.Join(m["date"], "")`
但是为30多个值执行此操作,特别是因为某些已提交的值将使用html模板从以前的数据库条目创建。如果我必须更改或添加更多以后似乎必须有一个更有效的方式,我见过for key, val := range m {}
但不幸的是我只做了大约一个星期,我无法弄清楚如何保持这些值并在每次迭代后更改它们设置的变量。那就是
for key, val := range m {
x := m[key]
}
这样它就会推出等效的
keyname := keyvalue
每次更改键名与地图中的键名相同,即
date := 2015-8-13
time := 18:56:11
或者如果有更简单的方法解决这个错误,那么为每个错误创建一个变量。
答案 0 :(得分:1)
HTML表单可以包含单个键的多个值。这就是请求表单字段被定义为字符串切片的映射的原因。 request Form声明为
Form url.Values
和url.Values被声明为
type Values map[string][]string
您可以使用以下方式访问密钥的第一个值:
var value string
if values := req.Form[key]; len(values) > 0 {
value = values[0]
}
url.Values Get帮助器方法将此代码简化为:
value := req.Form.Get(key)
http.Request FormValue辅助方法简化了一点:
value := req.FormValue(key)
使用以下方法迭代键和值:
for key, values := range req.Form {
for _, value := range values {
fmt.Println(key, value)
}
}
如果要迭代密钥的第一个值,请使用以下代码:
for key, values := range req.Form {
if len(values) > 0 {
value := values[0]
fmt.Println(key, value)
}
}
在访问req.Form之前,请调用req.ParseForm来解析查询字符串和请求正文。