Ir para conteúdo

POWERED BY:

Arquivado

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

omm62

Novo em PHP OO

Recommended Posts

Bom dia colegas. Estou iniciando em php oo e estou criando uma classe mas ao estanciá-la dá erro de sintaxe. Vocês podem me apontar onde está o erro?

 

 

class Autorizacao {
public $pessoa = null;
public $sistema = null;
public $perfil = null;
public $idpessoa = 0;
public $idperfil = 0;
public $nomesistema = null;

// Classe Autorizações Por Pessoa
public static function getAutorizacoesByPessoa($idpessoa) {
$resultado = array();
$pessoa = Pessoa::getPessoa($idpessoa);
include 'configs.php';
$result = mysql_query("SELECT a.*,s.*,p.*,pf.* FROM autorizacao a,sistema s,pessoa p,perfil pf WHERE a.idpessoa = p.idpessoa
AND a.idsistema = s.idsistema AND pf.idperfil = a.idperfil AND p.idpessoa = $idpessoa order by nomesistema asc") or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
$idperfil = $row["idperfil"];
$idpessoa = $row["idpessoa"];
$idsistema = $row["idsistema"];
$nomesistema = $row["nomesistema"];
$autorizacaoPessoa->idpessoa = Pessoa::getPessoa($idpessoa);
array_push($resultado, $autorizacaoPessoa);
}
return $resultado;
}
// Fim da Classe Autorizações Por Pessoa

 

 

Estanciando a classe na página sistemasusr.php

 

 

<?php include 'objetos.php'; ?>
<table id="tabela" border=0 cellspacing=0 cellpadding=10 WIDTH=100%>
<?php $pessoa_un = Pessoa::getPessoa($idpessoa); ?>
<tr><th colspan='3'>SISTEMAS OPERADOS PELO USUÁRIO</th></tr>
<?php
$autorizacaoPessoa = Autorizacao::getAutorizacoesByPessoa($pessoa_un->idpessoa);
if (sizeof($autorizacaoPessoa) >0 ){ ?>
<tr><td><b>SISTEMA</b></td><td><b>PERFIL</b></td></tr>
<?php foreach ($autorizacaoPessoa as $autorizacaoPessoa_un) { ?>
<tr><td><?php echo $autorizacaoPessoa_un->sistema->nomesistema; ?></td><td><?php echo $autorizacaoPessoa_un->nomeperfil->nomeperfil; ?></td></tr>
<?php }
} ?>
</table>

 

Grato por qualquer ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

q erro? qual linha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Erro

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

erro de sintaxe na consulta, imprima ela e teste diretamente no banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente concatenar desta maneira:

 

 

"SELECT a.*,s.*,p.*,pf.* FROM autorizacao a,sistema s,pessoa p,perfil pf WHERE a.idpessoa = p.idpessoa AND a.idsistema = s.idsistema AND pf.idperfil = a.idperfil AND p.idpessoa =".$idpessoa." order by nomesistema asc"

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa dar mais detalhes. Seguinte: existem os objetos Pessoa, Sistemas, Autorização. Estou tentando implementar o atributo Autorização por Pessoa ou seja quero listar os sistemas que determinada Pessoa opera. É isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando vc imprimiu a consulta $idpessoa tinha valor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A mudança sugerida por KhaosDoctor não resultou sucesso.

 

Quando imprimi a consulta setei o meu id 629 e listou todos os sistema aos quais tenho acesso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

e quando vc n seta id acontece o q? poste seu teste.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem o id dá:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1.

Então a $idpessoa tá vazia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu olhei a consulta e não achei erro de sintaxe(pode ter sim talvez tenha passado batido), o unico ponto q pode dar problema é o $idpessoa vazio.

 

verifique a primeira atribuição de $idpessoa

 

 

