Ir para conteúdo
Fórum Script Brasil
  • 0

Problema ao chamar classe/método construtor


Carol Correa

Pergunta

Boa noite, sou iniciante em PHP e estou orientando a objetos um sisteminha que comecei a desenvolver no semestre passado da minha faculdade.

Mas estou com um problema, se alguém souber como me ajudar, ficaria muito grata.

Acontece o seguinte, tenho meu formulário de cadastro que chama uma página PHP que pega os dados do formulário (<form action="cidadeGerencia.php" ...)

Essa pagina, cidade gerencia cria um objeto da minha classe cidade, adicionando os dados do formulário e chama a página que inclui ou altera os dados dos bancos. Meu problema é nessa pagina "cidadeGerencia", vou colar o código para explicar melhor.

<?php
include_once ("../../classes/cidade.class.php");
include_once ("../../banco_de_dados/cidade.bd.php");

class cidadeGerencia{
    public function cidadeGerencia(){
        $opcao = $_POST['opcao'];
        
        switch($opcao){
            case 'Incluir':{
                cadastrar();
                break;
            }
            case 'Alterar':{
                alterar();
                break;
            }
        }        
    }
    
    public function cadastrar(){
        $cidade = new cidade();
        $cidadeBD = new cidadeBD();
    
        $cidade->setCep($_POST['cep']);
        $cidade->setNome($_POST['nome']);
        $cidade->setEstado($_POST['estado']);
    
        if($cidadeBD->Incluir($cidade)==true){
            //header( "Location: ../view/ok.html" );
            echo "&lt;script type='text/javascript'> alert('Dados inseridos com sucesso!'); 
            window.location.href='cadastroCidade.php'; </script>";
        } else {
            //header( "Location: ../view/erro.html" );
            echo "&lt;script type='text/javascript'> alert('Erro ao gravar dados!'); 
            window.location.href='cadastroCidade.php'</script>";
        }
    }
    
    public function alterar(){
        $cidade = new cidade();
        $cidadeBD = new cidadeBD();
    
        $cidade->setCep($_POST['cep']);
        $cidade->setNome($_POST['nome']);
        $cidade->setEstado($_POST['estado']);
    
        if($cidadeBD->Alterar($cidade)==true){
            //header( "Location: ../view/ok.html" );
            echo "&lt;script type='text/javascript'> alert('Dados alterados com sucesso!'); 
            window.location.href='cadastroCidade.php'; </script>";
        } else {
            //header( "Location: ../view/erro.html" );
            echo "&lt;script type='text/javascript'> alert('Erro ao alterar dados!'); 
            window.location.href='cadastroCidade.php'</script>";
        }
    }
}
?>
O meu problema é que, o formulário chama esta página, mas não "entra" na classe ou no método construtor dela, então não acontece nada. Sei que o problema está na hora de "chamar" a classe ou o construtor da classe, e não com minhas funções, porque se eu deixar o código fora da classe da certo. Assim:
<?php
include_once ("../../classes/cidade.class.php");
include_once ("../../banco_de_dados/cidade.bd.php");


$cidade = new cidade();
$cidadeBD = new cidadeBD();
    
$cidade->setCep($_POST['cep']);
$cidade->setNome($_POST['nome']);
$cidade->setEstado($_POST['estado']);
    
if($cidadeBD->incluir($cidade)==true){
    //header( "Location: ../view/ok.html" );
    echo "&lt;script type='text/javascript'> alert('Dados inseridos com sucesso!'); 
    window.location.href='cadastroCidade.php'; </script>";
} else {
    //header( "Location: ../view/erro.html" );
    echo "&lt;script type='text/javascript'> alert('Erro ao gravar dados!'); 
    window.location.href='cadastroCidade.php'</script>";
}
?>

desse modo já testei e funcionou perfeitamente.

Também testei colocando o código da função direto no switch, e no método construtor da classe. Nenhum desses modos funcionou.

Então o problema não é com minha função ou com o switch.

Não sei o que fazer pra solucionar isso, se alguém souber uma solução, ou então descobrir o que estou fazendo de errado, por favor me dê uma luz.

Muito obrigada desde já.

Editado por Carol Correa
Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Você tem uma classe que não está sendo instanciada

class cidadeGerencia{
    public function cidadeGerencia(){
        $opcao = $_POST['opcao'];
        
        switch($opcao){
            case 'Incluir':{
                cadastrar();
                break;
            }
            case 'Alterar':{
                alterar();
                break;
            }
        }        
    }

Link para o comentário
Compartilhar em outros sites

