我正在努力将mysql的ID附加到URL

时间:2019-04-22 22:26:48

标签: http go redirect

我正在尝试将一个id(和其他信息)附加到url,以便以后可以访问它,但是经过一些研究,我找不到正确的方法。

我尝试使用Get()方法,query(),Add(),但无法重定向URL。

var email_ployer string

func RegisterNewPloyer(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path != "/ployer/register" {
        http.Error(w, "404 not found.", http.StatusNotFound)
        return
    }
    db := connect.ConnectDB()
    defer db.Close()
    switch r.Method {
    case "POST":
        email_ployer = r.FormValue("email")
        senha := r.FormValue("senha")
        senha, _ = HashPassword(senha)
        tx, _ := db.Begin()
        stmt, _ := tx.Prepare("INSERT INTO ployers(email_ployer, senha_ployer) VALUES(?,?)")
        _, erro := stmt.Exec(email_ployer, senha)
        if erro != nil {
            tx.Rollback()
            log.Fatal(erro)
        }
        tx.Commit()
    }
    Redirect(w, r)
}

func Redirect(w http.ResponseWriter, r *http.Request) {
    db2 := connect.ConnectDB()
    defer db2.Close()
    var id string
    tx, _ := db2.Begin()
    rows, _ := tx.Query("SELECT id FROM ployers WHERE email_ployer = '?'", email_ployer)
    for rows.Next() {
        if err := rows.Scan(&id); err != nil {
            log.Fatal(err)
        }
        if err := rows.Err(); err != nil {
            log.Fatal(err)
        }
    }
    http.Redirect(w, r, x, http.StatusSeeOther)
}




func main() {
    http.HandleFunc("/ployer/seja-um-de-nos", LoadPloyerContent)
    http.HandleFunc("/ployer/register", register.RegisterNewPloyer)
    http.HandleFunc("/ployer/complete/", LoadPloyerContent)
    http.HandleFunc("/ployer/register-received", LoadPloyerContent)
    log.Fatal(http.ListenAndServe(":3306", nil))
}

在我的系统中,我希望用户注册他的电子邮件和密码,在数据库中创建一个新用户,并将URL重定向到类似localhost:3306 / ployer / complete / id

2 个答案:

答案 0 :(得分:1)

只需使用res.LastInsertId()来获取ID,并将其传递给您的重定向函数,然后构建网址:

func RegisterNewPloyer(w http.ResponseWriter, r *http.Request) {
  //...
  //...
  res, erro := stmt.Exec(email_ployer, senha)
  if erro != nil {
    tx.Rollback()
    log.Fatal(erro)
  }
  tx.Commit()
  id, erro := res.LastInsertId()
  if erro != nil {
    log.Fatal(erro)
  }
  Redirect(w, r, id)
}

func Redirect(w http.ResponseWriter, r *http.Request, id int64) {
    uri := fmt.Sprintf("http://localhost:3306/ployer/complete/%d", id)
    http.Redirect(w, r, uri, http.StatusSeeOther)
}

答案 1 :(得分:0)

您应该使用url.Values来构建查询字符串值的映射。稍后,您可以使用Encode方法来生成编码的查询字符串。将此值分配给Url.RawQuery以获得最终输出。

例如:

base, _ := url.Parse("https://www.foo.com/")

// Create an instance of Values to hold your query string parameters
values := url.Values{}
values.Add("abc", "def")

// Set the encoded output to RawQuery attribute of Url
base.RawQuery = values.Encode()

println(base.String())

如果您从一个已经具有查询字符串参数的URL开始,并且想要在其中添加/修改项目,请使用Query()方法来获取对已解析映射的引用。

例如:

base, _ := url.Parse("https://www.foo.com/?a=b")

values := base.Query()
values.Set("a", "c")
values.Set("x", "y")

// Set the encoded output to RawQuery attribute of Url
base.RawQuery = values.Encode()

println(base.String())