How to insert data into two tables related to each other by foreign key at the same time?

Asked

Viewed 81 times

-1

I could use a hand with that. I’m trying to input data into the database using two tables related to Foreign key, but I can’t do it when there are more than two tables. I even managed to do it with two, but putting a third, I’m not getting it. I’ll show the codes:

FORM

<?php include "pagina-ini.php"; ?>

<form class="form-signin" id="fale_conosco" name="fale_conosco" action="form_grupo_estudo_proc.php" method="post">
<h3>Formulário de inscrição para os Grupos de Estudo</h3>

<br>
<div class="row">
 <div class="col-12">

  Grupo de Estudo:
  </div>
  </div>
  <div class="row">
  <div class="col-12">
  <select class="form-control text-uppercase npi" name="nome_grupo" id="nome_grupo">
            <option value=""></option>
            <option value="grupo1">Aspectos atuais do Direito do Consumidor</option>
            <option value="grupo2">Bioética e Biodireito IV</option>
            <option value="grupo4">Direito Civil e proteção dos vulneráveis</option>
            <option value="grupo5">Minorias e Grupos Vulneráveis</option>
            <option value="grupo6">Processo penal contemporâneo</option>
            <option value="grupo7">Projeto Diálogos Fundamentais</option>
            <option value="grupo8">Raízes da desigualdade à luz da literatura</option>

            

        </select>
  </div>
  </div>
  <br>
  <div class="row">
  <div class="col-12">

  Nome:
 </div>
</div>
<div class="row">
 <div class="col-12">
  <input class="form-control text-uppercase npi" type="text" id="txt_nome" name="nome" maxLength="48" required>
 </div>
</div>
<br>
<div class="row">
 <div class="col-12">

  E-mail:
 </div>
</div>
<div class="row">
 <div class="col-12">
  <input class="form-control text-lowercase npi" type="text" id="txt_email" name="email" maxLength="48" required pattern="[^@]+@[^@]+\.[a-zA-Z]{2,6}">
 </div>
</div>
<br>
<div class="row">
 <div class="col-12">

 Celular:
 </div>
</div>
<div class="row">
 <div class="col-12">
  <input class="form-control text-lowercase npi" type="text" id="celular" name="celular" maxLength="11"  pattern="^\([1-9]{2}\) (?:[2-8]|9[1-9])[0-9]{3}\-[0-9]{4}$" required>
 </div>
</div>
<br>
<div class="row">
 <div class="col-12">

 Período Letivo:
  </div>
  </div>
  <div class="row">
  <div class="col-12">
  <select class="form-control text-uppercase npi" name="periodo_letivo" id="periodo_letivo">
            <option value=""></option>
            <option value="periodo1">2021/1</option>
            <option value="periodo2">2021/2</option>
  </select>
  </div>
  </div>
  <br>
  <div class="row">
  <div class="col-12">

 Matrícula:
 </div>
</div>
<div class="row">
 <div class="col-12">
  <input class="form-control text-lowercase npi" type="text" id="matricula" name="matricula" maxLength="5"  pattern="^\[0-9]\" required>
 </div>
</div>
<br>
<div class="row">
 <div class="col-12">

 Situação:
  </div>
  </div>
  <div class="row">
  <div class="col-12">
  <select class="form-control text-uppercase npi" name="situacao" id="situacao">
            <option value=""></option>
            <option value="ativo">Ativo</option>
            <option value="inativo">Inativo</option>
        </select>
  </div>
  </div>
  <br>
  <div class="row">
  <div class="col-12">

 <br>
<img src="lib/captcha.php?l=150&a=50&tf=20&ql=5">
<br>

<!--
  Digite os caracteres da imagem
 </div>
</div>
<div class="row">
 <div class="col-12">
  <input class="form-control npi" type="text" id="txt_captcha" name="txt_captcha" maxLength="5" required>
 </div>
</div>
-->

<br>
<button class="btn btn-primary" type="submit" id="but_enviar" name="but_enviar" value="Enviar">Enviar</button>
</form>

<?php include "pagina-ter.php"; ?>

