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 ILR master
      Boa tarde, pessoal.
      Espero que todos estejam bem.
       
      Seguinte:
      Tenho a seguinte consulta:
       
      $usuarios= "SELECT * FROM usuarios";
      $query= mysqli_query($conexao, $usuarios) or die ("Usuário não encontrado");
      $usuario = mysqli_fetch_array($query);
       
      Quero pegar apenas o campo 'nome' da tabela 'usuarios' e colocar todos os resultados da seguinte forma:
       
      $nomes = array("Rafael", "João", "Maria", "Pedro", "Patricia", "Camila");
       
      Agradeço desde já.
      Abs
       
       
    • By mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
    • By mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse resultado do array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
    • By clovis.sardinha
      Bom dia.
      Meu problema é o seguinte:
      Estou fazendo uma tabela e preciso mostrar o usuário e várias cidades que pertencem a este usuário.
      O resultado do array é o seguinte:

      Quando passo para a tabela os valores de cidade se repetem para o mesmo usuário até o final e retorna fazendo o mesmo para o próximo usuário. 
      Veja abaixo

       
      Meu código para a tabela é a seguinte:
      <tr> <td align="left"><?php echo $usuario['nome'] ?></td> <td align="left"><?php echo $usuario['nome_orgao'] ?></td> <td align="left"><?php echo $usuario['nome_funcao'] ?></td> <?php foreach($destinos as $key=>$destino):?> <?php $key=0;?> <td align="left"> <?php foreach($destino as $chave=> &$cidade): ?> <?php echo $cidade['cid_nome']."-";?> <?php endforeach;?> </td> <?php $key+=$key; ?> <?php endforeach;?> <td><?php echo date('d/m/Y', strtotime( $usuario['created_at'])) ?></td> <td align="left"><a href="<?php echo base_url('UserAdmin/Usuario/getUsuarioById')."/".$usuario['id_user'] ?>">DETALHES</a></td> </tr> <?php endforeach ?> Onde estou errando? O que tenho de fazer para percorrer este array de modo a aparecer apenas as cidades pertencentes a cada usuário?

    • By Giovanird
      Listo um array pelo foreach e preciso pegar os valores fora do foreach.
      Abaixo tenho o exemplo do foreach com os valores
       
      <?php foreach($turma $rsturma): if(($rsturma['id'] == 1){ echo $rsturma['nome']."<br>"; echo $rsturma['idade']."<br><br>"; } endforeach; //Dentro do foreach me retorna: Luis 13 Maria 12 Carlos 12 Matheus 14 Andréa 12 //Preciso pegar a posição e o valor desta lista $posicao1 = 1; $nome1 = Luis; $posicao2 = 2; $nome2 = Maria; $posicao3 = 3; $nome3 = Carlos; $posicao4 = 4; $nome4 = Matheus; $posicao5 = 5; $nome5 = Andréa;  
×

Important Information

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