Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
Cara que zona... Onde está dando erro?
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
erro de sintaxe na consulta, imprima ela e teste diretamente no banco.
Fiz cara. No no banco roda beleza, isso q tá me encucando...
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"
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.
quando vc imprimiu a consulta $idpessoa tinha valor?
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.
e quando vc n seta id acontece o q? poste seu teste.
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?
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); ?>
Galera ainda não achei o que tá dando bronca...
Galera ainda não achei o que tá dando bronca...
continue, persista!
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?
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 .
q erro? qual linha?