Jump to content
unset

Help - Como pegar array de um formulário e inserir no banco

Recommended Posts

Olá, estou com uma falha de lógica pegando aqui se alguém puder ajudar

 

Eu tenho um formulário tranquilo, como abaixo

<label for="cidades" class="form-label">Cidades</label>
<select class="form-select mb-3" name="cidades[]" id="cidades" multiple="multiple">
    <option value="1">Cidade 1</option>
    <option value="2">Cidade 2</option>
    <option value="3">Cidade 3</option>
    <option value="4">Cidade 4</option>
    <option value="5">Cidade 5</option>
</select>

 

Blz eu recebe os dados do formulário ou seja os ids da cidade certinho em um array 

 

array(3) { [0]=> string(1) "2" [1]=> string(2) "3" [1]=> string(1) "5" }

<?php
$dados = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRIPPED);
var_dump($dados);
?>

Agora como inserir todos os ids no banco? utilizando um for? um while? algum exemplo?

 

Pergunto pq ao tentar inserir no banco somente um registro é inserido e não todos do select

 

Share this post


Link to post
Share on other sites

Olá amigo.

 

Você precisa apenas ter uma tabela que armazena as cidades selecionadas.

 

Vamos chamar de cidades_selecionadas, que possui um #id auto_increment e o id (provavelmente chave estrangeira) representando a &cidade.

 

Bom, agora você prepara a consulta, de acordo com os dados que você já possui:

20 minutos atrás, unset disse:

array(3) { [0]=> string(1) "2" [1]=> string(2) "3" [1]=> string(1) "5" } 

 

Sintaxe da inserção múltipla no Mysql:

INSERT INTO `table` ( `col1`, `col2` ) VALUES ( 1, 'teste' ), ( 2, 'foo' ), ( 3, 'bar' );

 

Sua inserção portanto seria algo assim:

<?php
$ids = [ 2, 4, 10, 130 ];

if ( sizeof( $ids ) > 0 ) {
    $sql = 'INSERT INTO `cidades_selecionadas` (`cidade`) VALUES (';
    $sql .= implode( '), (', $ids );
    $sql .= ')';
  
    echo $sql;
}

Saída (sua consulta):

INSERT INTO `cidades_selecionadas` (`cidade`) VALUES (2), (4), (10), (130)

Share this post


Link to post
Share on other sites
36 minutos atrás, unset disse:

$dados = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRIPPED);

E um adendo... se você está trabalhando com inteiros / ids, essa sanitização está insegura.

 

Utilize FILTER_SANITIZE_NUMBER_INT, assim removendo caracteres que não sejam inteiros para você.

Veja: https://www.php.net/manual/pt_BR/filter.constants.php

Share this post


Link to post
Share on other sites
Em 11/06/2021 at 12:32, Matheus Tavares disse:

Olá amigo.

 

Você precisa apenas ter uma tabela que armazena as cidades selecionadas.

 

Vamos chamar de cidades_selecionadas, que possui um #id auto_increment e o id (provavelmente chave estrangeira) representando a &cidade.

 

Bom, agora você prepara a consulta, de acordo com os dados que você já possui:

 

Sintaxe da inserção múltipla no Mysql:


INSERT INTO `table` ( `col1`, `col2` ) VALUES ( 1, 'teste' ), ( 2, 'foo' ), ( 3, 'bar' );

 

Sua inserção portanto seria algo assim:


<?php
$ids = [ 2, 4, 10, 130 ];

if ( sizeof( $ids ) > 0 ) {
    $sql = 'INSERT INTO `cidades_selecionadas` (`cidade`) VALUES (';
    $sql .= implode( '), (', $ids );
    $sql .= ')';
  
    echo $sql;
}

Saída (sua consulta):


INSERT INTO `cidades_selecionadas` (`cidade`) VALUES (2), (4), (10), (130)

 

Obg por responder...

 

Dessa forma que falou só vai inserir uma linha, já estou fazendo isso, o que eu gostaria de saber é como inserir todos os registros de acordo com os ids selecionados no select por exemplo

 

Se seleciono apenas uma cidade então vai inserir um registro com o id selecionado

