Ir para conteúdo

POWERED BY:

Arquivado

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

gedmilson

[Resolvido] Recuperar ultimo id do insert

Recommended Posts

Testou com esse novo?

Nesse aqui eu recoloquei o "Turma" que estava aqui: Cadastrar(Turma $turma), eu tinha tirado e tinha esquecido de recolocar, talvez ele chama algo da Classe Turma, não sei ao certo.

Testa esse pra gente ver:

require_once("Banco.php");
 

 class TurmaDAO {

    private $pdo;
    private $debug;
    private $lastid;

    public function __construct() {
        $this->pdo = new Banco();
        $this->debug = true;
    }

    public function Cadastrar(Turma $turma) {
         try {
             $sql = "INSERT INTO turma (turma, nivel, descricao, cargahoraria,endereco, cidade) VALUES (:turma, :nivel, :descricao, :cargahoraria, :endereco, :cidade)";
             $param = array(
                
                 ":turma" => $turma->getTurma(),
                 ":nivel" => $turma->getNivel(),
                 ":descricao" => $turma->getDescricao(),
                 ":cargahoraria" => $turma->getCarga(),
                 ":endereco" => $turma->getEndereco(),
                 ":cidade" => $turma->getCidade()

               //  ":maxvaga" => $turma->getMaxvaga(),
               //  ":minvaga" => $turma->getMinvaga()

             );

             $res = $this->pdo->ExecuteNonQuery($sql, $param);
             $this->setLastId($this->pdo->GetLastId());

             return $res;

         } catch (PDOException $ex) {
             if ($this->debug) {
                 echo "ERRO: {$ex->getMessage()} LINE: {$ex->getLine()}";

             }
             return false;
         }
    }
    public function getLastId(){
       	 	return $this->lastid;
    }
    public function setLastId($id){
        	$this->lastid = $id;
    }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu retirei todos os codigos php da pagina deixando só os que você me enviou, para ver se dava de resouver isoladamente esse problema sem distração de nenhum outro codigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas tem que funcionar com os outros também, a alteração que a gente fez foi bem simples, acrescentamos só 2 métodos onde $this->setLastId() seta o último ID cadastrado e disponibiliza ele no método getLastId(), essa parte foi resolvida, o que é preciso ver agora é essa parte aqui: Cadastrar(Turma $turma), é como se na variável $turma fosse passado todos os métodos da classe Turma:

function Cadastrar(Turma $turma){
  $turma->getTurma(),
  $turma->getTurma(),
  $turma->getNivel(),
  $turma->getDescricao(),
  $turma->getCarga(),
  $turma->getEndereco(),
  $turma->getCidade()
}

Testou o último código que te passei? Tem que testar ele com todos os códigos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu colei o código que você me enviou na pasta TurmaDAO.php

e depois colei esse código na TurmaView.php:

    require_once("../Controller/TurmaController.php");

$turma = new TurmaDAO();

//$tur = new Turma();
echo "<pre>";
print_r($turma->Cadastrar());
echo "</pre>";
echo "<pre>";
print_r($turma->getLastId());
echo "</pre>";
?>

Tomei o cuidado de remover todos os outros códigos em php, para que não atrapalhassem.

mas mesmo assim apareceu esse erro:

Catchable fatal error:  Argument 1 passed to TurmaDAO::Cadastrar() must be an instance of Turma, none given, called in C:\xampp\htdocs\IPAE\Admin-bc\View\TurmaView\TurmaView.php on line 9 and defined in C:\xampp\htdocs\IPAE\DAL\TurmaDAO.php on line 16

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca todos os arquivos novamente e faz um novo teste com exatamente esse código aqui:

require_once("Banco.php");
 

 class TurmaDAO {

    private $pdo;
    private $debug;
    private $lastid;

    public function __construct() {
        $this->pdo = new Banco();
        $this->debug = true;
    }

    public function Cadastrar(Turma $turma) {
         try {
             $sql = "INSERT INTO turma (turma, nivel, descricao, cargahoraria,endereco, cidade) VALUES (:turma, :nivel, :descricao, :cargahoraria, :endereco, :cidade)";
             $param = array(
                
                 ":turma" => $turma->getTurma(),
                 ":nivel" => $turma->getNivel(),
                 ":descricao" => $turma->getDescricao(),
                 ":cargahoraria" => $turma->getCarga(),
                 ":endereco" => $turma->getEndereco(),
                 ":cidade" => $turma->getCidade()

               //  ":maxvaga" => $turma->getMaxvaga(),
               //  ":minvaga" => $turma->getMinvaga()

             );

             $res = $this->pdo->ExecuteNonQuery($sql, $param);
             $this->setLastId($this->pdo->GetLastId());

             return $res;

         } catch (PDOException $ex) {
             if ($this->debug) {
                 echo "ERRO: {$ex->getMessage()} LINE: {$ex->getLine()}";

             }
             return false;
         }
    }
    public function getLastId(){
       	 	return $this->lastid;
    }
    public function setLastId($id){
        	$this->lastid = $id;
    }
}

E me informa se apareceu algum erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou mandar a parte da View que eu crio o cadastro.

 

require_once("../Model/Turma.php");
require_once("../Controller/TurmaController.php");

$turmaController = new TurmaController();

$cod = 0;
$turma = "";
$nivel = "";
$endereco = "";
$cidade = "";
$descricao = "";
$carga = "";

$resultado = "";
$spResultadoBusca = "";
$listaTurmasBusca = [];

if (filter_input(INPUT_POST, "btnGravar", FILTER_SANITIZE_STRING)) {
    $turma = new Turma();

    $turma->setTurma(filter_input(INPUT_POST, "txtTurma", FILTER_SANITIZE_STRING));
    $turma->setNivel(filter_input(INPUT_POST, "slNivel", FILTER_SANITIZE_STRING));
    $turma->setDescricao(filter_input(INPUT_POST, "txtDescricao", FILTER_SANITIZE_STRING));
    $turma->setCarga(filter_input(INPUT_POST, "txtCarga", FILTER_SANITIZE_STRING));
    $turma->setEndereco(filter_input(INPUT_POST, "txtEndereco", FILTER_SANITIZE_STRING));
    $turma->setCidade(filter_input(INPUT_POST, "txtCidade", FILTER_SANITIZE_STRING));

    if (!filter_input(INPUT_GET, "cod", FILTER_SANITIZE_NUMBER_INT)) {
        //Cadastrar
        if ($turmaController->Cadastrar($turma)) {
            ?>  
            <script>
                document.cookie = "msg=1";
                document.location.href = "?pagina=turma";
            </script>  
            <?php
        } else {
            $resultado = "<div class=\"alert alert-danger\" role=\"alert\">Houve um erro ao tentar cadastrar a turma.</div>";
        }  
        } else {
            //Editar
            $turma->setCod(filter_input(INPUT_GET, "cod", FILTER_SANITIZE_NUMBER_INT));

            if ($turmaController->Alterar($turma)) {
                ?>
            <script>
                document.cookie = "msg=2";
                document.location.href = "?pagina=turma";
            </script>
            <?php
        } else {
            $resultado = "<div class=\"alert alert-danger\" role=\"alert\">Houve um erro ao tentar alterar a turma.</div>";
        }
    }                                                 
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei esse código abaixo

$turma = new TurmaDAO();

//$tur = new Turma();
echo "<pre>";
print_r($turma->Cadastrar($turma));
echo "</pre>";
echo "<pre>";
print_r($turma->getLastId());
echo "</pre>";

e retornou esse erro

 

Catchable fatal error:  Argument 1 passed to TurmaDAO::Cadastrar() must be an instance of Turma, instance of TurmaDAO given, called in C:\xampp\htdocs\IPAE\Admin-bc\View\TurmaView\TurmaView.php on line 62 and defined in C:\xampp\htdocs\IPAE\DAL\TurmaDAO.php on line 16

Compartilhar este post


Link para o post
Compartilhar em outros sites
$turma = new TurmaDAO();

$tur = new Turma();
echo "<pre>";
print_r($turma->Cadastrar($tur));
echo "</pre>";
echo "<pre>";
print_r($turma->getLastId());
echo "</pre>";

Tenta assim agora pra gente ver, se der erro me manda aí o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

parece que agora o erro está somente da DAO;

 

Error on ExecuteNonQuery(): SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'turma' cannot be null

SQL: INSERT INTO turma (turma, nivel, descricao, cargahoraria,endereco, cidade) VALUES (:turma, :nivel, :descricao, :cargahoraria, :endereco, :cidade)

Parameters: Array
(
    [:turma] => 
    [:nivel] => 
    [:descricao] => 
    [:cargahoraria] => 
    [:endereco] => 
    [:cidade] => 
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso aconteceu pq toda essa galerinha aqui debaixo ta retornando null, eles não foram setados:

public function Cadastrar(Turma $turma){
[code...]
  $turma->getTurma(), // null
  $turma->getNivel(), // null
  $turma->getDescricao(), // null
  $turma->getCarga(), // null
  $turma->getEndereco(), // null
  $turma->getCidade() // null
[...code]
}

Agora tenta fazer o seguinte:

$turma = new TurmaDAO();

$tur = new Turma();

$tur->setTurma("informe a turma");
$tur->setNivel("informe o nível");
$tur->setDescricao("informe a descrição");
$tur->setCarga("informe a carga");
$tur->setEndereco("informe o endereço");
$tur->setCidade("informe a cidade");

echo "<pre>";
print_r($turma->Cadastrar($tur));
echo "</pre>";
echo "<pre>";
print_r($turma->getLastId());
echo "</pre>";

Testa aí agora pra gente ver.

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.