KraD 0 Denunciar post Postado Setembro 28, 2012 Pessoal, Estou com uma dificuldade ao realizar inserção no banco de dados utilizando PHP. Estou utilizando o seguinte código: [indent]//Query que realiza a inserção dos dados no banco de dados na tabela teste $insert_tb_teste = "INSERT INTO teste (nome, email, sexo, ddd, telefone, endereco, cidade, estado, bairro, pais ) VALUES ('$nome', '$email', '$sexo', '$ddd', '$tel', '$endereco', '$cidade', '$estado', '$bairro', '$pais')"; ### Select desejado $sql= "SELECT id_teste FROM teste WHERE nome = '$nome'"; ### ### Executa o select e guarda na variavel $result $result = mysql_query($sql,$conexao) or die(mysql_error()); $linha = mysql_fetch_array($result); $id_fk = $linha["id_teste"]; echo "$id_fk\n"; //$post_id = mysql_insert_id($conexao); //echo "$post_id </br>"; //Query que realiza a inserção dos dados no banco de dados na tabela teste $insert_tb_login = "INSERT INTO login (login, senha, fk_teste_login) VALUES ('$login', '$senha', '$id_fk')"; $resultado_teste = mysql_query($insert_tb_teste, $conexao) or die("Ocorreu um erro e seus registros não foram inseridos na tabela teste </br>" .mysql_error()); $resultado_login = mysql_query($insert_tb_login, $conexao) or die("Ocorreu um erro e seus registros não foram inseridos na tabela login </br>" .mysql_error()); echo "Cadastro realizado"; [/indent] Tentar explicar a lógica! Tenhos duas tabelas (teste e login), na tabela teste consta dos dados básicos do usuário como nome e etc já na tabela login apresenta os dados como senha e o user para realizar autenticação no sistema. Na tabela login existe uma FK que puxa o id da tabela "teste" para fazer referencia na tabela login. O problema que ao realizar o cadastro, apresenta o seguinte erro. Ocorreu um erro e seus registros não foram inseridos na tabela login Cannot add or update a child row: a foreign key constraint fails (`tsanderson`.`login`, CONSTRAINT `fk_teste_login` FOREIGN KEY (`fk_teste_login`) REFERENCES `teste` (`id_teste`)) Porém ele realizar a inserção na tabela teste com os dados do usuário, não realizando apenas a inserção dos dados na tabela login. Ao atualizar a página, ele cria uma nova inserção na tabela teste e cria a FK na tabela login. Não consegui até o momento descobrir o problema. Espero que possam me ajuda ;) Compartilhar este post Link para o post Compartilhar em outros sites
Cacilds 18 Denunciar post Postado Setembro 28, 2012 Bom, como o próprio erro já diz: Há um erro de foreign key..., mas se os dados ESTÃO na tabela teste não devia acontece. Você já tentou inserir o registro manualmente? Dê um print na sua $insert_tb_login antes de executá-la para ver o que está sendo enviado. Uma dica: Se quiser pegar o ID do registro sem precisar da um SELECT, após o INSERT você consegue resgatar utilizando a função mysql_insert_id(); []'s Compartilhar este post Link para o post Compartilhar em outros sites
KraD 0 Denunciar post Postado Setembro 28, 2012 Bom, como o próprio erro já diz: Há um erro de foreign key..., mas se os dados ESTÃO na tabela teste não devia acontece. Você já tentou inserir o registro manualmente? Dê um print na sua $insert_tb_login antes de executá-la para ver o que está sendo enviado. Uma dica: Se quiser pegar o ID do registro sem precisar da um SELECT, após o INSERT você consegue resgatar utilizando a função mysql_insert_id(); []'s Então, vlw pela ajuda :D Imprimei o que ele estava retornando o valor da consulta, ou seja essa parte aqui: $linha = mysql_fetch_array($result); $id_fk = $linha["id_teste"]; Tentei utilizar o mysql_insert_id(); porém ta ficando com o valor 0. Eu devo colocar alguma coisa dentro dos parênteses? Se sim, ficaria desse modo ou não mysql_insert_id($insert_tb_teste);? Compartilhar este post Link para o post Compartilhar em outros sites
Cacilds 18 Denunciar post Postado Setembro 28, 2012 Então, vlw pela ajuda :D Imprimei o que ele estava retornando o valor da consulta, ou seja essa parte aqui: $linha = mysql_fetch_array($result); $id_fk = $linha["id_teste"]; Tentei utilizar o mysql_insert_id(); porém ta ficando com o valor 0. Eu devo colocar alguma coisa dentro dos parênteses? Se sim, ficaria desse modo ou não mysql_insert_id($insert_tb_teste);? Pera ae, nun entendi! xD Conseguiu descobrir o erro? Então, não precisa colocar nada, o que você tem que fazer é colocá-la logo após o INSERT. Por exemplo: <?php mysql_query("Insert Tabela(Nome, Idade) Values('Tio Sam', 100)"); $Id = mysql_insert_id(); ?> Mas vale lembrar que ele irá retornar o ID do campo que está setado como auto_increment. http://php.net/manual/pt_BR/function.mysql-insert-id.php Compartilhar este post Link para o post Compartilhar em outros sites
KraD 0 Denunciar post Postado Setembro 28, 2012 Pera ae, nun entendi! xD Conseguiu descobrir o erro? Então, não precisa colocar nada, o que você tem que fazer é colocá-la logo após o INSERT. Por exemplo: <?php mysql_query("Insert Tabela(Nome, Idade) Values('Tio Sam', 100)"); $Id = mysql_insert_id(); ?> Mas vale lembrar que ele irá retornar o ID do campo que está setado como auto_increment. http://php.net/manual/pt_BR/function.mysql-insert-id.php Então, pelo que você me explicou coloquei para imprimir o que estava passando no segundo insert, na tabela login. No resultado não estava retornando o select entendeu? Ai testei usando o mysql_insert_id e ta retornando 0, mesmo sendo inserido na tabela corretamente. Compartilhar este post Link para o post Compartilhar em outros sites
KraD 0 Denunciar post Postado Setembro 29, 2012 Consegui resolver. Estava faltando um paramento no INSERT primeiro. Resolvi utilizando o mysql_insert_id() como o amigo falou ;) Compartilhar este post Link para o post Compartilhar em outros sites