数据库
启动数据库
使用 go-sql-driver/mysql 库连接到 MySQL 数据库。连接信息:root:123456@tcp(127.0.0.1:3306)/books
建立数据库以及相应的数据表
创建一个名为 “books” 的数据库。在 “books” 数据库中创建一个名为 “users” 的数据表,包含 “name” 和 “pass” 两个字段。在 “books” 数据库中创建一个名为 “stud” 的数据表,包含 “id”、“xuehao”、“xingming”、“ban”、“banma”、“kecheng” 和 “zy” 七个字段。
创建项目
2.1 创建项目
使用 Go 语言的 http 库创建一个 Web 应用程序。
bee new admin
打开项目
VS使用文本编辑器或 IDE 打开项目文件夹。
整理项目
将项目文件按照功能模块进行整理。
项目介绍
3.1 初始化数据库
在项目启动时,使用 sql.Open() 函数连接到 MySQL 数据库,并检查连接是否成功。
处理 HTTP 请求
使用 http.HandleFunc() 函数设置路由和处理函数,处理不同的 HTTP 请求。。
模板渲染
使用 template.ParseFiles() 函数加载 HTML 模板文件,并使用 template.Execute() 函数渲染模板。
注册
提供一个注册页面,用户可以输入用户名和密码进行注册。将注册信息插入到 “users” 数据表中。
登录
提供一个登录页面,用户可以输入用户名和密码进行登录。验证用户名和密码是否正确,如果正确则跳转到搜索页面。
搜索
提供一个搜索页面,用户可以输入查询条件进行搜索。根据查询条件从 “stud” 数据表中检索数据,并显示搜索结果。
tests——测试
使用 Go 语言的调试工具进行调试,例如使用 “fmt.Println()” 函数输出调试信息。
main.go
项目运行
使用 “go run main.go” 命令运行项目。
全部代码
package main
import (
"database/sql"
"html/template"
"log"
"net/http"
_ "github.com/go-sql-driver/mysql"
)
var a1 *sql.DB
var a2 error
func init() {
a1, a2 = sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/books")
if a2 != nil {
log.Fatal(a2)
}
a2 = a1.Ping()
if a2 != nil {
log.Fatal(a2)
}
}
func main() {
http.HandleFunc("/results", a3)
http.HandleFunc("/register", a4)
http.HandleFunc("/registerSubmit", a5)
http.HandleFunc("/login", a6)
http.HandleFunc("/searchSubmit", a7)
http.HandleFunc("/", a8)
http.HandleFunc("/loginSubmit", a9)
http.HandleFunc("/search", a10)
log.Fatal(http.ListenAndServe(":8080", nil))
}
func a8(w http.ResponseWriter, r *http.Request) {
t := template.Must(template.ParseFiles("index.html"))
t.Execute(w, nil)
}
func a4(w http.ResponseWriter, r *http.Request) {
t := template.Must(template.ParseFiles("register.html"))
t.Execute(w, nil)
}
func a5(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
name := r.FormValue("name")
pass := r.FormValue("pass")
_, a2 := a1.Exec("INSERT INTO users (name, pass) VALUES (?, ?)", name, pass)
if a2 != nil {
http.Error(w, a2.Error(), http.StatusInternalServerError)
return
}
http.Redirect(w, r, "/login", http.StatusSeeOther)
}
}
func a6(w http.ResponseWriter, r *http.Request) {
t := template.Must(template.ParseFiles("login.html"))
t.Execute(w, nil)
}
func a9(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
name := r.FormValue("name")
pass := r.FormValue("pass")
var a3 string
a2 := a1.QueryRow("SELECT name FROM users WHERE name = ? AND pass = ?", name, pass).Scan(&a3)
if a2 != nil {
http.Error(w, "用户名或密码错误", http.StatusUnauthorized)
return
}
http.Redirect(w, r, "/search", http.StatusSeeOther)
}
}
func a10(w http.ResponseWriter, r *http.Request) {
t := template.Must(template.ParseFiles("search.html"))
t.Execute(w, nil)
}
func a7(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
query := r.FormValue("query")
http.Redirect(w, r, "/results?q="+query, http.StatusSeeOther)
}
}
func a3(w http.ResponseWriter, r *http.Request) {
query := r.URL.Query().Get("q")
rows, a2 := a1.Query("SELECT * FROM stud WHERE xuehao LIKE ? OR xingming LIKE ? OR ban LIKE ? OR banma LIKE ? OR kecheng LIKE ? OR zy LIKE ?", "%"+query+"%", "%"+query+"%", "%"+query+"%", "%"+query+"%", "%"+query+"%", "%"+query+"%")
if a2 != nil {
http.Error(w, a2.Error(), http.StatusInternalServerError)
return
}
defer rows.Close()
var results []map[string]interface{}
for rows.Next() {
var id int
var xuehao, xingming, ban, banma, kecheng, zy string
a2 := rows.Scan(&id, &xuehao, &xingming, &ban, &banma, &kecheng, &zy)
if a2 != nil {
http.Error(w, a2.Error(), http.StatusInternalServerError)
return
}
result := map[string]interface{}{
"id": id,
"xuehao": xuehao,
"xingming": xingming,
"ban": ban,
"banma": banma,
"kecheng": kecheng,
"zy": zy,
}
results = append(results, result)
}
t := template.Must(template.ParseFiles("results.html"))
t.Execute(w, results)
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。