go学习——连接数据库与form表单

15 篇文章 0 订阅

连接数据库


    var db *sql.DB
	var err error
	db, err = sql.Open("mysql", "root:102077@tcp(127.0.0.1:3306)/accounting?parseTime=true")
	if err != nil {
		fmt.Println("数据库连接失败,err:",err.Error())
		return
	}
	err = db.Ping()
	if err != nil {
		fmt.Println("数据库连接失败,err:",err.Error())
		return
	}
    db.Close()

连接数据库案例

func SelectUserByUserName(username string ) model.User {
	//声明一个结构体
	var user model.User
	//连接数据库
	db := util.GetCont()
	//sql语句
	contains := "select id,name,password from t_user where name = ?"
	//进行预处理
	stmt, err := db.Prepare(contains)
	if err != nil {
		log.Fatalln(err.Error())
	}
	//QueryRow()读取一行内容
	//Query()读取多行内容
	row := stmt.QueryRow(username)
	if err != nil {
		log.Fatalln(err.Error())
	}
	//将读取到的内容赋给结构体
	err = row.Scan(&user.Id, &user.Name, &user.Password)
	//处理错误
	switch {
	case err == sql.ErrNoRows:
	case err != nil:
		if _, file, line, ok := runtime.Caller(0); ok {
			fmt.Println(err, file, line)
		}
	}
	return user
}

与前端页面连接

浏览器导航条为GET请求
通过HTML提交为POST请求

解析模板
t, err := template.ParseFiles("./index")
返回给{{.}}一个值
t.Execute(w,"")
解析表单
err := r.ParseForm()
获取表单中的值
userid := r.Form["userid"]

登录案例

func Login(w http.ResponseWriter, r *http.Request) {
	//浏览器首页输入发出GET请求
	if r.Method == "GET" {
		//解析login.tmpl中的内容
		t1, err := template.ParseFiles("./web/login.html")
		if err != nil {
			log.Fatalln(err.Error())
		}
		//{{.}}不需要赋值,也不需要显示出来
		err = t1.Execute(w, "")
		if err != nil {
			log.Fatalln(err.Error())
		}
		return
	} else { //页面提交登录发出post请求
		//解析login.tmpl中的内容
		t1, err := template.ParseFiles("./web/login.html")
		if err != nil {
			log.Fatalln(err.Error())
		}
		//解析form表单
		err = r.ParseForm()
		if err != nil {
			log.Fatalln(err.Error())
		}
		//获取form表单中的内容,获取的值为string类型
		//用户名
		name := r.Form["name"][0]
		if err != nil {
			log.Fatalln(err.Error())
		}
		//用户密码
		password := r.Form["password"][0]
		if err != nil {
			log.Println(err.Error())
		}
		//根据输入的用户名查询到的用户结构体
		user := service.SelectUserByUserName(name)
		//用户不存在
		if user.IsStructureEmpty() {
			//给{{.}}赋值,说明用户不存在,重新登录
			err = t1.Execute(w, "该用户不存在!")
			if err != nil {
				log.Println(err.Error())
			}
		} else {
			//判断密码是否正确
			if user.Password == password {
				//判断是否为管理员登录
				if user.Id == 0 {
					//管理员登录成功进入后台页面,解析index.html
					t, err := template.ParseFiles("./web/index.html")
					if err != nil {
						fmt.Println(err.Error())
					}
					t.Execute(w,nil)
				} else {
					//登录成功进入首页,解析首页表单
					//http.Redirect(w,r,"./web/firstpage.html",http.StatusTemporaryRedirect)
					t, err := template.ParseFiles("./web/firstpage.html")
					if err != nil {
						fmt.Println(err.Error())
					}
					//{{.}}不需要赋值,也不需要显示出来
					err = t.Execute(w, "")
					if err != nil {
						log.Println(err.Error())
					}
				}
			} else {
				//给{{.}}赋值,说明登录失败,重新登录
				err = t1.Execute(w, "登录失败,请重新登录!")
				if err != nil {
					log.Println(err.Error())
				}
			}
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值