Я изо всех сил пытаюсь добавить идентификатор из MySQL к URL - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь добавить идентификатор (и другую информацию) в 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))
}

В моей системе я хочу, чтобы пользователь зарегистрировал свой E-mail и пароль, создал нового пользователя в БД и перенаправил URL-адрес на что-то вроде localhost: 3306 / ployer / complete / id

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Просто используйте res.LastInsertId(), чтобы получить идентификатор и передать его функции перенаправления, и создать URL:

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)
}
0 голосов
/ 23 апреля 2019

Вы должны использовать 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...