Ir para conteúdo

POWERED BY:

Arquivado

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

Perfect Lion

Classes Parte 3

Recommended Posts

Classes - Parte 1

Classes - Parte 2

 

 

 

Fala galera ...

Vi que muitos gostaram do 2 últimos cursos que eu criar sobre classes então aqui vai mais 1 o 3° da série classes

 

Bem eu vi recebi varias mensagens via MP para continuar o curso aqui e a pedidos então vamos para a 3° fase da série classes, Então para esse 3° curso iremos um sistema de notícias usando classes

 

Então bora começar !!

 

Antes de mais nada vamos verificar o que nosso sistema vai fazer. Para isso vamos dividir o sistema em modulo.

 

Então iremos ter as seguintes modulos.

 

NOTÍCIA DESTAQUE

VISUALIZAR NOTICIA POR COMPLETA

LISTAR NOTICIAS

 

Então galera no momento nosso sistema vai ser simples então vai ter somente esses 3 modulos ok?

 

Bem então vamos lá iremos agora modelar nosso banco de dados para podermos fazer o negocio funcionar ^^

 

Para esse sistema eu defeni o seguinte modelagem de banco de dados:

 

 

Notícias

id add + || titulo varchar(60) || descricao varchar(150) || conteudo text || fonte varchar(60) || fonte_link varchar(100) || data date() || visivel bool
SQL_NOTICIA.sql

