JonatasFn 0 Denunciar post Postado Julho 13, 2009 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
João Batista Neto 448 Denunciar post Postado Julho 13, 2009 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
webmind 5 Denunciar post Postado Julho 13, 2009 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
Mário Monteiro 179 Denunciar post Postado Julho 13, 2009 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
JonatasFn 0 Denunciar post Postado Julho 14, 2009 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
JonatasFn 0 Denunciar post Postado Julho 14, 2009 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
WarLiKe 0 Denunciar post Postado Julho 14, 2009 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
JonatasFn 0 Denunciar post Postado Julho 15, 2009 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
JonatasFn 0 Denunciar post Postado Julho 16, 2009 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
Matias Rezende 50 Denunciar post Postado Julho 16, 2009 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
JonatasFn 0 Denunciar post Postado Julho 16, 2009 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
Matias Rezende 50 Denunciar post Postado Julho 16, 2009 É 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
JonatasFn 0 Denunciar post Postado Julho 16, 2009 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
Matias Rezende 50 Denunciar post Postado Julho 16, 2009 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
JonatasFn 0 Denunciar post Postado Julho 17, 2009 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
JonatasFn 0 Denunciar post Postado Julho 17, 2009 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