Lady01 0 Denunciar post Postado Dezembro 19, 2013 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
xurissoooo 10 Denunciar post Postado Dezembro 19, 2013 Você falou que esta tendando via PHP, mas conseguiu criar manualmente pelo banco de dados para ver se permite? Compartilhar este post Link para o post Compartilhar em outros sites
Lady01 0 Denunciar post Postado Dezembro 19, 2013 Pelo banco eu consigo sim :S Compartilhar este post Link para o post Compartilhar em outros sites
xurissoooo 10 Denunciar post Postado Dezembro 19, 2013 Cade o seu codigo php? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Dezembro 19, 2013 Existe a listadecasamento com o id = 1 ? Compartilhar este post Link para o post Compartilhar em outros sites
xurissoooo 10 Denunciar post Postado Dezembro 19, 2013 Tenta com UPDATE em vez de INSERT pra ve se não ta rateando com dados repetidos ou algo do tipo Compartilhar este post Link para o post Compartilhar em outros sites
Lady01 0 Denunciar post Postado Dezembro 19, 2013 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
xurissoooo 10 Denunciar post Postado Dezembro 20, 2013 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
Lady01 0 Denunciar post Postado Dezembro 20, 2013 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
xurissoooo 10 Denunciar post Postado Dezembro 20, 2013 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
Fernando C 128 Denunciar post Postado Dezembro 20, 2013 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
Lady01 0 Denunciar post Postado Dezembro 20, 2013 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
Fernando C 128 Denunciar post Postado Dezembro 23, 2013 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