  • 0

Prezados Amigos do Forum,

estou quase com o mesmo problema, se ele não for igual e estou precisando da ajuda de vc's para resolver este meu pequeno pro.

é o seguinte criei uma classe abstrata para ficar responsável pela conexão ao BD, como classes abstratas não podem ser instanciadas, somente estendidas eu criei uma classe para estender a classe responsável pela conexão ao BD, após isso eu criei uma classe figurativa para testar essa conexão mais o problema é o seguinte.

segue meu código da pagina da pagina figurativa para teste.

<?php

if(file_exists("../../conexao/class.conexao.php")){

require_once("../../conexao/class.conexao.php");

}else{

echo "<script>alert('Arquivo no existe');</script>";

}

$test = new con();

class CadastroNegocio{

function __construct(){

echo "este";

}

}

?>

se eu deixar o ($test = new con();) fora de uma classe ele funciona corretamente eu vejo a msg que a conexão foi bem sucedida. Mais se eu colocar ele dentro da classe nada acontece, então ao debugar eu vi que o programa é executado mais não entra na classe. alguém pode me ajudar com isso por favor.

desde já obrigado a todos.

Link para o comentário
Compartilhar em outros sites

  • 0

você pode instancioar uma classe dentro de uma função de outra classe...

não uma classe / função dentro de classe.

exemplo

Class.Conexao

Class Conexao {

private $instancia;

public function conectar() {

$instancia = parametro para conexao

}

}
Class.Cadastro
include_once Class.Conexao.php

Class cadastro {

private $string;

public function inserir(){

$dbh = new Conexao();
$dbh->conectar();

$qry = mysql_query($this->string);

}

}

Link para o comentário
Compartilhar em outros sites

  • 0

entendi mais olha ai meu codigo pode ser que você possa ver melhor o erro porque eu não estou vendo.

<?php

if(file_exists("Class.UsuarioEntidades.php")){

require_once("Class.UsuarioEntidades.php");

}

else{

echo("<string>alert('Arquivo Class.UsuarioEntidades.php no existe!');</string>");

exit();

}

class UsuarioNegocio{

public function __construct(){

$this->teste();

}

public function teste(){

$usuario = new UsuarioEntidades();

}

}

?>

quando o breakPoint para em cima da classe ele salta para o final final da classe e não entra nela.

desde já obrigado por toda ajuda.

Link para o comentário
Compartilhar em outros sites

  • 0

Thiagocoloque sue código entre a tag de

[CODE.] [./CODE] (sem o ponto) para melhor vizualiar...

certo..

na sua condição coloque isto e me diga o que mostra na tela.

<?php
if(file_exists("Class.UsuarioEntidades.php")) {
//require_once("Class.UsuarioEntidades.php");
echo "Arquivo Entidade Existe";
} else {
echo "Não existe arquivo Entidades.php"
exit();
}


?>

Link para o comentário
Compartilhar em outros sites

  • 0

<?php
    if(file_exists("Class.UsuarioEntidades.php")){
       //require_once("Class.UsuarioEntidades.php");
       echo "Arquivo Entidade Existe";
    }
    else{
       echo("<string>alert('Arquivo Class.UsuarioEntidades.php não existe!');</string>");
       exit();
    }

$usuario = new UsuarioEntidades();

class UsuarioNegocio{

    private $usuario = NULL;
    
    public function __construct(){
        $this->teste();
    }
    
    public function teste(){
        $usuario = new UsuarioEntidades();
    }
}
?>
opa apresentou um erro ao colocar ( $usuario = new UsuarioEntidades(); ) esse trecho de codigo fora da classe. o tratamento abaixo exibe uma msg que o arquivo existe mais no momento de instanciar apresenta a mensagem (Fatal Erro class UsuarioEntidades not found) .
if(file_exists("Class.UsuarioEntidades.php")){
       //require_once("Class.UsuarioEntidades.php");
       echo "Arquivo Entidade Existe";
    }

agora é que complicou de vez.

desculpa ai amigão estar perturbando é que quando quero aprender uma coisa só sossego quando aprendo.

Link para o comentário
Compartilhar em outros sites

  • 0

A mensagem que deu por não instanciar está correta....

<?php
    if(file_exists("Class.UsuarioEntidades.php")){
       require_once("Class.UsuarioEntidades.php");
       echo "Arquivo Entidade Existe";
    }
    else{
       echo("<string>alert('Arquivo Class.UsuarioEntidades.php não existe!');</string>");
       exit();
    }

class UsuarioNegocio{

    private $usuario = NULL;
    
    public function __construct(){
        $this->teste();
    }
    
    public function teste(){
        $usuario = new UsuarioEntidades();
        
    }
}
?>

Tenta assim agora, se não der erro e funcionar, me avisa que ai vou te explicar.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...