Ir para conteúdo

Arquivado

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

mineirodan

Prolema com update, insert e delete em tabelas relacionais

Recommended Posts

Boa tarde toda vez que tento executar o insert em tabela relacionado recebo o erro abaixo, alguem pode me ajudar?



Cannot add or update a child row: a foreign key constraint fails (`akiocs_pabx`.`localidades`, CONSTRAINT `localidades_ibfk_1` FOREIGN KEY (`empresa_id`) REFERENCES `clientes` (`cliente_id`) ON DELETE CASCADE ON UPDATE CASCADE)



A tabela clientes possui empresas cadastradas, as empresas podem ter um ou mais localidades.


Portanto ao cadastrar a localidade faz-se a referencia ao registro da empresa em que essa localidade pertence e armazena este registro no campo empresa_id`.


Compartilhar este post


Link para o post
Compartilhar em outros sites

O campo empresa_id é fk em clientes (pk cliente_id) , está sendo um valor nulo ou que não exste nesta tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Respondendo o Maike, sim eu possuo o id, no momento em que clico na linco cadastrar eu pego o id do cliente.


O campo empresa_id é fk em clientes (pk cliente_id) , está sendo um valor nulo ou que não exste nesta tabela.

 

Ola Motta obrigado pelo resposta, poderia me explicar melhor não entendi direito.

 

Eu pensava que era correto da maneira como eu esteava fazendo.

 

a tabela localidades possui empresa_id como fk, que faz referencia ao cliente_id da tabela clientes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 publique a desc das tabelas

2 publique o insert que deu erro

 

 

Só uma observação , existe alguma trigger nas tabelas ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 publique a desc das tabelas

2 publique o insert que deu erro

 

 

Só uma observação , existe alguma trigger nas tabelas ?!

 

Segue, não existe trigger.

CREATE TABLE IF NOT EXISTS `clientes` (
  `cliente_id` int(5) NOT NULL AUTO_INCREMENT,
  `empresa` varchar(255) NOT NULL,
  `cnpj` varchar(255) NOT NULL,
  `rua` varchar(255) NOT NULL,
  `numero` varchar(255) NOT NULL,
  `bairro` varchar(255) NOT NULL,
  `cep` varchar(255) NOT NULL,
  `cidade` varchar(255) NOT NULL,
  `estado` varchar(255) NOT NULL,
  `responsavel` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `telefone` varchar(255) NOT NULL,
  `telefone1` varchar(255) NOT NULL,
  `telefone2` varchar(255) NOT NULL,
  `telefone3` varchar(255) NOT NULL,
  `data_cadastro` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `data_ultimo_login` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `ativado` enum('0','1') NOT NULL,
  PRIMARY KEY (`cliente_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `localidades` (
  `localidade_id` int(11) NOT NULL AUTO_INCREMENT,
  `empresa_id` int(11) NOT NULL,
  `rua` varchar(100) NOT NULL,
  `numero` varchar(100) NOT NULL,
  `bairro` varchar(100) NOT NULL,
  `cep` varchar(100) NOT NULL,
  `cidade` varchar(100) NOT NULL,
  `estado` varchar(100) NOT NULL,
  `responsavel` varchar(100) NOT NULL,
  `email` varchar(100) NOT NULL,
  `telefone` varchar(100) NOT NULL,
  `telefone1` varchar(100) NOT NULL,
  `telefone2` varchar(100) NOT NULL,
  `telefone3` varchar(100) NOT NULL,
  `rua_pabx` varchar(100) NOT NULL,
  `numero_pabx` varchar(100) NOT NULL,
  `bairro_pabx` varchar(100) NOT NULL,
  `cep_pabx` varchar(100) NOT NULL,
  `cidade_pabx` varchar(100) NOT NULL,
  `responsavel_pabx` varchar(100) NOT NULL,
  `email_pabx` varchar(100) NOT NULL,
  `tel_localidade` varchar(100) NOT NULL,
  `tel_localidade1` varchar(100) NOT NULL,
  `tel_localidade2` varchar(100) NOT NULL,
  `tel_localidade3` varchar(100) NOT NULL,
  `fabricante` varchar(100) NOT NULL,
  `modelo` varchar(100) NOT NULL,
  `capacidade` varchar(100) NOT NULL,
  `ftp` varchar(100) NOT NULL,
  `codigo` varchar(100) NOT NULL,
  `data_cadastro` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `data_ultimo_login` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `ativado` enum('0','1') NOT NULL,
  PRIMARY KEY (`localidade_id`),
  KEY `idcliente` (`empresa_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="shortcut icon" href="../../docs-assets/ico/favicon.png">


        <title>PABX Management</title>


        <!-- Bootstrap core CSS -->
        <link href="css/bootstrap.css" rel="stylesheet">


        <!-- Custom styles for this template -->
        <link href="css/navbar.css" rel="stylesheet">
    </head>
    <body>


        <?php
        include_once("conexao.php");
        $id = $_POST["codigo"];
        $nome = $_POST["nome"];
        $rua = $_POST["rua"];
        $numero = $_POST["numero"];
        $cep = $_POST["zipCode"];
        $bairro = $_POST["bairro"];
        $cidade = $_POST["cidade"];
        $estado = $_POST["estado"];
        $responsavel = $_POST["responsavel"];
        $email = $_POST["email"];
        $telefone = $_POST["phoneNumberBR"];
        $telefone1 = $_POST["telefone1"];
        $telefone2 = $_POST["telefone2"];
        $telefone3 = $_POST["telefone3"];




        /* Vamos checar algum erro nos campos */


        if ((!$responsavel) || (!$email)) {


            echo "ERRO: <br /><br />";
            if (!$responsavel) {


                echo "O nome do Responsável é requerido.<br />";
                echo "<a href ='main.php'> Voltar </a> <br />";
            }


            if (!$email) {


                echo "O email do Responsável é requerido.<br /><br />";
                echo "<a href ='main.php'> Voltar </a> <br />";
            }
        } else {


            /* Vamos checar se o nome de Usuário escolhido e/ou Email já existem no banco de dados */


            $sql_email_check = mysql_query(
                    "SELECT COUNT(localidade_id) FROM localidades WHERE responsavel='{$responsavel}'"
            );


            $sql_responsavel_check = mysql_query(
                    "SELECT COUNT(localidade_id) FROM localidades WHERE email='{$email}'"
            );


            $eReg = mysql_fetch_array($sql_responsavel_check);
            $uReg = mysql_fetch_array($sql_email_check);


            $responsavel_check = $eReg[0];
            $email_check = $uReg[0];


            if (($responsavel_check > 0) || ($email_check > 0)) {


                echo "<strong>ERRO</strong>: <br /><br />";
                if ($responsavel_check > 0) {


                    echo "Este nome de empresa ja existe em nosso banco de dados.<br /><br />";
                    echo "<a href ='main.php'> Voltar </a> <br />";
                    unset($responsavel);
                }


                if ($email_check > 0) {


                    echo "Este nome de usuário já está sendo
                 utilizado.<br /><br />";
                    echo "<a href ='main.php'> Voltar </a> <br />";
                    unset($email);
                }
            } else {




                function makeRandomPassword() {


                    $salt = "abchefghjkmnpqrstuvwxyz0123456789";
                    srand((double) microtime() * 1000000);
                    $i = 0;


                    while ($i <= 7) {
                        $pass = 0;


                        $num = rand() % 33;
                        $tmp = substr($salt, $num, 1);
                        $pass = $pass . $tmp;
                        $i++;
                    }


                    return $pass;
                }


                $senha_randomica = makeRandomPassword();
                $senha = md5($senha_randomica);




                $sql = mysql_query(
                        "INSERT INTO localidades
              (empresa_id, rua, numero, bairro, cep, cidade, estado, responsavel, email, telefone, telefone1, telefone2, telefone3, data_cadastro)


                VALUES
                ('$id', '$rua', '$numero', '$bairro', '$cep', '$cidade', '$estado', '$responsavel', '$email', '$telefone', 
                '$telefone1', '$telefone2', '$telefone3', now())") or die(mysql_error());




                if (!$sql) {
                    echo "Ocorreu um erro ao criar sua conta, entre em contato.<br />";
                    echo "<a href ='main.php'> Voltar </a> <br />";
                } else {


                    echo "Cadastro Efetuado com sucesso!<br />";
                    echo "<a href ='main.php'> Voltar </a> <br />";
                }
            }
        }
        ?>         

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara ta testando isso em localhost? qual o servidor instalado?


Vc está violando uma chave estrangeira na tabela na qual vc tá dando o insert.

Suponha que vc tenha uma tabela A e nela tenha um campo X que é chave estrangeira da tabela B. Isso significa que o valor do campo X tem que estar presente em algum registro na tabela B.

Por exemplo, suponha que vc tenha uma tabela de alunos, uma tabela de matérias e uma tabela de turmas.

na tabela de turmas tem o código da turma, o código do aluno (FK da tabela de alunos) e o código da matéria (FK da tabela de matérias).

se vc inserir na tabela de turmas um código de matéria que nào exista na tabela de matérias, ele vai dar violaçao de foreign key

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim,

 

No meu caso a tabela clientes possui empresas cadastradas, cada empresa pode ter uma ou mais localidades.

 

Então quando eu cadastro a localidade eu faço referencia a empresa que ela pertence.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique se o conteudo de

 

$id = $_POST["codigo"];

 

Existe na tabela de clientes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique se o conteudo de

 

$id = $_POST["codigo"];

 

Existe na tabela de clientes.

 

Sim existe,

 

Obrigado a todos pela ajuda, o problema era no formulário.

 

Me esqueci de armazenar o código na variável.

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.