Ir ao conteúdo

PHP Insert chave estrangeira (FK)


Ir à solução Resolvido por gramosiri,

Posts recomendados

Postado

Ola, estou com uma duvida sobre como inserir os dados em um formulario, onde eu busco o nome do cargo e quero salvar este cargo na tabela funcionario.

Como fazer o insert com a chave estrangeira?

290567143_Semttulo.png.bd52a08b9dc222dd82021a12b8787e1e.png

 

A pagina do formulario esta buscando os cargos corretamente, porém nao estou sabendo como associar o cargo_id(FK) da tabela Funcionario com o id_cargo(PK) da tabela Cargo

1568751239_Semttulo.png.308f3118d5d5b7e4015fb6ae9aea2ce2.png

  • Moderador
Postado

@gramosiri Onde exatamente está a sua dúvida?  No PHP ou na modelagem do banco de dados?

 

Pelo que eu vi na imagem do seu banco, está certo. você tem uma tabela de cargo e conecta com a tabela funcionario.

Veja se se a tabela funcionário tem um índice(indexes)  para o campo cargo_id e este campo esteja definido como INDEX.

 

Então no seu formulário, está aparecendo o nome do cargo, mas o que você tem que passar no form e o value deste campo, ou seja, o valor ID da chave primária da tabela cargo.

 

 

  • Curtir 1
Postado

@DiF Oi, a dúvida está na query, estou passando o cargo_id no INSERT da query porém ele não retorna nenhum valor no banco. Estou no trabalho, daqui a pouco posto o código caso precise para ficar mais claro.

  • Curtir 1
  • Moderador
Postado

@gramosiri Sim, você precisa postar o código.  Senão não irei entender a sua dúvida.

Mas como eu disse, se você não tiver seu banco modelado e relacionamentos de forma correta, a query não irá funcionar.

Posta o código php.

Postado

@DiF Segue o codigo

 

processa_func.php

<?php 

include 'db.php';

$nome= $_POST['nome'];
$cpf = $_POST['cpf'];
$rg = $_POST['rg'];
$data_entrada = $_POST['data_entrada'];
$data_saida = $_POST['data_saida'];
$status = $_POST['status'];
$cargo_id = $_POST['cargo_id'];

$query = "INSERT INTO FUNCIONARIO(nome, cpf, rg, data_entrada, data_saida, status, cargo_id) VALUES('$nome','$cpf','$rg','$data_entrada','$data_saida','$status', '$cargo_id')";

mysqli_query($conexao, $query);

inserir_funcionario.php

<h1>Inserir novo funcionário</h1>
<form method="post" action="processa_func.php">
	<br>
	<label class="badge badge-secondary">Nome funcionário: *</label><br>
	<input class="form-control" type="text" name="nome" placeholder="Insira o nome do funcionario">
	<br><br>
	<label class="badge badge-secondary">CPF:</label><br>
	<input class="form-control" type="text" name="cpf" placeholder="Insira o CPF"><br><br>
	<label class="badge badge-secondary">RG:</label><br>
	<input class="form-control" type="text" name="rg" placeholder="Insira o RG"><br><br>
	<label class="badge badge-secondary">Cargo:</label><br>
	<select class="form-control">
		<?php 
		while($linha = mysqli_fetch_array($consulta_cargo)){
			echo '<option name="cargo_id" id="cargo_id" value="'.$linha['id_cargo'].'">'.$linha['nome_cargo'].'</option>';
		}
		?>
</select><br><br>

No caso no inserir_funcionario.php tem o fetch_array que busca o cargo pelo id_cargo. porém como associar o id_cargo com o cargo_id da tabela funcionario, essa é a duvida...

  • Moderador
Postado

@gramosiri Então, aparentemente seu código está certo. 

A única coisa errada ali é que você colocou um ID no option dentro do while. Lembre que ID não pode ser repetida. No caso altere para "class" .

 

Mas o seu problema, provavelmente não está no código php. Mas sim na sua modelagem do banco.

E é exatamente aquilo que mencionei. você não fez o relacionamento de 1:N de forma correta... O mysql workbench as vezes não registra os índices e ainda não define o método de como a tabela relacionada vai se comportar em relação a outra no caso de uma exclusão de um dado.

 

Basicamente, suas tabelas precisa ser do tipo  innoDB.   O padrão que myISAM.

Depois precisa criar um índice na tabela que será a mandante da consulta. No seu caso funcionario.

Este índice, faz o relacionamento do campo. então tens que selecionar o campo que vai ser a chave estrangeira e deixa-la do tipo INDEX.  com isso, você faz a relação da chave primária com a estrangeira e definindo as ações com ON CASCADE, para que um sera removido, caso outro dependente seja.. assim elimina inconsistências.

 

Deixo aqui um vídeo que gravei faz muito tempo de como criar relacionamentos com o phpmyadmin e eu mostro exatamente isso.

 

 

 

Se seguir os passos dos vídeos... você vai conseguir.

  • Curtir 1
Postado

@DiF Ótimo vídeo, porém o seu video mostra como faz uma listagem utilizando a chave estrangeira, se eu adicionar direto no banco, pelo phpmyadm tambem consigo listar a relação entre os dados, o problema é na inserção dos dados pelo formulario e provavelmente na query, isso que não estou sabendo fazer... Na pagina de inserir os funcionarios esta puxando informações de outra tabela, a relação entre as tabelas no insert que nao estou sabendo a logica rsrs

  • Solução
Postado

@DiF Cara, consegui fazer funcionar, olha a hora! rsrs Enfim, troquei a linha do while:

 

<?php 
		while($linha = mysqli_fetch_array($consulta_cargo)){
			echo '<option name="cargo_id" id="cargo_id" value="'.$linha['id_cargo'].'">'.$linha['nome_cargo'].'</option>';
		}
		?>

Por essa:

        <?php 
        while($linha = mysqli_fetch_array($consulta_cargo)){
      echo '<option value="'.$linha['id_cargo'].'">'.$linha['nome_cargo'].'</option>';
        }
        ?>

Dai coloquei o name="cargo_id" dentro do select:

    <select class="form-control" name="cargo_id">

Falta de atenção, mas obrigado pela ajuda, desculpe o incomodo.

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!