Ir para conteúdo

POWERED BY:

Arquivado

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

Willian Rodrigues Andrade

Inserindo dados em várias tabelas com apenas uma conexão php

Recommended Posts

Olá pessoal

Estou com um problema ao inserir dados no banco.

Como exemplo vou tentar simplificar o meu problema.

Criei a tabela endereço e coloquei ela na terceita forma normal.

Porém na hora de inserir não estou conseguindo.

A foto da minha tabela esta nesse link. http://imageshack.us/photo/my-images/29/t8xc.png/

<?php 
	include( "conexao.php" );
		
	//RECEBENDO OS DADOS PREENCHIDOS DO FORMULÁRIO
	$nome 		 	= $_POST["nome"];
	$email 		 	= $_POST["email"];
	$cpf 		 	= $_POST["cpf"];
	$rg 		 	= $_POST["rg"];
	$pais 		 	= $_POST["pais"];
	$estado 	 	= $_POST["estado"];
	$municipio 	 	= $_POST["municipio"];  //verificar se essa alteração ( cidade p/ município vai dar problemas
	$bairro 	 	= $_POST["bairro"];
	$logradouro  	= $_POST["logradouro"];
	$numero 	 	= $_POST["numero"];
	$cep 		 	= $_POST["cep"];
	$complemento 	= $_POST["complemento"];
	$telResidencial = $_POST["telResidencial"];
	$telTrabalho 	= $_POST["telTrabalho"];
	$telCelular 	= $_POST["telCelular"];


	/*-------------------------------------------------------------------------------------*/
	//Inserir dados na tabela Pais
	$idPais = mysql_query( " SELECT p.idPais FROM Pais p WHERE p.nome = '$pais' " );
	
	$idPais_ = mysql_fetch_array( $idPais );
	$idPais = $idPais_[ "idPais" ];
	//se o valor retornado é vazio então o país é inserido na tabela
	if( $idPais == '' ) {
		mysql_query( "INSERT INTO Pais( nome ) VALUES( '$pais' )" );
	}
	
	/*-------------------------------------------------------------------------------------*/

	//Inserir dados na tabela Estado
	$idEstado = mysql_query( " SELECT e.idEstado FROM Estado e WHERE e.nome = '$estado' " );
	
	$idEstado_ = mysql_fetch_array( $idEstado );
	$idEstado = $idEstado_[ "idEstado" ];
	//se o valor retornado é vazio então o estado é inserido na tabela
	echo"Vou tentar inserir o estado no idPais $idPais";
	if( $idEstado == '' ) {
		echo "Vou sinserir o estado $estado";
		if(!mysql_query( "INSERT INTO Estado( Pais_idPais, nome ) VALUES( '$idPais', '$estado' )" ) )
			echo "Erro ao tentar inserir estado";
	}

	/*-------------------------------------------------------------------------------------*/

	//Inserir dados na tabela Município
	$idMunicipio = mysql_query( " SELECT m.idMunicipio FROM Municipio m WHERE m.nome = '$municipio' " );
	
	$idMunicipio_ = mysql_fetch_array( $idMunicipio );
	$idMunicipio = $idMunicipio_[ "idMunicipio" ];
	
	//se o valor retornado é vazio então o Municipio é inserido na tabela
	if( $idMunicipio == '' ) {
		echo "Vou inserir o municipio $municipio";
		mysql_query( "INSERT INTO Municipio( Estado_idEstado, nome ) VALUES( '$idEstado', '$municipio' )" );
	}
	
	/*-------------------------------------------------------------------------------------*/

	//Inserir dados na tabela Bairro
	$idBairro = mysql_query( " SELECT b.idBairro FROM Bairro b WHERE b.nome = '$bairro' " );
	
	$idBairro_ = mysql_fetch_array( $idBairro );
	$idBairro = $idBairro_[ "idBairro" ];
	
	//se o valor retornado é vazio então o bairro é inserido na tabela
	if( $idBairro == '' ) {
		mysql_query( "INSERT INTO Bairro( Municipio_idMunicipio, nome ) VALUES( '$idMunicipio', '$bairro' )" );
	}
	
	/*-------------------------------------------------------------------------------------*/

	//Inserir dados na tabela Logradouro
	$idLogradouro = mysql_query( " SELECT l.idLogradouro FROM Logradouro l WHERE l.nome = '$logradouro' " );
	
	$idLogradouro_ = mysql_fetch_array( $idLogradouro );
	
	$idLogradouro = $idLogradouro_[ "idLogradouro" ]; 
	
	//se o valor retornado é vazio então o logradouro é inserido na tabela
	if( $idLogradouro == '' ) {
		mysql_query( "INSERT INTO Logradouro( Bairro_idBairro, nome ) VALUES( '$idBairro', '$logradouro' )" );
	}
	
	/*-------------------------------------------------------------------------------------*/

	//Inserir dados na tabela EnderecoCliente
	$idEnderecoCliente = mysql_query( " SELECT n.idEnderecoCliente FROM EnderecoCliente n WHERE n.numero = '$numero' " );
	
	$idEnderecoCliente_ = mysql_fetch_array( $idEnderecoCliente );
	
	$idEnderecoCliente = $idEnderecoCliente_[ "idEnderecoCliente" ];
	
	//se o valor retornado é vazio então o numero é inserido na tabela
	if( $idEnderecoCliente == '' ) {
		echo "Entrei no if";
		echo "o numero que vou inserir é $numero e o idLogradouro e $idLogradouro";
		
		mysql_query( "INSERT INTO EnderecoCliente( Logradouro_idLogradouro ,nome ) VALUES( '$idLogradouro', '$numero' )" );
	}
	mysql_close();
