Ir para conteúdo

POWERED BY:

Arquivado

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

carlosmadeiracunha

Como pegar o id de uma tabela e inserir em outra?

Recommended Posts

Boa tarde pessoal,

 

Eu revirei o fórum mas não consegui encontrar algo que pudesse me ajudar então abri novo tópico.

 

É o seguinte.

 

Através de pesquisas pela internet montei um código de cadastro de clientes com uma " tabela de nome clientes" que cadastra dados do cliente através de um formulário e esse formulário também envia "dados do veículo do cliente" que devem ser cadastrados em outra tabela de nome veiculo.

 

Explico porque preciso de duas tabelas, se o cliente mais tarde quiser cadastrar mais veículos , estes serão cadastrados na tabela veiculos juntamente com o id do cliente resgatado da tabela clientes, e aí é que está o problema, não consigo inserir o id da tabela clientes na tabela veiculo juntamente com os dados do veiculo.

 

Segue abaixo o meu código:

<?php 
$nome 		= mysql_real_escape_string($_POST['nome']);
$senha 		= mysql_real_escape_string($_POST['senha']);   //md5($_POST['senha']);
$telefone 	= mysql_real_escape_string($_POST['telefone']);
$email 		= mysql_real_escape_string($_POST['email']);   
$morada		= mysql_real_escape_string($_POST['endereco']."/".$_POST['cidade']."/".$_POST['estado']);
$data_cadastro 	= mysql_real_escape_string($_POST['data_cadastro']);

$veiculo 	= mysql_real_escape_string($_POST['veiculo']);

#//retirando espaços
   
   $nome=trim($nome);
   $telefone=trim($telefone);
   $email=trim($email);
   $senha=trim($senha);
   $morada=trim($morada	);
   $data_cadastro=trim($data_cadastro);
   
 
$erro=0;
 
#//verificar se já existe o nome cadastrado no BD
   $s = mysql_query("SELECT * FROM clientes WHERE nome LIKE '%$nome%'");
   $mnr = mysql_num_rows($s);
   
if($mnr!=0){ 
	echo '<center><font color="#FF0000"><h1> Nome já cadastrado em nosso sistema!</h1></font>'; 
	echo "<meta http-equiv='refresh' content='3;URL= form_cadastro.php'>";
	$erro++;
	 }
 
#//se não encontrar @ no campo e-mail
   if( !eregi("@", $email) ){
   echo '<center><font color="#FF0000"><h1>E-mail incorreto!</h1></font>';
   echo "<meta http-equiv='refresh' content='2;URL= form_cadastro.php'>";
   $erro++; }
 
#//encontrar números
   if( ereg("[0-9()-.,:;*&¬!?|+}{/]", $nome) ){
   echo '<center><font color="#FF0000"><h1>Campo nome não pode conter caracteres especiais!</h1></font>';
   echo "<meta http-equiv='refresh' content='3;URL= form_cadastro.php'>";
   $erro++; }
   
#//verificar se o campo nome foi setado
   if(empty($nome)){
   echo '<center><font color="#FF0000"><h1>Campo nome em branco!</h1></font>';
   echo "<meta http-equiv='refresh' content='2;URL= form_cadastro.php'>";
   $erro++; }
   
#//Verifica se existe este e-mail no banco de dados   
$s=mysql_query("SELECT * FROM clientes WHERE email LIKE '%$email%'");
   $mnr=mysql_num_rows($s);
   
if($mnr!=0){ 
	echo '<center><font color="#FF0000"><h1> E-mail já cadastrado em nosso sistema!</h1></font>'; 
	echo "<meta http-equiv='refresh' content='3;URL= form_cadastro.php'>";
	$erro++;
	 }   
   
if($erro==0){

$inserir = mysql_query("INSERT into clientes (nome, senha, telefone, email, morada, data_cadastro) VALUES ('$nome', '$senha', '$telefone', '$email', '$morada', '$data_cadastro')"); // Insere os valores do cliente no Banco de Dados., 
//mysql_query($inserir) or die(mysql_error());
}