<?php
/*
include "lib/html.php";

page_begin("fale_conosco", "fale_conosco_proc.php");
p_begin("");

div_begin("", "align=center");
img("img/logo_fale_conosco.jpg", "border=0");
br();
label("FALE CONOSCO", true);
div_end();
br();
label("Telefone: 31 3769-1919", false);
br();
br();
label("Ramais:", false);
br();
label("1. Diretoria", false);
br();
label("2. Secretaria", false);
br();
label("3. Financeiro", false);
br();
label("4. Biblioteca", false);
br();
label("5. Coordena��o de Curso", false);
//br();
//label("6. N�cleo de Extens�o e Pesquisa", false);
br();
label("7. TI", false);
br();
label("8. Patrim�nio", false);
br();
label("9. Procuradora Institucional", false);
br();
br();
label("Nome", false);
br();
text("txt_nome", 48, 94, "u", false, "", "", "");
br();
br();
label("E-mail", false);
br();
text("txt_email", 48, 94, "l", false, "", "", "");
br();
br();
label("Assunto", false);
br();
text("txt_assunto", 48, 94, "u", false, "", "", "");
br();
br();
label("Mensagem", false);
br();
text_area("txta_mensagem", 16, 72, false, "", "");
br();
br();
img("lib/captcha.php?l=150&a=50&tf=20&ql=5", "");
br();
label("Digite os caracteres da imagem", false);
br();
text("txt_captcha", 5, 20, "", false, "", "", "");
br();
br();
but_submit("but_enviar", "Enviar");
but_reset("but_limpar", "Limpar");

p_end();
page_end();
*/
?>

SQL

CREATE TABLE grupos_estudo_inscricoes (
  codigo int(11) NOT NULL AUTO_INCREMENT,
  nome varchar(60) NOT NULL,
  email varchar(48) NOT NULL,
  celular varchar(13) NOT NULL,
  matricula varchar(13) NOT NULL,
  primary key (codigo)
);

CREATE TABLE grupos_estudo (
  codigo_grupos int(11) NOT NULL AUTO_INCREMENT,
  nome_grupo varchar(60) NOT NULL,
  cod_grupos_estudo_insc int(11) NOT NULL,
    primary key (codigo_grupos),
    FOREIGN KEY(cod_grupos_estudo_insc) REFERENCES grupos_estudo_inscricoes(codigo)
);

CREATE TABLE grupos_estudo_sistema (
  codigo_sistema int(11) NOT NULL AUTO_INCREMENT,
  periodo_letivo varchar(7) NOT NULL,
  situacao varchar(8) NOT NULL,
  cod_grupos_sistema int(11) not null,
  primary key (codigo_sistema),
  FOREIGN KEY(cod_grupos_sistema) REFERENCES grupos_estudo_inscricoes(codigo)

); 

FILE THAT RECEIVES THE FORM DATA AND INSERTS THE DATA INTO THE DATABASE

<?php

session_start();

include "bd.php";
//include "lib/util.php";
//include "../lib/phpmailer/phpmailer.php";

if ($_POST["but_enviar"] != "")
{
 $gravar = true;

 if ($_POST["nome"] == "")
 {
  $gravar = false;
  window_alert("Nome inv�lido(a) !");
  history_back();
 }

 if ($_POST["email"] == "")
 {
  $gravar = false;
  window_alert("E-mail inv�lido(a) !");
  history_back();
 }

 
 if ($_POST["nome_grupo"] == "")
 {
  $gravar = false;
  window_alert("Escolha de grupo obrigatória!");
  history_back();
 }


 if ($_POST["celular"] == "")
 {
  $gravar = false;
  window_alert("Telefone inválido!");
  history_back();
 }

 if ($_POST["matricula"] == "")
 {
  $gravar = false;
  window_alert("Matrícula inválida!");
  history_back();
 }

 if ($_POST["situacao"] == "")
 {
  $gravar = false;
  window_alert("Situação deve ser escolhida!");
  history_back();
 }
 
 /*
 if (($_POST["txt_captcha"] == "") || ($_POST["txt_captcha"] != $_SESSION["u_captcha"]))
 {
  $gravar = false;
  window_alert("Caracteres inv�lidos !");
  history_back();
 }
 
 if ($gravar == true)
 {
  $dr = dt_date();
  $hr = dt_time();
*/
  
   // Dados do formulário
  $grupos = $_POST['nome_grupo'];
  $nome = $_POST['nome'];
  $email = $_POST['email'];
  $celular = $_POST['celular'];
  $periodo_letivo = $_POST['periodo_letivo'];
  $matricula = $_POST['matricula'];
  $situacao = $_POST['situacao'];



  $query = "INSERT INTO grupos_estudo_inscricoes(nome,  email,  celular,    matricula) VALUES($nome', '$email', '$celular', '$matricula')";
  mysqli_query($con, $query);
  $grupos_estudo_inscricoes = mysqli_insert_id($con);

  $query = "INSERT INTO grupos_estudo(nome_grupo, cod_grupos_estudo_insc) VALUES('$grupos','$grupos_estudo_inscricoes')";
  mysqli_query($con, $query);
  $grupos_estudo = mysqli_insert_id($con);

  $query = "INSERT INTO grupos_estudo_sistema( periodo_letivo,  situacao, cod_grupos_sistema) VALUES('$periodo_letivo', '$situacao', '$grupos_estudo' )";
  mysqli_query($con, $query);

/*
if(!$con){
  echo "não conectou com o banco<br>";
} else{
  echo "conexão feita e ";
}

if($query){
  echo "gravou ";
}else{
  echo "não gravou";
}
*/

  }
 