Se seleciono 3 cidades então vou ter 3 ids e cada um deve ser inserido na tabela em uma nova linha

Se seleciono 10 cidades então vai ter 10 ids inseridos um em cada nova linha 

 

tipo ta faltando pouco só não ta fluindo a ideia de como fazer

 

<?php
$ids = $dados['ofertaCidades'];
            foreach ($ids as $id) {
                $ofertaCidades->oferta_id = 666;
                $ofertaCidades->cidade_id = $id;
                $ofertaCidades->principal = 1;
                $ofertaCidades->salvar();
            }

?>

tentei usar foreach também com ele tudo bem eu pego todos os ids do select, mais na hora de salvar só salva uma linha, ou seja só o ultimo id,  realmente ta faltando so a logica pra salvar linha por linha de acordo com a quantidade de ids do select

 

 

Share this post


Link to post
Share on other sites

Olá amigo, tudo bem?

 

2 horas atrás, unset disse:

Se seleciono apenas uma cidade então vai inserir um registro com o id selecionado

Se seleciono 3 cidades então vou ter 3 ids e cada um deve ser inserido na tabela em uma nova linha

Se seleciono 10 cidades então vai ter 10 ids inseridos um em cada nova linha 

Minha resposta faz exatamente isso.

Veja:

 

Estrutura do banco:

O2oO9D1.png

 

 

Consulta (inserção múltipla):

RHrpb1W.png

 

 

Como a tabela ficou após a consulta:

o2lsbr2.png

 

 

Você precisa apenas adicionar as outras colunas na string da query. No meu exemplo inicial eu não sabia a estrutura das suas colunas, então fiz utilizando apenas a cidade_id, já nas fotos utilizei mais colunas, conforme seu código. Basta adaptar a primeira linha com $sql :)

Share this post


Link to post
Share on other sites
14 horas atrás, Matheus Tavares disse:

Olá amigo, tudo bem?

 

Minha resposta faz exatamente isso.

Veja:

 

Estrutura do banco:

O2oO9D1.png

 

 

Consulta (inserção múltipla):

RHrpb1W.png

 

 

Como a tabela ficou após a consulta:

o2lsbr2.png

 

 

Você precisa apenas adicionar as outras colunas na string da query. No meu exemplo inicial eu não sabia a estrutura das suas colunas, então fiz utilizando apenas a cidade_id, já nas fotos utilizei mais colunas, conforme seu código. Basta adaptar a primeira linha com $sql :)

 