#///////////   Daqui pra baixo não funciona  /////////

#// Seleciona os valores do cliente da tabela cliente
$sql = ("SELECT * FROM clientes WHERE nome LIKE '%$nome%'");
$id = $sql['id'];
#// Insere os valores do veiculo do cliente na tabela veiculos
$inserir_veiculo = mysql_query("INSERT into veiculos (id, veiculo) VALUES ('$id', '$veiculo')"); //valor $veiculo buscado no começo do código pelo $_POST['veiculo'];
mysql_query($inserir_veiculo) or die(mysql_error());
#//avisando que criou usuário e volta para o formulário de cadastro
echo "<meta http-equiv='refresh' content='2;URL= form-cadastro.php'>";
echo "<div style='width:600px; text-align:center; margin:0 auto 0 auto;'><h2>Salvando dados de<b> <i>" .$_POST['nome']." </b></i></h2>  <img src='../../images/loading.gif'></div>";

?>

Bem como comentado acima, o código funciona perfeitamente até a inserção dos dados do cliente mas quando chega no SELECT para buscar o id deste cliente criado, ele não encontra o id e não consegue gravar no INSERT o veículo na tabela veiculos e muito menos resgata o id da tabela clientes para inserir na tabela veiculos.

 

 

Porque ele não seleciona o id e porque não insere nem o valor $veiculo na tabela veiculos?

 

 

Quando coloco echo no $id, me dá este erro.

 

echo $id ."<br/>";

 

Erro:

S
Query was empty

Acredito que o S na primeira linha é o id que ele me retorna, oque é isso? E a linha abaixo nem preciso citar, está voltando vazio.

 

E se eu tento gravar somente os dados do veiculo na tabela veiculos, como abaixo demonstro, me retorna este erro:


$inserir_veiculo = mysql_query("INSERT into veiculos (veiculo) VALUES ('$veiculo')"); // Insere os valores do veiculo no Banco de Dados.,
mysql_query($inserir_veiculo) or die(mysql_error());

#//erro retornado 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 '1' at line 1

Já tentei de todas as formas que encontrei em fóruns pela internet mas não estou conseguindo.

Não dá pra buscar pelo último ID cadastrado porque vai saber se não tem mais clientes cadastrando-se e um pega o ip do outro.


Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde pessoal,

 

Explico porque preciso de duas tabelas, se o cliente mais tarde quiser cadastrar mais veículos , estes serão cadastrados na tabela veiculos juntamente com o id do cliente resgatado da tabela clientes, e aí é que está o problema, não consigo inserir o id da tabela clientes na tabela veiculo juntamente com os dados do veiculo.

 

Relacionamento entre tabelas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que entendi como usar o tutorial que o Rogério Santana passou, nele a gente consegue juntar as duas tabelas aplicando INNER JOIN em um SELECT. Jóia, vai ser excelente para quando eu precisar visualizar o cadastro completo do cliente, mas isso é só pra adiante.

 

Oque eu preciso na real agora é um SELECT que me dê o id do cliente no ato do cadastro para pegá-lo e gravá-lo na TABELA veículos.

 

A minha lógica é a seguinte:

Eu já gravei os dados do cliente na tabela clientes que tem id auto-increment? Sim gravei através do código:

$inserir = mysql_query("INSERT into clientes (nome, senha, telefone, email, morada, data_cadastro) VALUES ('$nome', '$senha', '$telefone', '$email', '$morada', '$data_cadastro')");

Agora tenho que resgatar, através de um SELECT, este id recém criado e gravá-lo junto com o valor $veiculo na TABELA veiculos, certo Carlos? Sim, mas como fazer? Tentei vários SELECT´s mas nenhum funcionou, oque eu tenho agora não resgata este id, não consigo ver o porque, aí vai ele:

