2016-10-11 9 views
2

Я пытаюсь захватить массив Поста значений из HTML формы с помощью Go/Gin Gonic - в PHP Я хотел бы использовать что-то вроде:Gin Gonic массив значений из PostForm

<form method="POST" enctype="multipart/form-data" action="mygo"> 
<input type=hidden name="emails[]" value="[email protected]"> 
<input type=hidden name="emails[]" value="[email protected]"> 
<input type=hidden name="emails[]" value="[email protected]"> 
</form> 

Однако это Безразлично» t, похоже, работает с Gin Gonic (или Go, если на то пошло).

Я также попытался:

<form method="POST" enctype="multipart/form-data" action="mygo"> 
<input type=hidden name="emails" value="[email protected]"> 
<input type=hidden name="emails" value="[email protected]"> 
<input type=hidden name="emails" value="[email protected]"> 
</form> 

Как и в других предполагается, что делать это может вызвать c.PostForm("emails") вернуть кусочек. . Однако на практике это, кажется, что это вместо того, возвращает последнее значение в виде строки вместо :(

Интересно, что c.Request.PostForm возвращает пустую карту, даже если c.Request.ParseForm() называется первым, что я делаю неправильно

Перейти Форма:

func main() { 
// ... 
    router.POST("mygo",parseFunc) 
} 

func mygo(c *gin.Context) { 
    c.Request.ParseForm() 
    log.Printf("%v",c.Request.PostForm["emails"]) // "" 
    log.Printf("%v",c.PostForm("emails") // "[email protected]" 
} 
+1

Чтобы получить несколько значений, необходимо использовать непосредственно запрашиваются «Request.Form» или «Request.PostForm». Если этого нет, пожалуйста, покажите [mcve]. Например, форма, которую вы показываете, будет отправляться через _GET_ на тот же URL-адрес, который сгенерировал форму. – JimB

+0

@JimB - Отредактировано, чтобы показать пример MCV :) – BadPirate

+0

Извините, вам нужно будет создать более полный пример, потому что то, что вы показали, должно по-прежнему работать. – JimB

ответ

0

Проблема с этим кодом в два раза. Проводка моего ответа в случае, если кто-то есть любой из этих проблем.

  1. c.Request.PostForm возвращает пустое в этом случае, потому что форма является многочастной, а ParseForm анализирует только не многочастные формы. Чтобы получить данные здесь, либо измените тип формы на не-multipart, либо вызовите ParseMultipartForm перед доступом к значениям post.
  2. c.PostForm() возвращает только первое значение, потому что это то, что делает обертка в Gin Gonic. Чтобы получить доступ ко всем значениям, необходимо получить доступ к исходным данным c.Request.PostForm, а затем ПОСЛЕ того, как вы проанализируете его правильно.

Спасибо @JimB за помощь.

3

Для того, чтобы сделать это работает у вас есть два пути здесь

<form method="POST" enctype="multipart/form-data" action="mygo"> 
<input type=hidden name="emails" value="[email protected]"> 
<input type=hidden name="emails" value="[email protected]"> 
<input type=hidden name="emails" value="[email protected]"> 
</form> 

r.POST("/", func(c *gin.Context) { 
     c.Request.ParseMultipartForm(1000) 
     for key, value := range c.Request.PostForm { 
      fmt.Println(key,value) 
     } 
    }) 

либо

<form method="POST" action="mygo"> 
    <input type=hidden name="emails" value="[email protected]"> 
    <input type=hidden name="emails" value="[email protected]"> 
    <input type=hidden name="emails" value="[email protected]"> 
    </form> 

r.POST("/", func(c *gin.Context) { 
      c.Request.ParseForm() 
      for key, value := range c.Request.PostForm { 
       fmt.Println(key,value) 
      } 
     }) 

И дает тот же результат

emails [[email protected] [email protected] [email protected]] 

 Смежные вопросы

  • Нет связанных вопросов^_^