Ir para conteúdo

POWERED BY:

Arquivado

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

JonatasFn

Inserir vários registros de uma vez

Recommended Posts

Pessoal a minha dúvida pode parecer meio besta, mas eu realmente não sei o que fazer.

Tenho um cadastro de funcionários, onde eu posso cadastrar o nome dos filhos do mesmo.

 

Só q eu tenho 5 campos, como faço para inseri-los no BD?

Por exemplo, são 5 campos: txt_filho1, txt_filho2, txt_filho3 e ssim por diante. Mas eu vou inseri-los no mesmo campo do BD. Ou seja:

 

FUNC: José FILHO: Claudia

FUNC: José FILHO: Débora

FUNC: José FILHO: Anderson

 

Eu tenho q inserir vários registros de uma vez no mesmo campo. Eu imagino q devo usar um while, mas com q parametros?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal a minha dúvida pode parecer meio besta, mas eu realmente não sei o que fazer.

Tenho um cadastro de funcionários, onde eu posso cadastrar o nome dos filhos do mesmo.

 

Só q eu tenho 5 campos, como faço para inseri-los no BD?

Por exemplo, são 5 campos: txt_filho1, txt_filho2, txt_filho3 e ssim por diante. Mas eu vou inseri-los no mesmo campo do BD. Ou seja:

 

FUNC: José FILHO: Claudia

FUNC: José FILHO: Débora

FUNC: José FILHO: Anderson

 

Eu tenho q inserir vários registros de uma vez no mesmo campo. Eu imagino q devo usar um while, mas com q parametros?

insert into tabela(`FUNC`,`FILHO`) values("José" , "Claudia"),("José","Débora"),("José","Anderson" );

 

para fazer com o PHP, vamos usar a matriz abaixo para o exemplo:

 

$lista = array();
$lista[] = array( "José" , "Claudia" );
$lista[] = array( "José" , "Débora" );
$lista[] = array( "José" , "Anderson" );

Usando um loop for:

 

$values = array();

for ( $i = 0 , $t = count( $lista ); $i < $t; $i++ ){
	$values[] = vsprintf( "('%s','%s')" , $lista[ $i ] );
}

$sql = sprintf( "INSERT INTO tabela(`FUNC`,`FILHO`) VALUES%s" , implode( "," , $values ) );

echo $sql;

O código acima Irá produzir:

 

INSERT INTO tabela(`FUNC`,`FILHO`) VALUES('José','Claudia'),('José','Débora'),('José','Anderson');

 

A segunda forma é um pouco mais abstrata, porém o resultado é o mesmo:

 

1. Criamos uma classe que será utilizada como tipo para criação dos objetos Func:

 

class FuncType {
	/**
	 * Nome do funcionário
	 * @var string
	 */
	public $func;

	/**
	 * Nome do filho
	 * @var string
	 */
	public $filho;

	/**
	 * Constroi um objeto do tipo FuncType
	 * 
	 * @param string $func O nome do funcionário
	 * @param string $filho O nome do filho
	 */
	public function __construct( $func , $filho = null ){
		$this->func = $func;
		$this->filho = $filho;
	}

	/**
	 * Converte o objeto em uma string
	 * @return string
	 */
	private function __toString(){
		return( sprintf( "('%s','%s')" , $this->func , $this->filho ) );
	}
}

Pronto, agora criamos nossa lista de FuncTypes:

 

$lista = array();
$lista[] = new FuncType( "José" , "Claudia" );
$lista[] = new FuncType( "José" , "Débora" );
$lista[] = new FuncType( "José" , "Anderson" );

Para criar a instaução SQL basta:

 

$sql = sprintf( "INSERT INTO tabela(`FUNC`,`FILHO`) VALUES%s;" , implode( "," , $lista ) );

echo $sql;

O código acima Irá produzir:

 

INSERT INTO tabela(`FUNC`,`FILHO`) VALUES('José','Claudia'),('José','Débora'),('José','Anderson');

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem de tornar os campos como uma array

 