CREATE TABLE `noticias` (`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,`titulo` VARCHAR( 60 ) NOT NULL ,`descricao` VARCHAR( 150 ) NOT NULL ,`conteudo` TEXT NOT NULL ,`fonte` VARCHAR( 60 ) NOT NULL ,`fonte_link` VARCHAR( 100 ) NOT NULL ,`data` DATE NOT NULL ,`visivel` BOOL NOT NULL) ENGINE = innodb;
Bem já temos nosso DB formatado e pronto para receber o conteúdo.

 

Agora vamos programar:

 

Vamos criar uma classe que vai navegar no banco de dados atraz das informações que queremos ..

 

Não irei criar uma classe DB porque por enquanto não é viavel criarmos ela porque não é? porque é algo mais avançado e se queremos uma classe legal então acho que seria ideial criar uma aula só para essa classe ;) então aqui vou montar uma classe normal sem extender uma outra classe que no nosso caso iria ser a do DB

 

<?php/* *	Classe responsavel para trabalhar com a notícias *	V. 0.1 =P */class noticia{	}?>
Bem aqui já iniciamos a nossa classe noticia. agora vamos colocar as propriedades nela

 

Sabemos que as propriedades da classe são suas carecteristicas principais onde colocamos algumas informações importante para ela.

 

Como assim informações inmportante?

R: Bem imagina que criamos uma classe HUMANO, quais as suas propriedades importate de um ser HUMANO?

--- Dormi

--- Acordar

--- Comer

--- Beber

--- ....

 

Certo deu para entender? Então se tivesemos uma classe HUMANO teriamos essas propriedade como importates de nossa classe ;)

 

Agora voltando ao assunto.

 

As propriedades importantes para a nossa classe seriam o seguinte:

--- tabelaNOME -> tabela em que nossa classe vai está trabalhando

--- db -> o que será responsavel para guardar as informações que iremos fazer de SQL

 

Agora vamos adicioanr elas:

 

<?php/* *	Classe responsavel para trabalhar com a notícias *	V. 0.1 =P */class noticia{	var $tabelaNoticia = "noticia";	var $defaultRowsPages = 5;	var $db;}?>
Bem nossas propriedades colocadas e já com seus valores.

 

Agora vamos para a primeira função que seria uma função contrutora é o que vai conectar o banco de dados mais antes da função vamos criar alguns defines com as configurações do DB e depois criamos a função constructer que ao iniciarmos a classe ela será executada.

 

<?php/* *	Classe responsavel para trabalhar com a notícias *	V. 0.1 =P */define("DBHOST","localhost");define("DBUSER","root");define("DBPASS","");define("DBDATABASE","sis_noticias");class noticia{	var $tabelaNoticia = "noticia";	var $defaultRowsPages = 5;	var $db;	function noticia(){			$connect = mysql_connect(DBHOST,DBUSER,DBPASS);		mysql_select_db(DBDATABASE,$connect);	}}?>
Pronto vocês devem ter reparado que a nossa função tem o mesmo nome de nossa classe certo? isso quer dizer que é uma função construtor. no PHP5 isso não é mais necessario porque?

R: porque no php5 já existe um __constructor que é para essa finalidade

 

Agora já sabemos que ao iniciar a nossa classe ele vai conectar ao banco sozinho e ao terminar o script ele desconecta o banco pois o mysql_connect ele desconecta depois que um script é terminado. diferente do mysql_pconnect

 

Agora vamos criar a função que será responsavel de listar as noticias.

 

<?php/* *	Classe responsavel para trabalhar com a notícias *	V. 0.1 =P */define("DBHOST","localhost");define("DBUSER","root");define("DBPASS","");define("DBDATABASE","sis_noticias");class noticia{	var $tabelaNoticia = "noticia"; # informa a tabela de noticias.	var $db; # variavel que vai conter informações das pesquisas de query	function noticia(){			$connect = mysql_connect(DBHOST,DBUSER,DBPASS);		mysql_select_db(DBDATABASE,$connect);	}		function getNoticia($row,$offset,$campos="*",$order="data",$nivel="DESC",$visivel=true){		$this->db = mysql_query("select * from " . $this->tabelaNoticia . " where visivel = '" . $visivel . "' order by " . $order[0] ." " . $order[1] . "limit $row, $offset");		if(mysql_num_rows($this->db)){			while($linhas = mysql_fetch_array($this->db)){				$ar[] = $linhas;			}			return $ar;		}else{			return false;		}	}}?>

Bem ta ai montamos nossa listar noticia que é o return array() getNoticia([rows], [offset], [array( campo,(DESC|ASC) )], [bool]); ela é responsavel para listar nossas notícias com ela já matamos 2 de nossos 3 modulos. os seguites:

 

NOTÍCIA DESTAQUE

LISTAR NOTICIAS

 

Porque?

R: Porque nela podemos listar as noticias e tbm ela está retornando um array com os nomes dos campos da tabela e com isso você tem como ter a opção de listar só alguns e tbm listar só o ultimo ^^ ;)

 

ficando assim:

 

 

<?php/* *	Classe responsavel para trabalhar com a notícias *	V. 0.1 =P */define("DBHOST","localhost");define("DBUSER","root");define("DBPASS","");define("DBDATABASE","sis_noticias");class noticia{	var $tabelaNoticia = "noticia"; # informa a tabela de noticias.	var $db; # variavel que vai conter informações das pesquisas de query	function noticia(){			$connect = mysql_connect(DBHOST,DBUSER,DBPASS);		mysql_select_db(DBDATABASE,$connect);	}		function getNoticia($row,$offset,$campos="*",$order="data",$nivel="DESC",$visivel=true){		$this->db = mysql_query("select * from " . $this->tabelaNoticia . " where visivel = '" . $visivel . "' order by " . $order[0] ." " . $order[1] . "limit $row, $offset");		if(mysql_num_rows($this->db)){			while($linhas = mysql_fetch_array($this->db)){				$ar[] = $linhas;			}			return $ar;		}else{			return false;		}	}}$noticias = new noticia();$destaque = $noticias->getNoticia(1); # lista 1 noticia.print_r($destaque[0]);$listarNoticia = $noticias->getNoticia(5,1); # lista 5 noticia. apartir da 2° linha sendo que o 0 é a primeira linhaif($listarNoticia){	foreach($listarNoticia as $valor){		echo "<br />Titulo: " . $valor[0]["titulo"] . "<br />\r\n";	}}?>
Virão como é facil? ^^ simples não matamos 2 numa tacada só

 

Agora vamos fazer ele mostrar a noticia por completa

 

Vamos criar a função showNoticia(); ficando da seguinte forma.

 

<?php/* *	Classe responsavel para trabalhar com a notícias *	V. 0.1 =P */define("DBHOST","localhost");define("DBUSER","root");define("DBPASS","");define("DBDATABASE","noticias");class noticia{	var $tabelaNoticia = "noticias"; # informa a tabela de noticias.	var $db; # variavel que vai conter informações das pesquisas de query		function noticia(){			$connect = mysql_connect(DBHOST,DBUSER,DBPASS);		mysql_select_db(DBDATABASE,$connect);	}		function getNoticia($row,$offset,$campos="*",$order="data",$nivel="DESC",$visivel=true){		$this->db = mysql_query("select " . $campos . " from " . $this->tabelaNoticia . " where visivel = '" . $visivel . "' order by " . $order[0] ." " . $order[1] . "limit $row, $offset");		if($nr = mysql_num_rows($this->db)){			while($linhas = mysql_fetch_array($this->db)){				$ar[] = $linhas;			}			return $ar;		}else{			return false;		}	}			function showNoticia($id=false,$visivel=true){		if($id){			$this->db = mysql_query("select * from " . $this->tabelaNoticia . " where visivel = '" . $visivel . "'");			if(mysql_num_rows($this->db)){				return mysql_fetch_array($this->db);			}else{				return false;			}		}else{			return false;		}	}	}$noticias = new noticia();$destaque = $noticias->getNoticia(1,0); # lista 1 noticia.print_r($destaque);$listarNoticia = $noticias->getNoticia(5,0); # lista 5 noticia. apartir da 2° linha sendo que o 0 é a primeira linhaif($listarNoticia){	foreach($listarNoticia as $valor){		echo "<br />Titulo: " . $valor["titulo"] . "<br />\r\n";	}}$show = $noticias->showNoticia(1); print_r($show["titulo"]);?>

Certo galera ... agora é só usar um pouco a imaginação e logicas que vcs chegam longe.. isso aqui é o basico do basico ^^ só para ter uma noção melhor ;)

 

Até a proxima

 

 

 

Classes - Parte 1

Classes - Parte 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aí Perfect Lion... beleza...Rapaiz eu tava tampando o Cérebro de Fumaça, tentanto fazer uma Classe para paginação e buscando ajuda olha com q me deparo...Vlw... Kra...Vou adapar a sua Classe na minha de Conexão e adicionar a parte de Paginação...Brigadão pela aula...Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, seguindo seu tutorial, apareceu o erro:Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/restricted/home/abestado/public_html/classes/noticias.php on line 29Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/restricted/home/abestado/public_html/classes/noticias.php on line 29Na linha 29 tem isso:if($nr = mysql_num_rows($this->db)){Detalhe:Após cansativas tentativas de consertar, copiei o seu código e colei nessa página, mudando apenas os endereços de banco de dados, banco, senha, etc. Inseri uma notícia no banco, para ver se aparecia, mas não, dá o erro.Pode me dar uma luz do pode estar ocorrendo?Obrigado,

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara... sem noção... meus parabéms LINDO tuto... eu n sabia nada de class (e ainda quero faze algo neh sem sabe isso q é facil sahusahu husahusaahusahusa)vlw mesmo li todos hj e ja to entendendo perfeitamente VLWaté

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.