Ir para conteúdo

POWERED BY:

Arquivado

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

Lady01

Erro em inserção de registro

Recommended Posts

Estou tentando inserir registros numa tabela chamada itemlistadecasamento, via php, mas estou com um erro que não me permite fazer isso:

 

INSERT INTO itemlistadecasamento VALUES( NULL, 1, 19, 1, 800.00 )Cannot add or update a child row: a foreign key constraint fails (`eletrodomesticos`.`itemlistadecasamento`, CONSTRAINT `fk_id_listadecasamento` FOREIGN KEY (`idListadeCasamento`) REFERENCES `listadecasamento` (`id`))

 

Já apaguei as constrainsts e criei novas, já apaguei a própria tabela, já pesquisei bastante, mas não consegui uma solução.

 

Dei "show create table itemlistadecasamento" e não identifiquei nada de errado:

CREATE TABLE `itemlistadecasamento` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`idListadeCasamento` int(11) DEFAULT NULL,
`idProduto` int(11) DEFAULT NULL,
`preco` double DEFAULT NULL,
`quantidade` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_id_listadecasamento` (`idListadeCasamento`),
KEY `fk_id_produto` (`idProduto`),
CONSTRAINT `fk_id_listadecasamento` FOREIGN KEY (`idListadeCasamento`) REFERENCES `listadecasamento` (`id`),
CONSTRAINT `fk_id_produto` FOREIGN KEY (`idProduto`) REFERENCES `produto` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

 

Também dei em listadecasamento:

CREATE TABLE `listadecasamento` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`idCliente` int(11) DEFAULT NULL,
`endereco` varchar(45) DEFAULT NULL,
`local` varchar(45) DEFAULT NULL,
`cidade` varchar(45) DEFAULT NULL,
`estado` varchar(45) DEFAULT NULL,
`conjuge` varchar(45) DEFAULT NULL,
`data` date DEFAULT NULL,
`status` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_idCliente` (`idCliente`),
CONSTRAINT `fk_idCliente` FOREIGN KEY (`idCliente`) REFERENCES `cliente` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1

 

Alguém pode me dar uma ajuda?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O meu código é esse aqui:

 

public function inserir($listadeCasamento)
{
$idCliente=$listadeCasamento->getIdCliente();
$conjuge=$listadeCasamento->getConjuge();
$data = $listadeCasamento->getData();
$endereco=$listadeCasamento->getEndereco();
$local=$listadeCasamento->getLocal();
$cidade=$listadeCasamento->getCidade();
$estado = $listadeCasamento->getEstado();
$data=$listadeCasamento->getData();
$status = $listadeCasamento->getStatus();
$errolista=0;
$sqlLista="insert into listadeCasamento (id, idCliente, endereco, local, cidade, estado, conjuge, data, status) values (NULL, $idCliente,'$endereco', '$local','$cidade','$estado', '$conjuge', '$data', '$status')";
$this->conecta();
//mysql_query("SET AUTOCOMMIT=0");
//mysql_query("START TRANSACTION");
$insertLista=mysql_query($sqlLista) or die (mysql_error());
if( !$insertLista )
{ $errolista++;
echo '<script> alert("Erro ao inserir Lista de casamento!") </script>';
return false;
}
else
{
$sqlConsulta = "SELECT MAX(id) as id FROM listadecasamento";
$queryConsulta=mysql_query($sqlConsulta);
$idLista = mysql_fetch_object( $queryConsulta )->id;
$erroItens = 0;
foreach( $_SESSION['produto'] as $cod=>$produto )
{
$insereItens="INSERT INTO itemlistadecasamento VALUES(
NULL,
". $cod .",
". $idLista .",
". $produto['qtde'] .",
". number_format($produto['valor'], 2) ."
)";
echo $insereItens;
$qryItem=mysql_query($insereItens) or die (mysql_error());
if( $qryItem )
{
echo "sucesso";
}
else {
$erroItens++; // se eero ao cadastrar itens
}
}
if( $errolista || $erroItens )
{
//mysql_query("ROLLBACK");
echo "desfez";
echo '<script> alert("Erro ao inserir itens na lista de casamento!") </script>';
return false;
}
else
{
mysql_query("COMMIT");
$this->desconecta();
unset($_SESSION['produto']);
unset($_SESSION['cliente']) ;
return true;
}
}
}
Ele cadastra a lista de casamento, mas não os itens.
Motta, o id 1 é do itemlistadecasamento e não da lista, reparei que quando cadastrei o item pelo banco, ele ficou com id 2, mas depois disso tentei pelo php e continua tentando cadastrar com id 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao serve AUTO INCREMENT no ID ?

 

Caso você possa usar auto increment no ID (automatico dar um id), utilize ele assim voce nao vai ter problemas com id sequencial, 1 , 2 , 3

 

E não esqueça de retirar a inserção de ID no codigo PHP

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu já uso auto_increment em todas as tabelas.

A inserção de id no código é referente a chaves estrangeiras e não primárias(que são auto increment)

Compartilhar este post


Link para o post
Compartilhar em outros sites

E dai, coloca auto increment em todos id primario ou estrangeiro, por que só os primarios ?

 

Se tu for se referir a um ID, vai de UPDATE e não INSERT

 

ID tem que ser inserido automatico



Até por que se parar pra pensar, você não conseguiu adicionar direto pelo banco de dados, então o erro nem é de php.

 

Pois você nao conseguiu inserir o ID 1,

 

Ta vendo, ta com problema inserir este ID, mas o ID 2 você consegue.

 

Pra que quebrar a cabeça com numeros 1, 2, 3, 4, ETC usando INSERT

 

 

Qualquer coisa posta la no Forum de Banco de Dados que é o mais correto e vão lhe explicar um pouco melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tentando inserir registros numa tabela chamada itemlistadecasamento

 

se entendi bem, a tabela é essa:

 `id` int(11) NOT NULL AUTO_INCREMENT,
 `idListadeCasamento` int(11) DEFAULT NULL,
 `idProduto` int(11) DEFAULT NULL,
 `preco` double DEFAULT NULL,
 `quantidade` int(11) DEFAULT NULL,

mas observe a sql:

INSERT INTO itemlistadecasamento
VALUES(NULL,". $cod .",". $idLista .",
". $produto['qtde'] .",
". number_format($produto['valor'], 2) ."
)";

tente relacionar corretamente as colunas com as variáveis

(preço e quantidade, por exemplo, parecem estar invertidas)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gente,

Agradeço a todos.

Consegui resolver, o problema era de campos invertidos, como o Fernando C apontou, não eram só os campos que ele tinha dito, eram os ids de produto e de lista também que estavam invertidos.

Eu estou programando este sistema sozinha, então minha vista fica "viciada" para achar erros assim, é sempre bom outra pessoa olhar.

Obrigada mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não eram só os campos que ele tinha dito

 

claro que não, na verdade eu disse:

 

por exemplo

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.