Ir para conteúdo

POWERED BY:

Arquivado

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

vivi@ne

[Resolvido] insert complicado

Recommended Posts

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

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

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

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

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

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

×

Informação importante

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