$seleciona = mysql_query("SELECT id FROM clientes WHERE nome LIKE '%$nome%'");
$id_cliente = $seleciona['id'];

Depois tenho que inserir na TABELA veiculos os valores $id_cliente e $veiculo, faço da seguinte forma:

$inserir_veiculo = mysql_query("INSERT into veiculos (id_cliente, veiculo) VALUES ('$id_cliente', '$veiculo')"); 
mysql_query($inserir_veiculo) or die(mysql_error());

Ele grava o valor $veiculo (que já está pré-definido) mas o valor $id vai como vazio e na página cadastra_cliente.php que é a que está todo o código, me mostra este erro:

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 '1' at line 1

Sinceramente não entendi o erro, só ví que tem erro de sintaxe, mas onde está? linha 1 ?????????????

 

No BD mostra a TABELA clientes perfeitamente preenchida e na TABELA veiculos o dado do $veiculo está certo mas o $id_cliente mostra vazio, isso mostra que o meu SELECT não está funcionando e eu não consigo acertá-lo.

Me desculpem a repetição de algumas palavras, mas foi o jeito mais fácil que eu encontrei para me fazer entender.

Obrigado novamente pela atenção e um obrigado especial a Rogério Santana.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa cara, INNER JOIN? Não é necessário, selecione o ID do cliente que logou e guarde ele em uma variável de sessão ou em um cookie, depois pegue o valor do dessa variável para inserir normalmente na outra tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa cara, INNER JOIN? Não é necessário, selecione o ID do cliente que logou e guarde ele em uma variável de sessão ou em um cookie, depois pegue o valor do dessa variável para inserir normalmente na outra tabela.

Sim , isto daria certo se o cliente já fosse registrado, mas neste caso não existe "login", nem mesmo o cliente, estou falando de um código para cadastro do cliente, ou seja, o cliente preenche o formulário para cadastro que tem como campos:

nome, telefone, (endereço, cidade, estado, que mais tarde estes 3 serão unidos pelo código para se tornarem $morada), depois vem, veiculo e senha. como mostrado na imagem abaixo:

 

formul%C3%A1rio_cliente.png

 

Eu preciso inserir nome, telefone, endereço, cidade, estado e senha na tabela clientes que tem id auto-increment, Isto eu já consegui.

Depois tenho que inserir na tabela veiculo os dados do veiculo, mas para que eu identifique de qual cliente é o referido veículo, quero inserir também o id recém criado na tabela clientes.

 

Ou seja tenho duas tabelas e tenho que inserir nelas dados vindos de um form através de POST . Na tabela 1 insiro determinados dados e na tabela 2 o restante dos dados mas tenho que inserir também o ID auto-increment, recém criado na tabela 1, na tabela 2. Oque eu não estou conseguindo é buscar este ID da tabela 1 para inserir na tabela 2.

 

Tem alguma sugestão?

 

Parabéns, você simplesmente foi em busca do que queria e já voltou debatendo o assunto. :clap:

------------------------------------------------------------------------------------------------------------------------

 

Use o mysql_insert_id um exemplo

Obrigado pelos parabéns e desde já agradeço atenção dispensada a mim.

 

É o seguinte, no primeiro link tem um comentário que diz exatamente oque acontece no meu código, está retornando o valor 0.

 

O comentário na página:

Parece que, em caso de um primeiro INSERT mysql_insert_id () retorna 0. Meu palpite é que o MySQL não aciona auto incremento se a tabela está vazia. Uma vez que uma entrada está presente, ele funciona como esperado.

 

no comentário logo abaixo tem aparentemente a solução mas eu não entendí.

Se mysql_insert_id () retorna 0 ou nulo, verifique o campo auto incremento não está sendo definido pela consulta sql, também, se você tiver várias conexões db como eu fiz, a solução é criar uma conexão db separado para esta consulta.

Tem como me explicar isto aí????? Se possível é claro. :yes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gente eu ainda não consegui fazer o meu select.

 

Caramba eu tô com minha lógica na cabeça:

1-Passei os dados de um form para um código via POST? sim.

2-Verifiquei se nome e e-mail constam no banco de dados? sim.

3-se não, eu gravei os dados do cliente na tabela cliente? sim.

4-selecionei o id recém criado no auto-increment para gravar na tabela veiculos? Não.

 

A pergunta agora é a seguinte, se eu gravei este ID, porque não consigo buscá-lo com este select?

SELECT id FROM clientes WHERE nome LIKE '%$nome%' 

O negócio é que o insert grava os dados do veículo mas retorna um ID "0".
Mas que droga, não consigo nem um tutorial simples que eu possa entender tudo, porque os que eu acho nem sempre eu entendo mas tento trabalhar em cima para adaptar pro meu código mas não funcionam.

Já estou com o ID da tabela clientes em 209 de tantas vezes que mexi neste código, hora grava os dados do veículo , hora não, tem vez que retorna erro como em um dos meus posts acima e outras vezes não retorna erro mas retorna valor na coluna id_cliente = "0". como agora.

 

Estou quase desmembrando isso, tirando os dados do veículo e deixando somente os dados do cliente para depois ele se logar e cadastrar o veículo, porque daí sim eu vou conseguir pegar o id sem problemas. Mas acho que vai ficar mais trabalhoso pro usuário e minha intenção é facilitar ao máximo para que este tenha uma boa impressão do site.

Olhem só que eu fiz agora:

$seleciona = mysql_query ("SELECT LAST_INSERT_ID() AS ID from clientes ORDER BY id desc limit 1");
$seleciona = $id_cliente;

// Insere os valores do veiculo no Banco de Dados., 
$inserir_veiculo = mysql_query("INSERT into veiculos (id_cliente, veiculo) VALUES ('$id_cliente', '$veiculo')"); 
mysql_query($inserir_veiculo) or die(mysql_error());

Me retorna :

Query was empty

Cadastra o cliente normalmente mas não cadastra nem os dados do veículo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, isso é puro problema de prioridades, o que você vai fazer é:

 

Inserir primeiro o cliente, ou seja, você vai pegar o MAX(id) da tabela clientes e vai guardar em uma variável, depois você vai pegar as informações do carro e vai inserir e vai fazer um outro select para inserir as informações do carro na tabela dois através do código do id que está na variável.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Conseguiiiiiii.

 

 

 

Eu usei o mysql_insert_id(); que me foi citado pelo Rogério Santana a alguns posts acima mas eu não tinha entendido, pesquisei bastante para poder entender e daí ficou tudo fácil. Muito obrigado Rogério.

 

O código ficou assim, para quem tiver a mesma dificuldade que eu, mas antes lembrando que este código abaixo é continuação do 1º código do tópico:

// Insere os valores do cliente no Banco de Dados. 
$inserir = mysql_query("INSERT into clientes (nome, senha, telefone, email, morada, data_cadastro) VALUES ('$nome', '$senha', '$telefone', '$email', '$morada', '$data_cadastro')");

//Seleciona o cliente através do id cadastrado com auto-increment
$inserir = mysql_insert_id();

//Insere os dados na tabela veiculos onde $inserir é o id resgatado
mysql_query("INSERT INTO veiculos VALUES ('$inserir', '$veiculo')");

//verifica se deu erro
mysql_query($inserir) or die(mysql_error());

Mas só tem um problema, está retornando este erro:

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 '2' at line 1

Mas posso resolver simplesmente retirando a linha onde eu peço pra retornar erro, a linha é esta:

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

Estava pensando agora no seguinte, será que não está retornando este erro porque o valor $inserir aparece nos dois INSERT´s?

 

Gostaria de saber o porque retorna este erro, poderiam me explicar?.



Ah, KhaosDoctor,

 

Eu não entendi como se usa o MAX(id).

Deve ser tão fácil ou mais que o mysql_insert_id(), mas não entendi mesmo. :sick:

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.