vivi@ne 0 Denunciar post Postado Agosto 3, 2010 Boa noite, Sou iniciante em PHP e preciso de uma ajudinha para fazer um insert. Tenho um formulário de cadastro de empresa com quadro societário. O usuário pode acrescentar até 10 sócios, desta forma posso ter até 10 informações diferentes. No BD a tabela já está montada e tem os campos de mesmo nome dos inputs que vem do formulário. Assim ficaria fácil saber onde fazer os inserts, certo? ERRADO!!! Tô apanhando pra caramba, não consigo montar a instrução... Será que alguém sabe? Conto com a ajuda de vocês...Segue o código que traz nomes dos campos e os valores para acrescentar: $X = $_POST; $i = 0; foreach ( $X as $VAR => $VALUE) { foreach($_POST["$VAR"] as $campo) { if(count($_POST["$VAR"])>1){ $i = $i + 1; }else{ $i = ""; } if( $i > count($_POST["$VAR"])){ $i = 1; } if ($i == 1){ $a = ""; }else{ $a = $i; } }} //AQUI ESTÁ MEU PROBLEMA não consigo definir os valores $VAR$a e $campo!!! $q1 = "insert into tabela ($VAR$a) Values ('$campo')"; $resultado = mysql_query($q1); //Fora do foreach só mostra o ultimo campo!!! Um grande abraço. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Agosto 3, 2010 poste a estrutura do banco. estude sobre normalização de dados. provavel que o ideal seria a modelagem a seguir: TABLE empresa id_empresa, nome_empresa TABLE socio id_socio, id_empresa, nome_socio e então, com um unico laço for() você faz a INSERT Compartilhar este post Link para o post Compartilhar em outros sites
vivi@ne 0 Denunciar post Postado Agosto 4, 2010 A estrutura do banco de dados está bem simples, tenho os dados de empresa e sócios na mesma tabela. Esse laço é que tá me matando, preciso colocar os valores de $VAR$a e $campos agrupados para o insert - ($VAR$a) Values ('$campo'). Dessa forma já vai montar a instrução na mesma estrutura do banco de dados. Por exemplo: Banco de Dados Coluna1: ID Coluna2: Empresa Coluna3: Socio Coluna4: Socio2 Coluna5: Socio3 ... Já o código postado me devolve: $VAR$a = Empresa, Socio, Socio2, Socio3 .... $campo = Nome da Empresa, Nome do Socio, Nome do Socio2, Nome do Socio3... Se for possívem me passe um exemplo desse laço for() para eu testar Agradeço Não sei se deu pra entender Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Agosto 4, 2010 a sua modelagem está errada. exemplo com a tabela normalizada: <?php if( $_SERVER['REQUEST_METHOD']=='POST' ) { $con = mysql_connect( 'localhost', 'root', '123' ); mysql_select_db( 'teste', $con ); $sql = "INSERT INTO empresa (id, nome) VALUES (NULL, '{$_POST['nome_empresa']}')"; $query = mysql_query( $sql )or die( mysql_error() ); echo $sql, '<br />';//depois remova essa linha $id_empresa = mysql_insert_id(); $sql = "INSERT INTO socio (id, id_empresa, nome) VALUES"; for( $i=0; $i<count($_POST['socio']); $i++ ){ if( !empty($_POST['socio'][$i]) ) $values[] = "( NULL, {$id_empresa}, '{$_POST['socio'][$i]}' )"; } $sql .= implode( $values, ', '); $query = mysql_query( $sql )or die( mysql_error() ); echo $sql,'<br />';//depois remova essa linha } ?> <html> <head> <style type="text/css"> </style> <script type="text/javascript"> </script> </head> <body> <form action="" method="post"> <label>Nome Empresa: <input type="text" name="nome_empresa" value="iMasters" /></label> <label>Sócio 1: <input type="text" name="socio[]" value="William" /></label> <label>Sócio 2: <input type="text" name="socio[]" value="Bruno" /></label> <label>Sócio 3: <input type="text" name="socio[]" /></label> <label><input type="submit" name="enviar" value="Enviar" /></label> </form> </body> </html> estrutura: -- -- Estrutura da tabela `empresa` -- CREATE TABLE IF NOT EXISTS `empresa` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; -- -- Estrutura da tabela `socio` -- CREATE TABLE IF NOT EXISTS `socio` ( `id` int(11) NOT NULL AUTO_INCREMENT, `id_empresa` int(11) NOT NULL, `nome` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Agosto 4, 2010 O problema está aqui: VALUES ('$campo') Veja que você delimita "campo" com aspas simples. Você está inserindo um único valor no BD, em um único campo. Por isso dá problema. =) Podem ser feitos de duas maneiras: implode dos campos recebidos do formulário: VALUES ('" . implode("', '", $_POST) . "')" Ou o mais recomendado, utilizar uma biblioteca com suporte a atrelamento de valores (bind). Sugiro PDO mas você também pode utilizar MySQLi Compartilhar este post Link para o post Compartilhar em outros sites
vivi@ne 0 Denunciar post Postado Agosto 4, 2010 RESOLVIDO, Pra quem quiser segue o código $X = $_POST; $i = 0; $nvar = 0; $instrucao = ""; $instrucao2 = ""; foreach ( $X as $VAR => $VALUE) { foreach($_POST["$VAR"] as $campo) { $nvar = $nvar + 1; if(count($_POST["$VAR"])>1){ $i = $i + 1; }else{ $i = ""; } if( $i > count($_POST["$VAR"])){ $i = 1; } if ($i == 1){ $a = ""; }else{ $a = $i; } $cpbd = "$VAR$a, "; $cpvr = "'$campo', "; $instrucao .= $cpbd; $instrucao2 .= $cpvr; } } $nome = explode(",", $instrucao); $conta = count($nome); if( $conta > $nvar ){ $instrucao = substr($instrucao,0,-2); $instrucao2 = substr($instrucao2,0,-2); }else{ $instrucao = $instrucao; $instrucao2 = $instrucao2; } $q12 = "insert into tabela (".$instrucao.") Values (".$instrucao2.")"; $resultado = mysql_query($q12); if (!$resultado ) die ('Execução de consulta gerou o seguinte erro no MYSQL-->' . mysql_error()); Vlw pela força. Compartilhar este post Link para o post Compartilhar em outros sites