por exemplo colocar no name dos input name="nomes[]"

 

 

depois para aceder e adicionar na bd é assim

 

 

 

 

require_once("conn.php");


foreach($_POST["nomes"] as $valor)
{

sql=mysql_query("insert into tabela values(NULL,.....,$valor)") or die(mysql_error());

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

melhor estudar nomalização de DB

 

pelo pouco que li vi que sua estrutura está fora dos padroes

 

melhor ter a tabela Funcionario, a tabela Filho e uma tabela de relacionamentos entre essas duas

Compartilhar este post


Link para o post
Compartilhar em outros sites

melhor estudar nomalização de DB

 

pelo pouco que li vi que sua estrutura está fora dos padroes

 

melhor ter a tabela Funcionario, a tabela Filho e uma tabela de relacionamentos entre essas duas

São duas tabelas, funcionarios e filhos. Na tabela filhos estou inserindo o id_funcionario e o nome dos filhos. Tá errado?

 

 

Webmind, adaptei o seu código e funfou.

 

if ($_POST['filhos'] == "SIM"){

foreach($_POST['nomes'] as $nomes)
{
echo $nomes;
$sqlf = "INSERT INTO filhos (

nome_filho

) VALUES (

'".$nomes."'

)";

$sqlf = mysql_query($sqlf)

or die (mysql_error());

}

}

Só que eu tenho 5 campos nomes[], mas quando o usuario digita só 2 nomes, ele insere os outros campos vazios no bd.

 

Como posso corrigir isto ????

Compartilhar este post


Link para o post
Compartilhar em outros sites

E eu ainda tenho mais um problema. Eu tenho três campos assim para inserir.

O campo nomes[], o campo idades[] e o campo chk_creche[].

 

E o foreach só passa um valor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz isso:

 

foreach($nomes as $chave => $nome){
	$idade = $idades[$chave];
	$chk_creche = $chk_creches[$chave];
	echo "$nome - $idade ... ";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara não funcionou não. Fiz assim:

 

foreach($_POST['nomes'] as $chave => $nome)
{

$idade = $idadef[$chave];
$chk_creches = $chk_creche[$chave];
echo ($nome." - ".$idade." - ".$chk_creches);

Dá o seguinte erro:

Undefined Variable: idadef in c:\...

Undefined Variable: chk_creche in c:\...

 

Lembrando que meus campos são: nomes[], idadef[] e chk_creche[]

 

O que eu fiz de errado??? E esse código soluciona a minha outra dúvida, pois ele estava inserindo campos vazios no bd?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, ninguém pode me ajudar?

 

É um cadastro de funcionários com todos os dados do mesmo.

E logo abaixo tenho 5 campos text(todos com nome nomes[]), 5 campos text(todos com nome idadef[]) e 5 campos checkbox(todos com nome chk_creche[]).

 

O que eu preciso saber é:

1 - Como faço para inserir estes registros todos de uma vez no BD.

2 - Eu até consegui inserir só o campo nome[], mas quando o usuário só digita um filho, ele insere os outros campos vazios no bd. Mas eu quero que se o user digitar só um nome, insira só um reistro.

 

?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim... Pega o código abaixo e colocar um teste dentro do foreach. Se o $_POST['nomes'] for vazio, dá um continue.

 

if ($_POST['filhos'] == "SIM"){

foreach($_POST['nomes'] as $nomes)
{
echo $nomes;
$sqlf = "INSERT INTO filhos (

nome_filho

) VALUES (

'".$nomes."'

)";

$sqlf = mysql_query($sqlf)

or die (mysql_error());

}

}

 

Deve funcionar.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Carlos Eduardo, beleza? Valew pela ajuda ae, mas não entendi o q quis dizer.

O meu código funciona, quando envio só o nome para o BD. Por exemplo o código q você me passou eu já usei para inserir o nome do filho no BD, mas eu quero é inserir o NOME, a IDADE e se fica na creche(campo checkbox), ou seja, preciso enviar 3 campos para o foreach.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só colocar os outros campos... Ali só esta fazendo com o nome.

 

Outra opção é usar um for.

$qtde = count($_POST['nome']);
for ($x = 0, $x < $qtde; $x++){
$nomes = $_POST['nome'][$x];// repete para os outros campos
"INSERT INTO filhos (

nome_filho

) VALUES (

'".$nomes."'

)";
// coloca os outros campos no insert também
}

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, fiz assim:

 