 <?php $pessoa_un = Pessoa::getPessoa($idpessoa); ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera ainda não achei o que tá dando bronca...

continue, persista!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem pessoal, agora o código está assim:

 

 

 

// Classe Autorizações Por Pessoa
public static function getAutorizacoesByPessoa($idpessoa) {
$resultado = array();
include 'configs.php';
$result = mysql_query("SELECT a.*,s.*,p.*,pf.* FROM autorizacao a,sistema s,pessoa p,perfil pf WHERE a.idpessoa = p.idpessoa
AND a.idsistema = s.idsistema AND pf.idperfil = a.idperfil AND a.idpessoa = $idpessoa") or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
$idperfil = $row["idperfil"];
$idpessoa = $row["idpessoa"];
$idsistema = $row["idsistema"];
$autorizacaoPessoa->sistema = Sistema::getSistema($idsistema);
$autorizacaoPessoa->perfil = Perfil::getPerfil($idperfil);
$autorizacaoPessoa->pessoa = Pessoa::getPessoa($idpessoa);
array_push($resultado, $autorizacaoPessoa);
}
return $resultado;
}
// Fim da Classe Autorizações Por Pessoa

 

Código da página de exibição:

 

 

 

require 'logar.php';
include 'objetos.php'; ?>
<table id="tabela" border=0 cellspacing=0 cellpadding=10 WIDTH=100%>
<?php $idpessoa = $_SESSION['idpessoa']; ?>
<tr><th colspan='3'>SISTEMAS OPERADOS PELO USUÁRIO</th></tr>
<?php
$autorizacaoPessoa = Autorizacao::getAutorizacoesByPessoa($idpessoa);
if (sizeof($autorizacaoPessoa) >0 ){ ?>
<tr><td><b>SISTEMA</b></td><td><b>PERFIL</b></td></tr>
<?php foreach ($autorizacaoPessoa as $autorizacaoPessoa_un) { ?>
<tr><td><?php echo $autorizacaoPessoa_un->sistema->nomesistema; ?></td><td><?php echo $autorizacaoPessoa_un->perfil->nomeperfil; ?></td></tr>
<?php }
} ?>
</table>

 

O que acontece agora é que exibe sempre o último nome de sistema do usuário. Digamos que determinado usuário opera os sistema A, B, C e D com os perfis 1,2,3 e 4 respectivamente. São exibidas quatro linhas desta forma:
Nome do Sistema Perfil
D 4
D 4
D 4
D 4
Entendem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, consegui resolver a bronca. Que fiz, estanciei a classe Autorizacao dentro da AutorizacoesByPessoa, assim:

 

 

// Classe Autorizações Por Pessoa
public static function getAutorizacoesByPessoa($idpessoa) {
$resultado = array();
include 'configs.php';
$result = mysql_query("SELECT a.*,s.*,p.*,pf.* FROM autorizacao a,sistema s,pessoa p,perfil pf WHERE a.idpessoa = p.idpessoa
AND a.idsistema = s.idsistema AND pf.idperfil = a.idperfil AND a.idpessoa = $idpessoa") or die("erro".mysql_error());
while ($row = mysql_fetch_array($result)) {
$autorizacao = new Autorizacao();
$autorizacao->perfil= $row["idperfil"];
$autorizacao->sistema = $row["idsistema"];
array_push($resultado, $autorizacao);
}
return $resultado;
}
// Fim da Classe Autorizações Por Pessoa

 

Estanciei as classes Sistema e Perfil na página de exibição e ficou assim:

 

 

<?php
require 'logar.php';
include 'objetos.php';
?>
<table id="tabela" border=0 cellspacing=0 cellpadding=10 WIDTH=100%>
<?php
$idpessoa = $_SESSION['idpessoa'];
?>
<tr><th colspan='2'>SISTEMAS OPERADOS PELO USUÁRIO</th></tr>
<?php
$autorizacoesPessoa = Autorizacao::getAutorizacoesByPessoa($idpessoa);
if (sizeof($autorizacoesPessoa) > 0) {
?>
<tr><td><b>SISTEMA</b></td><td><b>PERFIL</b></td></tr>
<?php foreach ($autorizacoesPessoa as $autorizacoesPessoa_un) {
$sistema = Sistema::getSistema($autorizacoesPessoa_un->sistema);
$perfil = Perfil::getPerfil($autorizacoesPessoa_un->perfil);
?>
<tr><td><?php echo $sistema->nomesistema;?></td><td><?php echo $perfil->nomeperfil; ?></td></tr>
<?php }
}
?>
</table>

Muito grato pela ajuda .

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.