Ir para conteúdo

POWERED BY:

Arquivado

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

Marcelo.Rafael

[Resolvido] É possivel passar uma condição como parámetro?

Recommended Posts

Eu queria criar um classe que executasse uma consulta no banco de dados e as condições dessa consulta fossem passadas como parámetro, só que eu só consigo fazer isso utilizando aspas ou apóstrofo, não sei se é possivel fazer o que eu quero mas mesmo assim, se alguém poder me ajudar, vou ficar muito grato.

 

O que eu quero é o seguinte:

 

Eu tenho uma classe Listar.php e é por meio dela que eu realizo a consulta no banco de dados:

 

<?php
class Lista
{
public $tabela;

public function __construct($tabela)
{
 $this->tabela = $tabela;
}

public function ObtemDados($condicao = '', $ordem = '', $quantidade = '')
{
 if($condicao != '')
 {
  $condicao = 'WHERE '.$condicao;
 }
 if($ordem != '')
 {
  $ordem = 'ORDER BY '.$ordem;
 }
 if($quantidade != '')
 {
  $quantidade = 'LIMIT '.$quantidade;
 }

 $query = 'SELECT * FROM '.$this->tabela.' '.$condicao.' '.$ordem.' '.$quantidade;

 $query = mysql_query($query);

 return $query;
}
}
?>

 

 

E tenho uma classe ListaNoticias.php que lista as noticias do banco de dados:

<?php
class ListaNoticias
{
const TABELA            = 'noticias';

const ID                = 'id';
const TITULO            = 'titulo';
const ASSUNTO           = 'assunto';
const NOTICIA           = 'noticia';
const DATA              = 'data';
const STATUS            = 'status';

const ATIVADO           = 'S';
const DESTAVIADO        = 'N'

public $id              = '';
public $titulo          = '';
public $assunto         = '';
public $noticia         = '';
public $data            = '';
public $status          = '';

public function ObtemDados($condicao = '', $ordem = '', $quantidade = '')
{
    $lista = new Lista(self::TABELA);
    $query = $lista->ObtemDados($condicao, $ordem, $quantidade);

    $this->query = $query;

    return $query;
}

public function Lista()
{
    $row = mysql_fetch_assoc($this->query);

    $this->id      = $row[self::ID];
    $this->titulo  = $row[self::TITULO];
    $this->assunto = $row[self::ASSUNTO];
    $this->noticia = $row[self::NOTICIA];
    $this->data    = $row[self::DATA];
    $this->status  = $row[self::STATUS];

    return $row;
}

public function getTotal()
{
    $total = mysql_num_rows($this->query);

    return $total;
}

public function getImagem()
{
    $imagem = new ListaImagens(self::TABELA);
    $imagem->Parametros(ListaImagens::IDSESSAO.'="'.$this->id.'"');

    $this->caminhoIMG = $imagem->caminhoIMG;

    return $this;
}

public function getVideo()
{
     $video = new ListaVideos(self::TABELA);
     $video->Parametros(ListaVideos::IDSESSAO.'="'.$this->id.'"');

     $this->caminhoVideo = $video->caminhoVideo;

     return $this;
}

public function showHTML($width = '', $height = '')
{
     if(isset($this->caminhoIMG) and $this->caminhoIMG != '')
     {
          echo '<img src="'.$this->caminhoIMG.'" width="'.$width.'" height="'.$height.'">';
     }
     if(isset($this->caminhoVideo) and $this->caminhoVideo != '')
     {
          echo "
               <object width='".$width."' height='".$height."'><param name='movie' value='".$this->caminhoVideo."'>
               </param><param name='allowFullScreen' value='true'></param><param name='allowscriptaccess'
               value='always'></param><embed src='".$this->caminhoVideo."' type='application/x-shockwave-flash'
               width='".$width."' height='".$height."' allowscriptaccess='always' allowfullscreen='true'></embed>
               </object>
               ";
     }
}
}
?>

 

 

E tenho também o arquivo noticia.php que vai exibir para o usuáiro, a noticia:

 

<?php
require('lib.conf/conf.php');
require('lib.conf/conexao.php');
require('lib.classes/Lista.php');
require('lib.classes/SistemaNoticias/ListaNoticias.php');


$noticia = new ListaNoticias()
$noticia->ObtemDados(ListaNoticias::ID.'="'.$_GET['id'].'"')   //É nessa parte que esta a minha dúvida! Em vez de utilizar: $noticia->ObtemDados(ListaNoticias::ID.'="'.$_GET['id'].'"'); eu queria utilizar: $noticia->ObtemDados(ListaNoticias::ID == $_GET['id']);
$noticia->Lista();
?>
<html>
<head>
 <title></title>
</head>

<body>
 <div id="contentNoticias">
  <div id="tituloNoticia">
     <?php echo $noticia->titulo; ?>
  </div>
  <div id="assuntoNoticia">
     <?php echo $noticia->assunto; ?>
  </div>
  <div id="imagemNoticia">
     <?php echo $noticia->getImagem()->showHTML(500) ?>
  </div>
  <div id="textoNoticia">
      <?php echo $noticia->noticia; ?>
  </div>
  <div id="dataNoticia">
     <?php echo $noticia->data; ?>
  </div>
 </div>
</body>
</html>

 

Esta ae, na parte onde executa o código:

$noticia->ObtemDados(ListaNoticias."='.$_GET['id'].'");

Eu queria que fosse da seguinte maneira:

$noticia->ObtemDados(ListaNoticias == $_GET[id]);

 

Se alguém puder me ajudar... agradeço! espero que tenham intendido a explicação! Obrigado!

 

 

Obs.: Tive que editar algumas vezes o post por que vi alguns erros no que eu digitei! kkk

Compartilhar este post


Link para o post
Compartilhar em outros sites
ListaNoticias == $_GET[id]

Isso é uma expressão booleana, retorna true ou false, não tem como fazer desse jeito...

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
class Foo {

//o método que irá obter a condição e retornar o valor.
//equivalente ao seu ObtemDados()
public function method( $result ) {
	return $result ? 'verdadeiro' : 'falso';
}

}

class Bar {

public $id = 4;

}

$id = 4;
$noticia = new Foo;
$bar = new Bar;

echo $noticia->method( $bar->id === $id );//retorno: verdadeiro

Compartilhar este post


Link para o post
Compartilhar em outros sites

não tem sentido o ID da noticia ser tratado como constante.

 

class ListaNoticias
{
const TABELA            = 'noticias';

public $id;

  public static function setID( $id ){
     $this->id = $id;
  }

e então para chamar:

$noticia->ObtemDados( ListaNoticias::setID( (int)$_GET['id'] ) );

algo do tipo, entendeu ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

^^ eu coloquei o nome do campo na constante, tipo, é só para o caso de eu querer usar os arquivos em outro sistema, ae eu não precisar ficar depois mudando um por um entendeu^^ mas também gostei da sua explicação, obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi @Marcelo, então cara..

 

na verdade o seu uso dos objetos é que está errado.

Essa modelagem é ineficiente, mesmo você usando essas constantes. Acho mais proveitoso, garantir que você usará o mesmo dump de banco inicial, do que tentar deixar configurável o nome dos campos.

 

Veja a "perda" de performance que você tem, ao fazer dessa forma. Em cada consulta, precisa concatenar mais variáveis "desnecessariamente".

Pensando como objeto e entidade, essa classe tá fazendo coisas demais.

 

 

 

Considere a dica de começar a usar a classe mysqli para o banco. Já que quer trabalhar com OO.

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.