$qtde = count($_POST['nomes']);

for ($x = 0; $x < $qtde; $x++)
{
$nomes = $_POST['nomes'][$x];
$idadef = $_POST['idadef'][$x];
$creche = $_POST['chk_creche'][$x];

$sqlf = "INSERT INTO filhos (

cracha_func,

nome_filho,

idade_filho,

creche_filho



) VALUES (

'".$_POST['cracha']."', 

'".$nomes."',

'".$idadef."',

'".$creche."'

)";

$sqlf = mysql_query($sqlf)

or die (mysql_error());

}

Deu certo, só tem dois problemas. O 1º é q se eu não marcar o meu checkbox, ele não insere nada no meu BD, mas quanto à isso tudo bem.

 

O 2º é que ele tá inserindo campos em branco no BD. Por exemplo tenho 5 campos, se eu preencher só 2 ele insere estes dois e mais 3 em branco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí você usa a dica que eu dei no post anterior. Mais ou menos assim.

$qtde = count($_POST['nomes']);

for ($x = 0; $x < $qtde; $x++)
{
if (empty($_POST['nomes'][$x])) continue;// o continue vai mandar ele para a próxima iteração do laço.
$nomes = $_POST['nomes'][$x];
$idadef = $_POST['idadef'][$x];
$creche = $_POST['chk_creche'][$x];

$sqlf = "INSERT INTO filhos (

cracha_func,

nome_filho,

idade_filho,

creche_filho



) VALUES (

'".$_POST['cracha']."', 

'".$nomes."',

'".$idadef."',

'".$creche."'

)";

$sqlf = mysql_query($sqlf)

or die (mysql_error());

}

 

Mais ou menos isto

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí você usa a dica que eu dei no post anterior. Mais ou menos assim.

$qtde = count($_POST['nomes']);

for ($x = 0; $x < $qtde; $x++)
{
if (empty($_POST['nomes'][$x])) continue;// o continue vai mandar ele para a próxima iteração do laço.
$nomes = $_POST['nomes'][$x];
$idadef = $_POST['idadef'][$x];
$creche = $_POST['chk_creche'][$x];

$sqlf = "INSERT INTO filhos (

cracha_func,

nome_filho,

idade_filho,

creche_filho



) VALUES (

'".$_POST['cracha']."', 

'".$nomes."',

'".$idadef."',

'".$creche."'

)";

$sqlf = mysql_query($sqlf)

or die (mysql_error());

}

 

Mais ou menos isto

 

Carlos Eduardo

 

Putz cara, tava mó feliz de ter achado a solução, mas não deu.

Eu inseri o código exatamente como você postou, mas continuou inserindo os campos em branco.

Já tô ficando desesperado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

OPA !!! DESCULPA !!! CORREÇÃO !!!

 

Funcionou sim, só tem um probleminha com os campos checkbox ele sempre marca as primeiras opções.

Tipo assim.

 

Eu insiro no form assim:

 

Fulano da Silva - 10 - Desmarcado
Fulano da Silva - 05 - Marcado
Fulano da Silva - 10 - Desmarcado

E no BD ele fica assim:

 

Fulano da Silva - 10 - Marcado
Fulano da Silva - 05 - Desmarcado
Fulano da Silva - 10 - Desmarcado

Mesmo se eu marcar o ultimo checkbox, no BD ele marca o primeiro e assim por diante.

Quanto mais eu rezo, mas me acontece...

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.