?>

Minha conexão é feita aqui.

<?php 
	//Informações do banco de dados
	$host  = "localhost"; //Nome ou IP do Servidor
	$user  = "root"; 	  //Usuário do Servidor MySQL
	$senha = "84084138"; 	  //Senha do Usuario root MySQL
	$dbase = "empresa";	  //Nome do banco de dados
	
	//conexão com o banco
	$conexao = mysql_connect( $host, $user, $senha );
	//conectar e selecionar um banco de dados
	if( !$conexao )
	{
		die( "Erro ao tentar conectar na base de dados:<br>".mysql_error() );
	}
	else
	if( !mysql_select_db( $dbase, $conexao ) )
	{
		//exibe uma messagem de erro
		print "Ocorreu um erro ao selecionar o Banco.";
		print "<b>" .mysql_error(). "</b>";
		die();
		return 0;
	}
?>

Alguém consegue enchergar o meu erro.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

aparece alguma mensagem de erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não aparece nehuma menssagem de erro.

A minha ideia é inserir de acordo com as dependencias.
Primeiro insiro o pais.

Depois de (assumindo primeiramente que todas as inserções não irão existir na base de dados) inserir eu capturo o idPais e uso na inserção do estado e se o estado existir ou não eu tb terei o seu idEstado para inserir o municipio e assim até chegar no topo da cadeia.

Mas as inserções não estão acontecendo.
Ex.
Eu clico no botão enviar no formulario uma vez.
Ai insere o pais corretamente mas não insere os outros.

Ai clico denovo em enviar e insere o estado mas não insere o municipio.
Clico novamente em inserir insere o municiío mas não o bairro.

