Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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>
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](https://www.php.net/manual/pt_BR/filter.constants.php)>
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 selectOlá 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:
/applications/core/interface/imageproxy/imageproxy.php?img=https://i.imgur.com/O2oO9D1.png&key=3f0b1c6e89a6f5ba4567ad3d53dc423812ae7d2a1daed428a8efb40a63223fda" width="1000" />
Consulta (inserção múltipla):
/applications/core/interface/imageproxy/imageproxy.php?img=https://i.imgur.com/RHrpb1W.png&key=2645cfcec07dcc92cf0745b8726733c0d28102ef13e5c7eab8c196aa81ae597f" width="1000" />
Como a tabela ficou após a consulta:
/applications/core/interface/imageproxy/imageproxy.php?img=https://i.imgur.com/o2lsbr2.png&key=d4cca1e9600263699944617b483c80dbec6c35b732e67112ff065b213abd2cc3" width="349" />
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 :)
>
14 horas atrás, Matheus Tavares disse:
Olá amigo, tudo bem?
Minha resposta faz exatamente isso.
Veja:
Estrutura do banco:
Consulta (inserção múltipla):
Como a tabela ficou após a consulta:
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
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:
if ( sizeof( $ids ) > 0 ) {