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 Luiz Henrique
      Olá pessoas,
       
      Como posso converter um array associativo?
      Minha variável retorna isso em um print_r: 
      Array([titulo] => teste [descricao]=>teste)
       
      Porém preciso de uma identificação de um array básico onde o título e descricao seriam a identificação por chave única.
      Então ao invés disso:
      Array([titulo] => teste [descricao]=>teste)
      seria seria isso:
      Array([0] => teste [1]=>teste)
       
      Obrigado
    • By Rasp
      Fala galera! Estou com a seguinte situação e queria uma ajuda de pôr onde seguir o meu raciocínio para resolver:
       
      Possuo um array X com dados que vem do meu backend, exemplo:
       
      array = [ 0: [1, 'Banana', '3.00', '...'], 1: [2, 'Maça', '4.00', '...'], 2: [3, 'Abacaxi', '5.00', '...'] ];
      Monto para o usuário uma tela com a tabela desses dados, com informações resumidas e um botão "detalhar" para exibir o conteúdo em um modal:
       
      | ID | Fruta | Preço| Ação | | 1 | Banana | 3.00 | Detalhar | | 2 | Maça | 4.00 | Detalhar | | 3 | Abacaxi| 5.00 | Detalhar | Até aí tudo certo, funciona redondo. Mas preciso fazer com que ao abrir o modal, independente do registro que cliquei (ID 1, 2 ou 3), eu possa "navegar" entre os outros registros no modal (possuo botões para isso) sem precisar sair do modal, como se fosse uma paginação.
       
      Como poderia construir essa lógica?
    • By Sapinn
      NÃO SEI COMO RESOLVER ISSO PELO AMOR ... Eu tenho um método home que vai transferir os dados do banco para uma tabela 
       
      Aqui esta o método no controlador:
          public function home(){         $dados = [             'admins' => $this->adminModel->lerAdmin()         ];                $this->view('paginas/admins/home', $dados);     } E esse método no model:
         public function lerAdmin(){         $this->db->query("SELECT * FROM admins");         return $this->db->resultados();     } Ai eu chama os dados no home assim:
       
      <?=$dados['admins']?>  
      Só pra testar eu sei que precisa usar um foreach, mas ele me retorna o seguinte erro:
       
      Notice: Undefined index: admins inC:\xampp\htdocs\PROJETOS\sistema-de-gerenciamento\app\Views\paginas\admins\home.phpon line178
    • 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
       
       
       
       
       
×

Important Information

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