?>

Well, if I’m confused, I send a picture. I thank you in advance for the help.

1 answer

0

You are inserting cod_grupos_sistema with the value of $grupos_estudo, and your relationship is between FOREIGN KEY(cod_grupos_sistema) REFERENCES grupos_estudo_inscricoes(codigo)


  $query = "INSERT INTO grupos_estudo_inscricoes(nome,  email,  celular,    matricula) 
  VALUES($nome', '$email', '$celular', '$matricula')";
  mysqli_query($con, $query);
  $grupos_estudo_inscricoes = mysqli_insert_id($con);

  // FOREIGN KEY(cod_grupos_estudo_insc) REFERENCES grupos_estudo_inscricoes(codigo)

  $query = "INSERT INTO grupos_estudo(nome_grupo, cod_grupos_estudo_insc) 
  VALUES('$grupos','$grupos_estudo_inscricoes')";
  mysqli_query($con, $query);
  $grupos_estudo = mysqli_insert_id($con);

  // FOREIGN KEY(cod_grupos_sistema) REFERENCES grupos_estudo_inscricoes(codigo)

  $query = "INSERT INTO grupos_estudo_sistema( periodo_letivo,  situacao, cod_grupos_sistema) 
  VALUES('$periodo_letivo', '$situacao', '$grupos_estudo' )";
  mysqli_query($con, $query);

The cod_grupos_estudo_insc and the cod_grupos_sistema refer to the grupos_estudo_inscricoes(codigo). But in his second INSERT, you are using the $grupos_estudo instead of $grupos_estudo_inscricoes.

Anyway, to solve it, it seems you should use:

 $query = "INSERT INTO grupos_estudo_inscricoes(nome,  email,  celular,    matricula) VALUES($nome', '$email', '$celular', '$matricula')";
  mysqli_query($con, $query);
  $grupos_estudo_inscricoes = mysqli_insert_id($con);

  $query = "INSERT INTO grupos_estudo(nome_grupo, cod_grupos_estudo_insc) VALUES('$grupos','$grupos_estudo_inscricoes')";
  mysqli_query($con, $query);
  $grupos_estudo = mysqli_insert_id($con);

  $query = "INSERT INTO grupos_estudo_sistema( periodo_letivo,  situacao, cod_grupos_sistema) VALUES('$periodo_letivo', '$situacao', '$grupos_estudo_inscricoes' )";
  mysqli_query($con, $query);
  • PS: I recommend using TRANSACTION, https://dev.mysql.com/doc/refman/8.0/en/commit.html. So if an insertion fails, they are all undone.

  • I think I get it. I’ll try again here. Thanks for the tip.

  • I tried here and did not record the data in the database. I think I had already done this way that spoke and changed to the one I posted here. 'Cause as I posted here, I’m getting the wrong id, that’s not it?

  • From what I saw of the code, that was the problem. You can use https://www.php.net/manualen/mysqli.error.phpto know the exact error.

  • I’ll check here. Thanks again.

  • The connection works. Just do not save the data in the database.

  • The mysqli_error returns the last error, put a printf("%s \n", mysqli_query($con)), so you’ll see the error message.

  • Friend, I found this error: Errormessage: Cannot add or update a Child Row: a Foreign key Constraint fails (grupos_estudos.grupos_estudo_sistema, CONSTRAINT grupos_estudo_sistema_ibfk_1 FOREIGN KEY (cod_grupos_sistema) REFERENCES grupos_estudo_inscricoes (codigo))

Show 3 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.