Jump to content
AngeloLopes

[Resolvido] Erro ao executar query (foreign key constraint fails)

Recommended Posts

AngeloLopes

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 by brunoais
formatação melhorada.

Share this post


Link to post
Share on other sites
nelsonr

Estás a preencher o campo ID_IdentificacaoGabinete? Com um ID existente na tabela de sala?

Share this post


Link to post
Share on other sites
AngeloLopes

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 :(

Share this post


Link to post
Share on other sites
nelsonr

Então o melhor é ires por partes.

Consegues ver exatamente qual o comando que está a ser executado na base de dados?

Share this post


Link to post
Share on other sites
AngeloLopes

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);
			 }
	 ?>

Share this post


Link to post
Share on other sites
nelsonr

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

  • Vote 1

Share this post


Link to post
Share on other sites
AngeloLopes

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 ;)

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
nelsonr

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)

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.