Chave estrangeira no php como salvar orientado a objetos

Olá, pessoal estou com dificuldades de salvar um objeto utilizando chave estrangeira em php.

Código?

Está usando PDO, mysql, mysqli, etc… nos dê mais detalhes, poste código, nos ajude a te ajudar…

Estou usando PDO

Este é o método cadastrar:

public function cadastrar() {
$pdo = parent::getDB();

    try {
        parent::$tabela = "projeto";
        parent::$campoTabela = "nomeProjeto";
        parent::$campoEscolhido = $this->getNomeProjeto();
        
        if($this->existeCadastro()):
            $this->setErro("<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript'>
                alert ('Está empresa já existe, certifique-se você já não a cadastrou !!!')</SCRIPT>");
        else:
            $cadastrar = $pdo->prepare("insert into projeto(nomeProjeto, tipo, idEmpresa)values(:nomeProjeto, :tipo, :idEmpresa)");
            $cadastrar->bindValue(":nomeProjeto", $this->getNomeProjeto());
            $cadastrar->bindValue(":tipo", $this->getTipo());
            $cadastrar->bindValue(":idEmpresa", $this->getIdEmpresa());
            $cadastrar->execute();
            if($cadastrar->rowCount() == 1):
                return true;
            else:
                echo "Erro ao Cadastrar dados do projeto !!!";
            endif;
        
        endif;
        
    } catch (PDOException $e) {
        echo "Erro; " . $e->getMessage();
    }             
}

Pegando os valores do formulário:

<?php include_once './model/Projeto.php'; include_once './iCRUD/iCRUD.php'; include_once 'config.php'; //PASSANDO O ID DA EMPRESA $id = $_GET["id"]; $nomeFantasia = $_GET["nomeFantasia"]; if(isset($_POST['enviar'])): //PEGANDO OS VALORES DO FORM $pro = new Projeto(); $pro->setNomeProjeto(trim($_POST["nomeProjeto"])); $pro->setTipo(trim($_POST["tipoProjeto"])); $pro->setIdEmpresa(trim($_POST[$id])); if($pro->cadastrar()): echo ""; print ""; else: echo $pro->getErro(); endif; endif; ?>

E no caso o $id é a chave estrangeira que você quer pegar?

Se for, há conflitos no seu código, esse último que postou pegando os valores do formulário… porque você pega por get e post ao mesmo tempo e isso é incompatível…

O ideal seria

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT);
    $nomeFantasia = filter_input(INPUT_POST, 'nomeFantasia', FILTER_SANITIZE_STRING);
    $enviar = filter_input(INPUT_POST, 'enviar', FILTER_SANITIZE_STRING);

     if (!empty($enviar)) {
         // restante do código aqui...
     }
}

Algumas dicas, seu form deve estar com method=“post” para esse trecho funcionar corretamente.

Ao invés de usar as superglobais GET e POST diretamente, use sempre a função filter_input, assim consegue aplicar filtros como no caso do $id, imagino ser inteiro na base de dados então posso forçar o tipo no filtro FILTER_VALIDATE_INT e caso o valor não seja inteiro, retornará false/nulo (não me recordo muito bem…) e você consegue aplicar a qualquer campo vindo do form…

Agora se você precisa pegar o pk (primary key), o PDO possui o método lastInsertId e pode ajudar…

1 curtida