E assim por diante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, o mysql_fetch_array na verdade traz o resultado em linhas de resultado, para percorrer os valores vc tem que fazer o seguinte:

 

	$rst = mysql_query( " SELECT p.idPais FROM Pais p WHERE p.nome = '$pais' " );
	
	while ($rows = mysql_fetch_array($rst)){
		$idPais = $rows['idPais'];
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloque isso no inicio do codigo para ver se aparece algum erro

 

 

ini_set('display_errors', true);
error_reporting(E_ALL);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como esta sendo inserido o pais tente dar um echo em $idEstado

echo $idEstado;ou var_dump($idEstado_);

poste aqui o que esta retornando dentro destas variáveis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz uma mudança para ver onde está o problema.
O mesmo continua

vejam meus códigos

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE SCHEMA IF NOT EXISTS `cliente` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `cliente` ;

-- -----------------------------------------------------
-- Table `cliente`.`Endereco`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `cliente`.`Endereco` (
  `idEndereco` INT NOT NULL AUTO_INCREMENT ,
  `pais` VARCHAR(100) NOT NULL ,
  `estado` VARCHAR(100) NOT NULL ,
  `cidade` VARCHAR(100) NOT NULL ,
  `logradouro` VARCHAR(100) NOT NULL ,
  `cep` VARCHAR(20) NOT NULL ,
  `numero` VARCHAR(5) NOT NULL ,
  PRIMARY KEY (`idEndereco`) ,
  UNIQUE INDEX `idEndereco_UNIQUE` (`idEndereco` ASC) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `cliente`.`PessoaCliente`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `cliente`.`PessoaCliente` (
  `idPessoaCliente` INT NOT NULL AUTO_INCREMENT ,
  `cpf` VARCHAR(15) NOT NULL ,
  `rg` VARCHAR(20) NOT NULL ,
  PRIMARY KEY (`idPessoaCliente`) ,
  UNIQUE INDEX `cpf_UNIQUE` (`cpf` ASC) ,
  UNIQUE INDEX `rg_UNIQUE` (`rg` ASC) ,
  UNIQUE INDEX `idPessoa_UNIQUE` (`idPessoaCliente` ASC) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `cliente`.`Cliente`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `cliente`.`Cliente` (
  `idCliente` INT NOT NULL AUTO_INCREMENT ,
  `nome` VARCHAR(60) NOT NULL ,
  `email` VARCHAR(60) NOT NULL ,
  `Endereco_idEndereco` INT NOT NULL ,
  `PessoaCliente_idPessoaCliente` INT NOT NULL ,
  `Senha` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`idCliente`) ,
  UNIQUE INDEX `idCliente_UNIQUE` (`idCliente` ASC) ,
  UNIQUE INDEX `email_UNIQUE` (`email` ASC) ,
  INDEX `fk_Cliente_Endereco1_idx` (`Endereco_idEndereco` ASC) ,
  INDEX `fk_Cliente_PessoaCliente1_idx` (`PessoaCliente_idPessoaCliente` ASC) ,
  CONSTRAINT `fk_Cliente_Endereco1`
    FOREIGN KEY (`Endereco_idEndereco` )
    REFERENCES `cliente`.`Endereco` (`idEndereco` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Cliente_PessoaCliente1`
    FOREIGN KEY (`PessoaCliente_idPessoaCliente` )
    REFERENCES `cliente`.`PessoaCliente` (`idPessoaCliente` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `cliente`.`TelefoneCliente`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `cliente`.`TelefoneCliente` (
  `idTelefoneCliente` INT NOT NULL AUTO_INCREMENT ,
  `tipo` VARCHAR(45) NOT NULL ,
  `numero` VARCHAR(15) NOT NULL ,
  `Cliente_idCliente` INT NULL ,
  PRIMARY KEY (`idTelefoneCliente`, `Cliente_idCliente`) ,
  UNIQUE INDEX `idTelefone_UNIQUE` (`idTelefoneCliente` ASC) ,
  INDEX `fk_Telefone_Cliente1_idx` (`Cliente_idCliente` ASC) ,
  CONSTRAINT `fk_Telefone_Cliente1`
    FOREIGN KEY (`Cliente_idCliente` )
    REFERENCES `cliente`.`Cliente` (`idCliente` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

USE `cliente` ;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<form name="form" method="post" action="cliente.php">
	<h3>Seus dados estão seguro.</h3><br />
    <input type="text" name="pais" size="15" maxlength="100" placeholder="Pais" />
    <input type="text" name="estado" size="15" maxlength="100" placeholder="Estado" />
    <input type="text" name="cidade" size="15" maxlength="100" placeholder="Município" />
    <input type="text" name="logradouro" size="15" maxlength="100" placeholder="Logradouro" />
    <input type="text" name="cep" size="15" maxlength="20" placeholder="Cep" />
    <input type="text" name="numero" size="5" maxlength="5" placeholder="Numero" />
    
    <input type="submit" onclick="window.opener" value="Enviar"<br />
</form>

</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<?php
	$pais 		 	= $_POST["pais"];
	$estado 	 	= $_POST["estado"];
	$cidade 	 	= $_POST["cidade"];
	$logradouro		= $_POST["logradouro"];
	$cep			= $_POST["cep"];
	$numero			= $_POST["numero"];
	
	echo "Dados vindos do post<br>";
	echo "$pais<br>";
	echo "$estado<br>";
	echo "$cidade<br>";
	echo "$logradouro<br>";
	echo "$cep<br>";
	echo "$numero<br>";
	
	include( "conexao.php" );

	/*-------------------------------------------------------------------------------------*/
	
	//inserção de dados na tabela
	mysql_query( "INSERT INTO endereco( pais, estado, cidade, logradouro, cep, numero ) 		
					            VALUES( '$pais', '$estado', '$logradouro', '$cep', '$numero )" );
	/*-------------------------------------------------------------------------------------*/
?>

<meta http-equiv="refresh" content="8;URL=login.php">
    <div align="center"><font size=7> Seu cadastro foi realizado com sucesso!</font><br>
      <font size=5>Você será redirecionado automaticamente para a página de login em 8 segundos.</font><br>
      <font size=3>Caso isso não aconteça <a href="login.php">clique aqui</a></font></div>

</body>
</html>
<?php
	//Informações do banco de dados
	$host  = 'localhost'; //Nome ou IP do Servidor
	$user  = 'root'; 	  //Usuário do Servidor MySQL
	$senha = '84084138'; 	  //Senha do Usuario root MySQL
	$dbase = 'cliente';	  //Nome do banco de dados
	
	//conexão com o banco
	if( !($conexao = mysql_connect( "localhost", $user, $senha ) ) )
	{
		die( "Erro ao tentar conectar na base de dados:<br>".mysql_error() );
	}
	else
	if( !($resposta = mysql_select_db( $dbase, $conexao ) ) )
	{
		//exibe uma messagem de erro
		print "Ocorreu um erro ao selecionar o Banco.";
		print "<b>" .mysql_error(). "</b>";
		die();
		return 0;
	}
	echo "Se não apareceu erro vc está conectado";
?>


Pessoal.
Aos que estão querendo me ajudar.
Descobri mais um detalhe.

O problema está nos inserts.

Ai eu não seri porque.
Os selects funcionam normalmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

deixe assim o codigo dos inserts, lembre de trocara $insert pelo seu insert...

 

 

mysql_query($insert) or die(mysql_error());

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo jeito alguma variavel veio fazia nesse insert. qual dos inserts foi?

Compartilhar este post


Link para o post
Compartilhar em outros sites

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''

Poxa vida gente.
Além de esquecer de colocar cidade no insert ( que eu já corrigi) ainda continua um erro de sintaxe.

Ninguem aqui no imaster sabe PHP não ?
Ajuda ai pow.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ninguem aqui no imaster sabe PHP não ?

Ajuda ai pow.

Você tá PAGANDO por alguma coisa? Então não reclama... tem muita gente que sabe, só que não tem tempo para fazer o trabalho alheio. Não adianta postar uma c#r#lhada de código e esperar que alguém vá estudar ele e te devolver prontinho, isso é consultoria e ai tem que por a mão no bolso.

Além do que a sua dúvida é SQL e não PHP.

 

 /*-------------------------------------------------------------------------------------*/ 
//inserção de dados na tabela 
mysql_query( "INSERT INTO endereco( pais, estado, cidade, logradouro, cep, numero ) 
VALUES( '$pais', '$estado', '$logradouro', '$cep', '$numero )" );
 /*-------------------------------------------------------------------------------------*/

...

p', '$numero ) você esqueceu de fechar a ' após o $numero.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca a query que está dando erro, exatamente como ela está e também qual o erro atual.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
	$pais 		 	= $_POST["pais"];
	$estado 	 	= $_POST["estado"];
	$cidade 	 	= $_POST["cidade"];
	$logradouro		= $_POST["logradouro"];
	$cep			= $_POST["cep"];
	$numero			= $_POST["numero"];
	
	echo "Dados vindos do post<br>";
	echo "$pais<br>";
	echo "$estado<br>";
	echo "$cidade<br>";
	echo "$logradouro<br>";
	echo "$cep<br>";
	echo "$numero<br>";
	
	include( "conexao.php" );

	/*-------------------------------------------------------------------------------------*/

	//inserção de dados na tabela
	mysql_query( "INSERT INTO endereco( pais, estado, cidade, logradouro, cep, numero ) VALUES( '$pais', '$estado', '$cidade', '$logradouro', '$cep', '$numero' " ) or die(mysql_error());

	/*-------------------------------------------------------------------------------------*/

	/*
	$resposta = @mysql_query("SELECT * FROM endereco");
	while( $vet = mysql_fetch_array($resposta) )
	{
		echo "<br>";
		echo $vet[ 'pais' ];
		echo "<br>";
		echo $vet[ 'estado' ];
		echo "<br>";
		echo $vet[ 'cidade' ];
		echo "<br>";
		echo $vet[ 'logradouro' ];
		echo "<br>";
		echo $vet[ 'cep' ];
		echo "<br>";
		echo $vet[ 'numero' ];	
	}
	mysql_query($insert) or die(mysql_error());
	*/
?>

Olha pessoal.

O insert que está comentado no código funciona.

DIante disto acho que posso afirmar que não tem a ver com a conexão com o banco e nem com o servidor.

Os posts são imprimidos na tela e todos são impressos como a entrada do formulário.

Talvez o erro esteja no insert.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está faltando fechar o ) após o último '

 

 

mysql_query( "INSERT INTO endereco( pais, estado, cidade, logradouro, cep, numero ) VALUES( '$pais', '$estado', '$cidade', '$logradouro', '$cep', '$numero') " ) or die(mysql_error());

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal

Descobri o problema

se tratava de um parenteses a menos no insert

 

O correto está abaixo

//inserção de dados na tabela
mysql_query( "INSERT INTO endereco( pais, estado, cidade, logradouro, cep, numero ) VALUES( '$pais', '$estado', '$cidade', '$logradouro', '$cep', '$numero' )") or die(mysql_error());

 

Bom.
Minha pergunta não foi muito objetiva e isso pode atrapalhar o fórum.
Posso excluir a pergunta depois de dar pontos positivos para vcs ????



Ok pessoal
EU descobri o problema junto com o E Serra.
Pode excluir ne ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Toda duvida é util

 

Ficará registrado para pesquisas futuras

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.