# Enviar dados do form para o db

**URL:** <https://tainacan.discourse.group/t/enviar-dados-do-form-para-o-db/2313>\
**Category:** Dúvidas\
**Created:** [Março 15, 2025, 4:24pm UTC](https://tainacan.discourse.group/t/enviar-dados-do-form-para-o-db/2313 "2025-03-15T16:24:22Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Nicolas](https://yyz2.discourse-cdn.com/free1/user_avatar/tainacan.discourse.group/nicolas/32/2856_2.png) [@Nicolas](https://tainacan.discourse.group/u/Nicolas)\
**Post date:** [Março 15, 2025, 4:24pm UTC](https://tainacan.discourse.group/t/enviar-dados-do-form-para-o-db/2313/1 "2025-03-15T16:24:22Z")

</div>

Fala, pessoal! Estou enfrentando uma dificuldade ao tentar enviar os campos de metadados do formulário para o meu banco de dados. Já explorei bastante o banco de dados do WordPress, mas não consegui encontrar a tabela onde esses campos e valores são armazenados. Pode ser que eu esteja deixando passar algo simples. Alguém consegue me ajudar?

---

<div class="post-metadata">

**Author:** ![mateus.m.luna](https://yyz2.discourse-cdn.com/free1/user_avatar/tainacan.discourse.group/mateus.m.luna/32/3_2.png) [@mateus.m.luna](https://tainacan.discourse.group/u/mateus.m.luna)\
**Post date:** [Março 16, 2025, 10:00pm UTC](https://tainacan.discourse.group/t/enviar-dados-do-form-para-o-db/2313/2 "2025-03-16T22:00:22Z")

</div>

Olá @Nicolas, tudo bem? Seja bem vindo ao nosso fórum!

O assunto é longo e talvez possa ficar mais claro se você explicar em mais detalhes o que está tentando fazer. O Tainacan tem uma API própria que por sua vez estende a API do WordPress. Se você quer construir alguma interface alternativa que alimente dados de metadados Tainacan, talvez valha dar uma explorada na nossa API REST, visto que a própria interface do painel administrativo e dos blocos foi construída consumindo e interagindo com ela:

> **[ReDoc Interactive Demo](https://redocly.github.io/redoc/?url=https:%2F%2Fgithub.com%2Ftainacan%2Ftainacan-wiki%2Fraw%2Fmaster%2Fdev%2Fopenapi.json)**
>
> ReDoc Interactive Demo. OpenAPI/Swagger-generated API Reference Documentation

Mas sim, em último caso ela é uma camada de abstração em cima do banco de dados do WordPress. Para compreender um pouco sobre essa abstração, talvez valha dar uma lida aqui:

> **[Tainacan Wiki](https://tainacan.github.io/tainacan-wiki/#/dev/internal-api)**
>
> Home for Tainacan's Documentation

O importante é saber que Coleções, Itens, Taxonomias, Metadados, todos são _post types_ do WordPress, o que significa que você vai encontrá-los na tabela `wp_posts`. Porém posts do WordPress só possuem título e descrição, não possuem os campos extras que nós chamamos de metadados. Estes em si ficam guardados na forma de _post meta_, portanto estarão na tabela `wp_postmeta` Para encontrar o valor de um metadado de um item você precisa de uma tupla: o id do item , que será o `post_id` e o id do metadado, que será o `meta_key`.

Porém, como eu disse, há várias camadas de abstração aí que a API te ajuda a “ingorar”. Por exemplo, metadados multivalorados, metadados compostos… e as taxonomias são particularmente complexas, visto que guardamos IDs de termos cujo rótulo você só vai encontrar em outra tabela, que guarda os relacionamentos com as Taxonomias. Não é bem tranquilo sair recriando um formulário por exemplo. Por isso queria ver mais detalhes do que precisa para entendermos qual melhor caminho ok?

---

<div class="post-metadata">

**Author:** ![Nicolas](https://yyz2.discourse-cdn.com/free1/user_avatar/tainacan.discourse.group/nicolas/32/2856_2.png) [@Nicolas](https://tainacan.discourse.group/u/Nicolas)\
**Post date:** [Março 17, 2025, 12:14am UTC](https://tainacan.discourse.group/t/enviar-dados-do-form-para-o-db/2313/3 "2025-03-17T00:14:15Z")

</div>

E aí, Mateus, tudo bem? E contigo?

Criei um repositório para armazenar e expor TCCs da faculdade onde trabalho. Como os dados serão públicos, decidimos registrar logs com nome do acadêmico, data, título e dois checkboxes de termos (outros metadados são gerados, mas só queremos esses). Não consegui enviar os dados do formulário de submissão para um banco de dados, então criei meu próprio formulário em HTML e estou tentando usar a API para criar itens no acervo. Testei no Postman, mas tenho problemas: ao usar “/collection/{collection\_id}/items/submission” com o body, recebo o id\_submission; ao publicar, o item é criado com campos em branco, exceto os padrões (title e description). Há outra forma de passar os metadados? Usei um item existente como referência, mas o campo value também fica em branco.

No Postman, envio assim:

```auto
"metadata": {
    "nome": {
        "name": "NOME",
        "id": {id do item},
        "value": {valor do item (que quando enviado fica em branco)},
        "value_as_html": {valor do item},
        "value_as_string": {valor do item},
        "semantic_uri": "",
        "multiple": "no",
        "mapping": []
    },
    // outros metadados
}

```

estou enviados as taxo deste modo: “terms”: [{id\_taxonomia}],

Se tiver dicas ou um norte, agradeço! Valeu, Mateusão! Se precisar de mais informações, estou disponível.

---

<div class="post-metadata">

**Author:** ![mateus.m.luna](https://yyz2.discourse-cdn.com/free1/user_avatar/tainacan.discourse.group/mateus.m.luna/32/3_2.png) [@mateus.m.luna](https://tainacan.discourse.group/u/mateus.m.luna)\
**Post date:** [Março 17, 2025, 1:35pm UTC](https://tainacan.discourse.group/t/enviar-dados-do-form-para-o-db/2313/4 "2025-03-17T13:35:27Z")

</div>

> [@Nicolas](#):
>
> Como os dados serão públicos, decidimos registrar logs com nome do acadêmico, data, título e dois checkboxes de termos (outros metadados são gerados, mas só queremos esses).

E por quê o próprio Formulário de Submissão não resolveu neste caso? Vocês podem usar o próprio Registro de Atividades se quiserem acompanhar isso, não?

> [@Nicolas](#):
>
> Não consegui enviar os dados do formulário de submissão para um banco de dados, então criei meu próprio formulário em HTML e estou tentando usar a API para criar itens no acervo.

Por quê não conseguiu? Os dados do formulário de submissão viram metadados nos itens, qual seria o impeditivo? Não consigo imaginar algo que seja mais complexo do que criar um formulário do zero hehehe

> [@Nicolas](#):
>
> Testei no Postman, mas tenho problemas: ao usar “/collection/{collection\_id}/items/submission” com o body, recebo o id\_submission; ao publicar, o item é criado com campos em branco, exceto os padrões (title e description). Há outra forma de passar os metadados? Usei um item existente como referência, mas o campo value também fica em branco.

Mas ok, supondo que você realmente precise ir por aí, minha dica é criar um Bloco de Submissão de Itens e usando o inspetor do navegador dar uma olhada nas requisições que são feitas no painel “network” pra entender como as coisas devem ser feitas. Por exemplo, você precisa tanto do endpoint `/submission` quanto do `/finish`. E no caso dos metadados, eles são enviados de uma forma bem diferente da que são retornados, porque o retorno envolve coisas processadas (como o `value_as_html`). Faça uns testes que você vai ver, é na forma de um array com `metadatum_id` e `value`. Os termos mesmo são um array de IDs apenas.

 ![image](https://global.discourse-cdn.com/free1/uploads/tainacan/original/2X/6/6b86a1a3e6b3a8f35ace09142a374650793dc902.png)

---

<div class="post-metadata">

**Author:** ![Nicolas](https://yyz2.discourse-cdn.com/free1/user_avatar/tainacan.discourse.group/nicolas/32/2856_2.png) [@Nicolas](https://tainacan.discourse.group/u/Nicolas)\
**Post date:** [Abril 8, 2025, 1:23pm UTC](https://tainacan.discourse.group/t/enviar-dados-do-form-para-o-db/2313/5 "2025-04-08T13:23:15Z")

</div>

Fala aí! Valeu mesmo pela explicação, deu super certo fazer o envio dos dados pelo formulário que criei.

A única coisa que ainda estou empacado é no envio de arquivos .pdf/imagens. Pelo que vi aqui no fórum, parece que não dá pra mandar o arquivo direto pelo formulário, né? Preciso subir primeiro na biblioteca de mídia do WP e depois anexar ao item?

Tu consegue me confirmar isso?  
Tem algum endpoint específico que preciso usar? Tentei com o `PATCH /items/{item_id}`, mas não saquei direito quais referências preciso passar.

Ah, e perdão pela demora em responder o post.

---

<div class="post-metadata">

**Author:** ![mateus.m.luna](https://yyz2.discourse-cdn.com/free1/user_avatar/tainacan.discourse.group/mateus.m.luna/32/3_2.png) [@mateus.m.luna](https://tainacan.discourse.group/u/mateus.m.luna)\
**Post date:** [Abril 8, 2025, 3:00pm UTC](https://tainacan.discourse.group/t/enviar-dados-do-form-para-o-db/2313/6 "2025-04-08T15:00:47Z")

</div>

Salve @Nicolas!

> [@Nicolas](#):
>
> Valeu mesmo pela explicação, deu super certo fazer o envio dos dados pelo formulário que criei.

Que bom que está dando certo!

> [@mateus.m.luna](#):
>
> Por quê não conseguiu? Os dados do formulário de submissão viram metadados nos itens, qual seria o impeditivo? Não consigo imaginar algo que seja mais complexo do que criar um formulário do zero hehehe

Mas continuo curioso com isso aqui!

De qualquer forma,

> [@Nicolas](#):
>
> Pelo que vi aqui no fórum, parece que não dá pra mandar o arquivo direto pelo formulário, né?

Dá sim. Neste caso, novamente usando o inspecionador de requisições network, dê uma olhada no fluxo de “Adição em massa”. Vá na página de itens de uma coleção, no dropdown de Adicionar e clique em “Adicionar itens em massa”:

 ![image](https://global.discourse-cdn.com/free1/uploads/tainacan/original/2X/a/aaefde987c38fcb4572e1475890d45792590a0cc.png)

A tela a seguir terá um input de arquivos. Veja o que acontece quando você enviar arquivos para este input:

 ![image](https://global.discourse-cdn.com/free1/uploads/tainacan/original/2X/3/3aead384d690eeb3e5e0b910ec9e29418fc73ef7.png)

Temos:

1. Um POST para `/wp-json/tainacan/v2/collection/<id-colecao>/items`, que cria o item para termos o ID dele;
2. Um POST para `/wp-json/wp/v2/media` passando o ID do item como `post` para anexar ao item a mídia criada. Dê uma olhada na documentação da API REST do WordPress porque este endpoint é o que substitui a galeria de mídias neste caso e você vai precisar passar o arquivo por ela;
3. Um PUT `/wp-json/tainacan/v2/collection/<id-colecao>/items/<id-do-item>` para atualizar o documento ou anexo do item com o ID da mídia retornada pelo último post.

É este fluxo que você vai precisar implementar no seu formulário.

---

<div class="post-metadata">

**Author:** ![Nicolas](https://yyz2.discourse-cdn.com/free1/user_avatar/tainacan.discourse.group/nicolas/32/2856_2.png) [@Nicolas](https://tainacan.discourse.group/u/Nicolas)\
**Post date:** [Abril 10, 2025, 6:09pm UTC](https://tainacan.discourse.group/t/enviar-dados-do-form-para-o-db/2313/7 "2025-04-10T18:09:43Z")

</div>

Mas se eu uso esse endpoint _/wp-json/tainacan/v2/collection//items/_ e utilizar o parâmetro document {passando o id da midia do wordpress}, ele altera apenas o documento. Eu não consegui encontrar onde ele altera os anexos dos itens. Eu vi algo referente ao Ajax, mas eu não encontrei o endpoint do anexo, apenas do documento. Li na documentação que existe apenas um o endpoint do GET attachment (pq não existe um de post também?).  
Mas referente ao documento e a thumbnail(miniatura) ta tudo 100%, é só essa questão do anexo 😃

---

<div class="post-metadata">

**Author:** ![mateus.m.luna](https://yyz2.discourse-cdn.com/free1/user_avatar/tainacan.discourse.group/mateus.m.luna/32/3_2.png) [@mateus.m.luna](https://tainacan.discourse.group/u/mateus.m.luna)\
**Post date:** [Abril 11, 2025, 11:28am UTC](https://tainacan.discourse.group/t/enviar-dados-do-form-para-o-db/2313/8 "2025-04-11T11:28:50Z")

</div>

Boa pergunta. Se não estou enganado, para que o arquivo seja um “anexo” do item, basta o POST descrito no passo 2. Quando você passa o ID do seu item no atributo `post`, você está dizendo que aquela mídia que vai ser gerada está anexada à ele. O último passo é preciso apenas para o documento, onde você diz qual dos anexos é o documento principal. Vale dar uma lida aqui:

> **[Media – REST API Handbook | Developer.WordPress.org](https://developer.wordpress.org/rest-api/reference/media/#create-a-media-item)**
>
> Schema

Já o GET do /attachment do Tainacan é apenas uma maneira mais direta de se acessar os anexos. Eles também poderiam ser obtidos por um GET para o /media do WordPress, filtrando pelo post associado com o ID do item.

---

<div class="post-metadata">

**Author:** ![Nicolas](https://yyz2.discourse-cdn.com/free1/user_avatar/tainacan.discourse.group/nicolas/32/2856_2.png) [@Nicolas](https://tainacan.discourse.group/u/Nicolas)\
**Post date:** [Abril 11, 2025, 2:30pm UTC](https://tainacan.discourse.group/t/enviar-dados-do-form-para-o-db/2313/9 "2025-04-11T14:30:48Z")

</div>

Cara deu boa, agradeço todo o suporte. Tmj sucesso, nois que voa kkk