Obg por responder, se puder poderia disponibilizar o código PHP utilizado

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By thiagocarelli
      Bom dia pessoal, Estou travado em um array (imagem), a questão é que preciso criar uma tabela por empresa ( Organization Name )  onde contabilize empresa ++ sempre que o mesmo nome for citado em ( Organization Name ) porem ao mesmo tempo preciso contabilizar separado quando o atendente ( User Name ) seja diferente de outro atendente.. Exemplo..
       
      3 Interações       -       Google      -      João 
      1 Interações       -       Google      -      Joaquim 
      2 Interações       -       Ti Soft       -      Pedro
      7 Interações       -       Exchange  -      João 
       
      Consegui fazer o código que separava por organização mas ele perde o controle das interações por funcionários..
       
      Array ( [success] => 1 [data] => Array ( [0] => Array ( [organization] => Array ( [name] => JOSDF ) [user] => Array ( [name] => Misael Joana ) ) [1] => Array ( [organization] => Array ( [name] => DKGFS ) [user] => Array ( [name] => Misael Joana ) ) ) )  
    • By mateus.andriollo
      Qual seria a forma correta de projetar uma aplicação multi formulários. Estou fazendo ela em Jquery com Load() mas algumas ações não são executadas em script.
      Me pergunto seria o correto?
       
      Exemplo: pensando um cadastro de clientes/empresas
      - clientes.php (formulário de cadastro/edição/anexos)
      - empresas.php (formulários de cadastro de empresa/ funcionários/ setores)
      - relatorios.php (clientes e empresas)
       
      Cada página dessa eu chamo, ela vem sempre com o seu conteúdo...
      Pensei no seguinte, todos estea formulários carregados e eu apenas usar função Get() para preencher campos e gerar os relatórios.
       
      Fica a dúvida, pois hj essas páginas extras são HTML com form e ações PHP
       
       
       
       
       
    • By luigiferrari
      Gostaria de fazer um programa onde o usuário digitaria o tamanho de conjuntos e quantas linhas possui os conjuntos, exemplo:

      Seguindo, o programa perguntaria qual conjunto o usuário quer adicionar o valor, e então o valor seria adicionado nas linhas, e qnd cheio, seria o FIFO.
      Mas minhas principais duvidas seriam:
      1- Como eu crio um vetor dentro de outro (não necessariamente precisa ser um vetor, aceito sugestões de como fazer isso)
      2- Caso eu faça com o vetor, teria que gerar x vetores, por exemplo, caso o usuário colocasse em "qts conjuntos: 5" teria que criar 5 conjuntos(vetores) diferentes. Como faço isso?!
      Lembrando aceito qualquer sugestão, estou fazendo em C# mas tbm entendo de Python e PHP caso tenha alguma ideia.
    • By marcossantana10
      Faço uma consulta no banco para buscar uma lista de horários, depois preciso comparar esse resultado com um array só de horários que eu possuo. Utilizei o código abaixo pra isso:
       
      //dados do array $h_indisponiveis separados por _ (ilustrativo) 13:20:00_13:40:00_14:00:00_14:20:00_18:40:00_19:00:00_21:20:00 $sql = "MINHA CONSULTA"; $sql=$pdo->query($sql); if ($sql->rowCount() > 0) { $result = array('error'=>false, 'data' => array()); foreach ($sql as $row) { $horario['id'] = $row['id']; $horario['hora'] = $row['hora']; $horario['tempo'] = $row['tempo']; for($i=0; $i<$sizeArray; $i++){ if ($h_indisponiveis[$i] == $row['hora']){ $horario['disponivel'] = 'n'; } else { $horario['disponivel'] = 's'; } } array_push($result['data'], $horario); } echo json_encode($result); }  
      O problema é que ele não está retornando todas as correspondências entre o objeto da consulta e o array, apenas a última. Ao invés de marcar 6 resultados como "disponivel = n", ele só marca um. Como posso corrigir
       

    • By dearclexa
      Estou tentando manipular um array e agrupar os dados de produtos por nome de fornecedor igual.   A minha array retorna os produtos que eu tenho por fornecedor, quando o mesmo fornecedor tem mais de um produto ele me retorna em arrays separadas, e gostaria de agrupar esses dados. Tentei de algumas formas, porém sem sucesso.
       
      Retorno do meu array:
      Array ( [nrochamado] => 10780 [cnpjFornecedor] => 111111111000111 [nmFornecedor] => FORNECEDOR TESTE 01 [cdproduto] => ML2 [nmproduto] => ESCOVA [quantidade] => 10 [unidade] => UN [vlfornecedor] => .00000 [dtnecessidade] => 30/04/2021 [dtentrega] => ) Array ( [nrochamado] => 10780 [cnpjFornecedor] => 111111111000111 [nmFornecedor] => FORNECEDOR TESTE 01 [cdproduto] => EV1 [nmproduto] => PANO DE LIMPEZA [quantidade] => 5 [unidade] => UN [vlfornecedor] => .00000 [dtnecessidade] => 30/04/2021 [dtentrega] => ) Como espero que retorne:
      Array ( [nrochamado] => 10780 [cnpjFornecedor] => 111111111000111 [nmFornecedor] => FORNECEDOR TESTE 01 [produtosItens] => Array( [cdproduto] => ML2 [nmproduto] => ESCOVA [quantidade] => 10 [unidade] => UN [vlfornecedor] => .00000 [dtnecessidade] => 30/04/2021 [dtentrega] => ) ( [cdproduto] => EV1 [nmproduto] => PANO DE LIMPEZA [quantidade] => 5 [unidade] => UN [vlfornecedor] => .00000 [dtnecessidade] => 30/04/2021 [dtentrega] => ) ) É possível ?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.