AngeloLopes Posted July 31, 2013 at 03:07 PM Report #520514 Posted July 31, 2013 at 03:07 PM (edited) Estou a desenvolver um site, e estou com um problema, dá-me este erro quando tento inserir um formulário: Error: Cannot add or update a child row: a foreign key constraint fails (`gesinf`.`tomadas`, CONSTRAINT `tomadasala` FOREIGN KEY (`ID_IdentificacaoGabinete`) REFERENCES `sala` (`ID_IdentificacaoGabinete`) ON DELETE NO ACTION ON UPDATE NO ACTION) Alguém sabe o que é? Edited August 1, 2013 at 01:02 PM by brunoais formatação melhorada.
nelsonr Posted July 31, 2013 at 03:10 PM Report #520516 Posted July 31, 2013 at 03:10 PM Estás a preencher o campo ID_IdentificacaoGabinete? Com um ID existente na tabela de sala?
AngeloLopes Posted July 31, 2013 at 03:14 PM Author Report #520517 Posted July 31, 2013 at 03:14 PM Sim estou acho :/ Do genero eu estou a apresentar o ID_IdentificacaioGabinete numa combobox, e eu quando abro a pagina ele apresenta, os valores respetivos, mas quando meto adicionar ele dame este erro no entanto, pode ser de uma coisa que eu reparei, e que eu eliminei as chaves estrangeiras para fazer um teste e ha dois campos do forum que nao inserem na base de dados todos os caracteres que inseri no furmolario, por exemplo se escolheres na combobox IdentificacaoGabinete o valor "009" ele so insere o "00" e deixa de fora o "9", se calhar e por isso que depois da erro quando tem chave estrangeira, mas nao sei o porque de ele estar a fazer isso 😞
nelsonr Posted July 31, 2013 at 03:21 PM Report #520518 Posted July 31, 2013 at 03:21 PM Então o melhor é ires por partes. Consegues ver exatamente qual o comando que está a ser executado na base de dados?
AngeloLopes Posted July 31, 2013 at 03:25 PM Author Report #520520 Posted July 31, 2013 at 03:25 PM E um insert : exactamente este aqui: <?php if(isset($_POST['idsala']) && isset($_POST['estadotomada'])) { $con=mysqli_connect("127.0.0.1","root","","gesinf"); // Check connection if (mysqli_connect_errno()) { echo "erro de ligação!"; } $sql="INSERT INTO tomadas (Designacao, ID_IdentificacaoGabinete, ID_Estado, NTelefone, Observacoes)VALUES(' $_POST[DesignacaoTomada]',' $_POST[idsala]','$_POST[estadotomada]','$_POST[telefone]','$_POST[observacoes]')"; if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); } echo "Registado com sucesso!"; mysqli_close($con); } ?>
nelsonr Posted July 31, 2013 at 03:28 PM Report #520522 Posted July 31, 2013 at 03:28 PM Estava era a referir se conseguias mostrar o conteúdo desse insert Só para testes, coloca lá na linha a seguir ao $sql=... die($sql); E mostra o que está na variavel 1 Report
AngeloLopes Posted July 31, 2013 at 03:36 PM Author Report #520523 Posted July 31, 2013 at 03:36 PM Mostra isto: INSERT INTO tomadas (Designacao, ID_IdentificacaoGabinete, ID_Estado, NTelefone, Observacoes)VALUES(' 555V',' 009','2','1234','ASFASF') Okay ja entendi o erro 😉 O erro e que ele esta a dar um espaço antes do que insere, isso vai fazer com que o o valor seja " 555V" e " 009" ou seja como o espaço tambem é um caracter e na bd so deixa meter 3 caracteres, entao ele corta o ultimo por isso e que ele nao estava a relacionar com a tabela anterior, a resolução foi nesta linha : $sql="INSERT INTO tomadas (Designacao, ID_IdentificacaoGabinete, ID_Estado, NTelefone, Observacoes)VALUES(' $_POST[DesignacaoTomada]',' $_POST[idsala]','$_POST[estadotomada]','$_POST[telefone]','$_POST[observacoes]')"; fazer isto : $sql="INSERT INTO tomadas (Designacao, ID_IdentificacaoGabinete, ID_Estado, NTelefone, Observacoes)VALUES('$_POST[DesignacaoTomada]','$_POST[idsala]','$_POST[estadotomada]','$_POST[telefone]','$_POST[observacoes]')"; Ou seja tirar os espaçoes antes dos dois primeiros Posts, Obrigado Nelson por me teres explicado mais um comando para ver os erros, ja que isto nao faz debug xD o que facilitaria muito mais 😉
nelsonr Posted July 31, 2013 at 03:38 PM Report #520524 Posted July 31, 2013 at 03:38 PM Esse ID_IdentificacaoGabinete é de que tipo? Na tabela sala tens algum registo com o campo ID_IdentificacaoGabinete com ' 009' ? (atenção ao espaço antes do 009)
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now