Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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);Um grande abraço.
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
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 ;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).
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.
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