Insert with two tables

Asked

Viewed 118 times

0

Follow my code, first query with information from student table. Second query with information from pay schedule.

In my register, I have the information of students and payments together. I want to register the two tables at the same time.

<?php

    class Alunos 
    {
     /* 
     * class cadastrar()
     * Realiza o cadastro dos alunos
     */

     public function 
     cadastrar($nome,$rg,$cpf,$nascimento,$sexo,$fone,$email,
     $endereco,$bairro,$cidade,$estado,$cep)
            {

                global $pdo;

                $sql = $pdo->prepare("insert into alunos set nome=:nome, rg=:rg, 
                cpf=:cpf, nascimento=:nascimento, sexo=:sexo,
                fone=:fone, email=:email, endereco=:endereco,
                bairro=:bairro, cidade=:cidade, estado=:estado, cep=:cep");

                $sql->bindValue(":nome", $nome);
                $sql->bindValue(":rg", $rg);
                $sql->bindValue(":cpf", $cpf);
                $sql->bindValue(":nascimento", $nascimento);
                $sql->bindValue(":sexo", $sexo);
                $sql->bindValue(":fone", $fone);
                $sql->bindValue(":email", $email);
                $sql->bindValue(":endereco", $endereco);
                $sql->bindValue(":bairro", $bairro);
                $sql->bindValue(":cidade", $cidade);
                $sql->bindValue(":estado", $estado);
                $sql->bindValue(":cep", $cep);
                $sql->execute();

            }

     /*
     * class pagamentos()
     * Realiza o cadastro dos alunos
     */

       public function pagamentos($situacao_aluno,$vencimento_plano,
       $planos,$vencimento,$cpf_amigo,$forma_pagamento,$data_matricula,
       $numero_documento,$data_documento,$valor)
       {

      global $pdo; 
      $sql = $pdo->prepare("insert into pagamentos set 
      situacao_aluno=:situacao_aluno, vencimento_plano=:vencimento_plano, 
      planos=:planos, vencimento=:vencimento, cpf_amigo=:cpf_amigo, 
      forma_pagamento=:forma_pagamento, data_matricula=:data_matricula, 
      numero_documento=:numero_documento, data_documento=:data_documento, 
      valor=:valor");

        $sql->bindValue(":situacao_aluno", $situacao_aluno);
        $sql->bindValue(":vencimento_plano", $vencimento_plano);
        $sql->bindValue(":planos", $planos);
        $sql->bindValue(":vencimento", $vencimento);
        $sql->bindValue(":cpf_amigo", $cpf_amigo);
        $sql->bindValue(":forma_pagamento", $forma_pagamento);
        $sql->bindValue(":data_matricula", $data_matricula);
        $sql->bindValue(":numero_documento", $numero_documento);
        $sql->bindValue(":data_documento", $data_documento);
        $sql->bindValue(":valor", $valor);
        $sql->execute();

           }

I know there are functions last_insert_id();, mysql_insert_id(); and mysqli_insert_id(); but I don’t know how to apply in my obj-oriented code.

  • I haven’t used PHP for a long time, but I think Voce recovers the id with something like $sql->lastInsertId() after execute, and uses it as a parameter for next.. I don’t know if I got your question right.

2 answers

1

It was unclear if the table payments possesses a key Foreign of the student, by Insert does not seem to have, but may be the student situation?

First you change the function register to return the id this way using that:

public function cadastrar(/* parâmetros */)
{
    // faz a tua lógica de inserção

    return $pdo->lastInsertId();
}

Second change is in the place where this function is called, you must do something more or less like this:

$aluno = new Aluno();
$idAluno = $aluno->cadastrar(/** parâmetros */);
$aluno->pagamentos($idAluno /** resto dos parâmetros */);

Finally, the payments to use the student id, which as I said may have a column aluno_id to make the connection or is this such student situation.

  • I was also in doubt about the student’s fk, but I also believe it is the student situation. If it is, using the logic of returning the insert id and using it to record the payment is a good solution for the problem/question. What I would perhaps change would be to take the function of registering payment from the student class and create a proper class for payments and use this function in it.

  • Yes, my Foreign key is the id_students that is in the payments table... @Melissa did what you recommended, but will not go.

  • Hi @Verônicaemschermann can elaborate better? what’s not working, some error? he entered the student and not the payment? maybe post the code after the modifications I suggested.

0

I MANAGED TO SOLVE IT THE FOLLOWING WAY :

 <?php
 class Alunos 
 {
 /* 
 * class cadastrar()
 * Realiza o cadastro dos alunos
 */

public function cadastrar($nome,$rg,$cpf,$nascimento,$sexo,$fone,$email,$endereco,
$bairro,$cidade,$estado,$cep)
{

global $pdo;

$sql = $pdo->prepare("insert into alunos set nome=:nome, rg=:rg, cpf=:cpf, 
nascimento=:nascimento, sexo=:sexo,fone=:fone, email=:email, 
endereco=:endereco,bairro=:bairro, cidade=:cidade, estado=:estado, cep=:cep");

            $sql->bindValue(":nome", $nome);
            $sql->bindValue(":rg", $rg);
            $sql->bindValue(":cpf", $cpf);
            $sql->bindValue(":nascimento", $nascimento);
            $sql->bindValue(":sexo", $sexo);
            $sql->bindValue(":fone", $fone);
            $sql->bindValue(":email", $email);
            $sql->bindValue(":endereco", $endereco);
            $sql->bindValue(":bairro", $bairro);
            $sql->bindValue(":cidade", $cidade);
            $sql->bindValue(":estado", $estado);
            $sql->bindValue(":cep", $cep);
            $sql->execute();

}


/*
* class pagamentos()
* Realiza o cadastro dos alunos
*/

 public function pagamentos($email,$situacao_aluno,$vencimento_plano,
 $planos,$vencimento,$cpf_amigo,$forma_pagamento,$data_matricula,
 $numero_documento,$data_documento,$valor)
 {
  global $pdo; 

  $sql = $pdo->prepare("insert into pagamentos set email_pagamento =:email_pagamento, 
  situacao_aluno=:situacao_aluno, vencimento_plano=:vencimento_plano, planos=:planos, 
  vencimento=:vencimento,cpf_amigo=:cpf_amigo, forma_pagamento=:forma_pagamento, 
  data_matricula=:data_matricula, numero_documento=:numero_documento, 
  data_documento=:data_documento, valor=:valor");

    $sql->bindValue(":email_pagamento", $email);
    $sql->bindValue(":situacao_aluno", $situacao_aluno);
    $sql->bindValue(":vencimento_plano", $vencimento_plano);
    $sql->bindValue(":planos", $planos);
    $sql->bindValue(":vencimento", $vencimento);
    $sql->bindValue(":cpf_amigo", $cpf_amigo);
    $sql->bindValue(":forma_pagamento", $forma_pagamento);
    $sql->bindValue(":data_matricula", $data_matricula);
    $sql->bindValue(":numero_documento", $numero_documento);
    $sql->bindValue(":data_documento", $data_documento);
    $sql->bindValue(":valor", $valor);
    $sql->execute();

    $this->idAluno($email);

 }


  private function idAluno($email) {

    global $pdo;

    $sql = $pdo->prepare("select * from alunos where email = :email");
    $sql->bindValue(':email', $email);
    $sql->execute();

    if($sql->rowCount() > 0) { 
    foreach($sql->fetchAll() as $rowAluno){   


    $sql = $pdo->prepare("update pagamentos set alunos_id = :alunos_id
    where email_pagamento = :email_pagamento");

    $sql->bindValue(':alunos_id', $rowAluno['id_alunos']);
    $sql->bindValue(':email_pagamento', $rowAluno['email']);
    $sql->execute();

        }
      }      
    }
  }

Browser other questions tagged

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