Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos Vinícius

Gravar no BD mais de um registro vindo de Multiple Select

Recommended Posts

Pessoal,

 

Mais uma dúvida... acho que com essa resolvo meus problemas...por enquanto...rs..

 

 

Tenho um form com dois campos tipo "input" simples e um select que é um multiple select

 

<tr><td>Responsável</td>
<td><input type="text" name="distrib"></td> 
<tr><td>Tipo de Parcelamento</td>
<td><input type="text" name="tipo_parc"></td>  
<td>Contribuinte</td>
<select multiple name="contrib[]"> 
<?php 
include 'conecta.php';
$sql = mysql_query("SELECT * FROM contrib");
while($monta = mysql_fetch_assoc($sql)){
echo '<option value="'.$monta['cnpj'].'">'.$monta['nome'].'</option>';
}
?>
   </select>

Esse campo multiple select vai passar mais de um dado pra ser inserido no BD, mas com apenas um dos outros campos... mais ou menos assim:

 

Responsável: José

Tipo: Parc 1

Contribuinte: Empresa1, Empresa 2, Empresa 3

 

ou seja, vou ter que inserir três linhas no BD... assim:

José, Parc 1, Empresa1

José, Parc 1, Empresa2

José, Parc 1, Empresa3

 

Alguém sabe como fazer?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dessa forma você monta o sql para inserção de múltiplos registros:

<?php
$data = $_POST;

$distribuidor      = $data['distrib'];
$tipo_parcelamento = $data['tipo_parc'];
$contribuintes     = array();

foreach ($data['contrib'] as $values) {
	$contribuintes[] = "('$distribuidor', '$tipo_parcelamento', '$values')";
}

$insert = "INSERT INTO example (responsavel, tipo, contribuinte) values " . implode(',', $contribuintes);

Output:

INSERT INTO example (responsavel, tipo, contribuinte) values ('jose', 'parc 1', 'Empresa1'), ('jose', 'parc 1', 'Empresa2'), ('jose', 'parc 1', 'Empresa3')

Porém, se existe a possibilidade de 1 responsável possuir diversos contribuintes, essa não é a maneira mais correta de fazer isso. O ideal seria criar uma tabela apenas para os contribuintes e relacionar com os resposáveis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

Puxa... tô impressionado... boa solução!!!!!!!

 

 

EDITADO...

 

JÁ VI QUAL ERA O ERRO ANTERIOR e consegui consertar.. agora só preciso saber se dá pra passar dois valores pelo select

 

 

 

 

 

Outra dúvida... o select a seguir tá passando o CNPJ

 

 

'<option value="'.$monta['cnpj'].'">'.$monta['nome'].'</option>';

 

 

Eu consigo passar o CNPJ e o NOME? Eu preciso dos dois...Obrigado!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode passar os 2 valores utilizando algum caractere para separá-los

<form action="">
	<select name="select">
		<?php
			foreach ($result as $monta) {
				echo '<option value="'.$monta['nome'].'|'.$monta['cnpj'].'">'.$monta['nome'].'</option>';
			}
		?>
	</select>
</form>

E separar no arquivo submetido

<?php
$data = $_POST;

$extract = explode('|', $data['select']);

$nome = $extract[0];
$cnpj = $extract[1];

var_dump($nome, $cnpj);

Ou se preferir, você pode enviar apenas o cnpj e no arquivo submetido realizar uma consulta no banco para retornar o nome daquele cnpj.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que a opção de enviar é mais fácil pq evita nova pesquisa...

 

Mas alguma coisa fiz errada pq tá retornando só números e letras... assim:

 

A

0

8

A

<select style="width:600px;eight:2000px" 
multiple name="contrib[]"> 

<?php 

include 'conecta.php';
$sql = mysql_query(
"SELECT * FROM contrib");

while($result = 
mysql_fetch_assoc($sql)){

foreach ($result as 
$monta) {

echo '<option value="'.$monta['nome'].'|'.$monta['cnpj'].'">'.$monta['nome'].'</option>';
}

}

?>

</select>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código que te passei era apenas para você pegar como exemplo, se você prestar atenção, você inserir um loop dentro de outro sem necessidade.

 

Tente dessa forma

<select style="width: 600px; height: 2000px" multiple name="contrib[]">
	<?php
	include 'conecta.php';
	$query = mysql_query("SELECT * FROM contrib");

	while($result = mysql_fetch_assoc($query)){
		echo '<option value="'.$result['nome'].'|'.$result['cnpj'].'">'.$result['nome'].'</option>';
	}
	?>
</select>
<?php
$data = $_POST;

// Esqueci que seu select era multiple :/
foreach ($data['contrib'] as $value) {
	$contribuinte = explode('|', $value);

	$nome = $contribuinte[0];
	$cnpj = $contribuinte[1];

	var_dump($nome, $cnpj);
}

Seu trabalho agora é juntar esse código com o que eu coloquei lá em cima(post #2) e pronto :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem que eu tava achando estranho mesmo...rs...

 

essa linha... var_dump($nome, $CNPJ);

 

Tá juntando o nome e o CNPJ né... mas como eu uso ela se ela não é uma variável (pelo menos acho que não)?

se fosse, seria com o implode não? como você fez....

 

values " . implode(', ', $contribuintes);

 

Eu dei uma lida sobre essa função no manual php mas não consegui entender como usar....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, a função var_dump apenas imprime o valor e seu tipo. É muito utilizada para fazer depuração. Por exemplo:

<?php
$var = true;
var_dump($var); // bool(true)

Para você pegar os valores nome e cnpj, basta utilizar as variáveis criadas($nome e $cnpj) após a separação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.