###前提・実現したいこと
login画面で入力したものをデータベースに保存したい。
db.execのqueryの後の値は保存されますが、formで入力した値が保存されていないので改善したいです。
###発生している問題・エラーメッセージ
コードの中に入れた値はデータベースに保存されるけれど、formで入力したものはなにもならない。
エラーメッセージ insert error: sql: expected 5 arguments, got 4
###該当のソースコード
go
1package main 2 3import( 4 5 "fmt" 6 "html/template" 7 "log" 8 "net/http" 9 "database/sql" 10 _"github.com/go-sql-driver/mysql" 11) 12 13type student struct{ 14 //id int `db:"id, primarykey, autoincrement"` 15 name string `db:"name size:255, uni"` 16 cardnum string `db:"cardnum, size:255, unique"` 17 seminar string `db:"seminar, size:255"` 18 password string `db:"password, size:255, unique"` 19} 20 21func login(w http.ResponseWriter, r *http.Request){ 22 fmt.Println("method:", r.Method) 23 if r.Method == "GET"{ 24 t, _ := template.ParseFiles("tmpl/login.gtpl") 25 t.Execute(w, nil) 26 }else{ 27 r.ParseForm() 28 fmt.Println("name:", template.HTMLEscapeString(r.Form.Get("name"))) 29 fmt.Println("cardnum:",template.HTMLEscapeString(r.Form.Get("cardnum"))) 30 fmt.Println("seminar:",template.HTMLEscapeString(r.Form.Get("seminar"))) 31 fmt.Println("password:", template.HTMLEscapeString(r.Form.Get("password"))) 32 template.HTMLEscape(w, []byte(r.Form.Get("username"))) 33 34 } 35} 36 37func insert(db *sql.DB) { 38 query := "INSERT INTO student values(null, ?, ?, ?, ?)" 39 result, err := db.Exec(query,"name","cardnum", "seminar", "password") 40 if err != nil { 41 log.Fatal("insert error: ", err) 42 } 43 if lastId, lerr := result.LastInsertId(); lerr != nil { // unsupport... 44 fmt.Println("insert last id: %d", lastId) 45 } 46} 47 48func getDB()(db *sql.DB) { 49 50 db, err := sql.Open("mysql", "root:passwprd@/dbname") 51 if err !=nil{ 52 log.Fatal("open error: %v", err) 53 } 54 return db 55} 56 57func main() { 58 59 fmt.Println("** mysql start **") 60 db := getDB() 61 62 insert(db) 63 64 defer db.Close() 65 66 fmt.Println("** mysql end **") 67 68 //http.HandleFunc("/", sayhelloName) 69 http.HandleFunc("/", login) 70 err := http.ListenAndServe(":3000", nil) 71 if err != nil{ 72 log.Fatal("ListenAndServe:",err) 73 } 74} 75 76login.gtpl 77 78<!DOCTYPE html> 79 80<html> 81<head> 82<title></title> 83</head> 84<body> 85<form action="/login" method="post"> 86 名前:<input type="text" name="name"> 87 学籍番号:<input type="text" name="cardnum"> 88 所属ゼミ:<input type="text" name="seminar"> 89 パスワード:<input type="password" name="password"> 90 <input type="submit" value="ログイン"> 91</form> 92</body> 93</html> 94
###試したこと
課題に対してアプローチしたことを記載してください
valueの部分や、execの部分を変えてみた。
他のinsertの仕方も試してはみたがダメだった。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答2件
あなたの回答
tips
プレビュー