É seguro dizer que quase todos os sites modernos hoje estão usando algum tipo de sistema de gerenciamento de conteúdo (CMS). Embora exista uma tonelada de ótimas opções gratuitas para gerenciar websites (WordPress, Drupal, etc.), todo bom programador precisa ter o hábito de “abrir o capô” e entender como um CMS funciona.
Neste tutorial vamos construir um CMS!

Basicamente vamos criar uma única classe que irá:

  • Criar um banco de dados
  • Conectar com o banco de dados
  • Mostrar um formulário com dois campos
  • Salvar os dados do formulário no banco de dados
  • Mostrar os dados salvos no banco na tela

O objetivo deste tutorial é mostrar como PHP e MySQL interagem e para aprendermos algumas noções básicas de um  CMS. Eu vou pular algumas explicações sobre assuntos de programação que forem muito básicos.

Construindo a Classe

O primeiro passo é simplesmente criar uma classe em um arquivo chamado ‘simpleCMS.php’.

 

Como você pode ver, estamos criando uma classe com quatro variáveis ​​e cinco métodos. Eu optei por utilizar a abordagem orientada a objetos do PHP.

As Variáveis

Todas as quatro variáveis ​​são para conexão com o banco de dados: $host, $username, $password e $database . Por enquanto vamos deixa-los vazios e passar para a criação do nosso banco de dados, que é construído pelo método buildDB ().

Construindo o Banco de Dados

 

Esta função executa um comando MySQL que verifica no banco de dados se testDB existe. Se existir, passa uma notificação de sucesso; se não, cria nossa tabela e atribui três colunas para armazenar dados.

Agora que temos uma função para construir a nossa tabela, vamos criar uma função que vai servir para conectarmos ao nosso banco de dados.

 Chamamos mysql_connect() para conectarmos com o nosso banco de dados e em seguida mysql_select_db() para nos certificarmos de que estamos salvando os dados no lugar certo. Ambas as funções são acompanhadas pela função die(), que quer dizer mais ou menos assim: “no caso dessa função falhar, vou parar a execução desse script e exibir uma mensagem.” Nossa função connect() realiza a conexão com o banco de dados e em seguida executa a função buildDB().  Se lembra da frase esquisita “IF NOT EXISTS” (“se não existir”) que é parte de nosso comando MySQL? Como iremos executar esta função toda vez que carregarmos uma página, nós temos que nos certificar de que não estamos sobrescrevendo o banco de dados do nosso CMS cada vez que chamarmos estas funções, e esta declaração impedirá que isso aconteça.

Construindo o Formulário

Bom, já construímos nosso banco. Agora falta o enchermos de dados.

 Mais uma vez, esta é uma função muito simples. Quando chamada, simplesmente retorna a marcação HTML para criarmos o nosso formulário. Você vai notar, no entanto, no atributo action do elemento form, que eu usei a variável $_SERVER [‘PHP_SELF’]. É essencialmente um atalho que referencia o arquivo que você está usando atualmente (no nosso caso, é display.php). Isso é útil se você vai reutilizar esse código através de todo o seu site e não necessariamente quer reescrever essa função para cada página.

Uma breve pausa para falar sobre o método que estou usando para voltar o HTML. É um formato usado em PHP chamado sintaxe HEREDOC. A principal vantagem do Heredoc é que ele permite você incluir formatação em sua saída. Isto é extremamente útil para programadores que, como eu, detestam códigos-fonte desordenados. Você pode aprender mais sobre a sintaxe heredoc lendo o manual do PHP : http://php.net/manual/pt_BR/language.types.string.php

Salvando os dados no banco de dados

Nosso formulário permitirá inserirmos informações, então como fazemos para salva-las no banco? É aí que nosso método write() entra em ação.

 

Vamos começar com a própria chamada da função – estamos passando o resultado dela para uma variável, que nós não haviamos feito até agora. Nossa variável $p vai armazenar as informações enviadas do nosso formulário pelo método POST. Uma vez dentro da função, começamos com uma declaração condicional que está verificando se o valor de $title foi definido no formulário antes de ter sido enviado, e se assim for, estamos definindo nossa variável $title com o valor $_POST[‘title’] (Nota: estamos usando a função mysql_real_escape_string() como precaução contra ataques de sql injection). Se $_POST[‘title’] não foi definido, vamos pular essa linha, deixando a variável $title indefinida.

Este processo é repetido na segunda entrada, e em seguida, as duas variáveis ​​são validadas para garantir que nenhuma delas está em branco antes de salvar no banco de dados. Se ambas variáveis ​​estiverem definidas, em seguida definimos a variável $created com o UNIX timestamp atual, que nós vamos usar para classificar nossas entradas em ordem cronológica, quando formos visualiza-las no futuro.

Nós temos agora três variáveis, e pelo fator de termos rodado algumas validações , sabemos que nenhuma das três variáveis ​​estão vazias. Agora nós podemos escrever a nossa consulta MySQL que vai salvar a entrada no banco de dados!

 Mostrando na tela dados vindos do banco

Agora que temos os meios para inserir informações no banco de dados do nosso CMS, precisamos criar um jeito de obte-las de volta. É aí que entra o método display_public(). Este é de longe o mais complexo dos nossos métodos, então vamos gastar um pouco do nosso tempo para descobrir o que está acontecendo dentro dele.

 A primeira coisa que precisamos notar quando lemos dados de um banco é a forma como o PHP e MySQL interagem um com o outro. Em primeiro lugar, fazemos uma solicitação (query) ao banco de dados, ao qual ele responde com um resultado (resource). No entanto, este resultado não é realmente útil até que o tenhamos decodificado usando um dos vários métodos que organizam (fetch) as informações deste resultado dentro uma forma utilizável (array).

A nossa primeira ação na função acima é configurar a consulta na variável $q. O operador asterisco (*) no MySQL significa “tudo”, por isso a nossa query é para pedir ao banco de dados que selecione todos os registros na tabela TESTDB em ordem cronológica inversa,  porém limitada aos três primeiros registros que vierem.

Agora que a query foi definida, vamos envia-la ao banco de dados usando a função mysql_query(). O resultado desta query é armazenado na variável $r. É aí que a coisa dá uma pequena complicada…

Nós rodamos agora uma declaração condicional que diz, “SE mysql_query() não falhou, E SE o número de registros retornado for maior que zero, processe o resultado, DO CONTRARIO mostre uma mensagem padrão.”

Se $r  contiver registros do banco de dados, nós precisamos agora organiza-los (fetch). A função mysql_fetch_assoc() pega o resultado da query (resource) e organiza cada registro em um array associativo (isso significa que quando salvarmos o resultado de mysql_fetch_assoc() na variável $a, os dados do registro poderão ser acessados pelo nome das suas colunas, por exemplo: $a[‘title’].

No entanto, mysql_fetch_assoc() só nos fornece um registro por vez. Para obtermos todos os registros do resultado, temos quer usar um loop while. Na verdade estamos dizendo “ENQUANTO $r possuir registros que ainda não usamos, pegue o próximo registro da fila e faça essas ações com ele.”

Neste caso estamos validando o registro para termos certeza de que ele contém dados, removemos as barras que adicionamos quando o salvamos no banco de dados usando a função nativa do PHP stripslashes(). Depois disso nós simplesmente colocamos as variáveis em algum HTML e pronto, já temos dados visualizados na tela!

Como último passo da criação do nosso “mini CMS”, o código adiciona um link no rodapé que permite que usuários adicionem um registro. Vale a pena notar o uso do operado “.=” utilizado no loop while e ao criar o link “Adicionar Novo Registro”; uma função só pode retornar um único valor, então nós precisamos “pendurar” (append) a nova informação na variável existente. Se utilizarmos somente o sinal (“=”), nós iriamos sobrescrever os dados existentes e terminaríamos com um link para o formulário sem nenhum conteúdo.

Então, você acabou de programar a primeira classe do seu CMS! Você já consegue inserir e ler dados de um banco de dados.

Utilizando a classe

Para usarmos nossa classe, precisamos criar um arquivo separado. Vou chama-lo de “display.php”, que irei salvar na pasta principal da aplicação, com nossa classe salva no arquivo “simpleCMS.php” em uma pasta chamada “_class”, dentro da pasta principal.

Para começarmos, vamos criar uma página HTML simples.

 Para usarmos nossa classe temos apenas que inserir um pouco de PHP entre as tags do HTML:

Antes de mais nada, nós precisamos incluir o arquivo da classe com a função include_once(). Segundo, nós temos que instanciar nosso objeto para que nosso CMS saiba o que está acontecendo. Terceiro, nós configuramos todas aquelas variáveis que mencionamos no início deste tutorial. Você vai precisar alterar aqueles valores com as informações de acesso do seu banco de dados. E quarto, nós nos conectamos com o banco de dados através do método connect().

Depois que conectarmos com o banco, verificamos se existe algum dado no  $_POST. Isso porque estamos utilizando o mesmo arquivo para inserir, processar e visualizar os dados do nosso CMS. Se nada foi enviado através do $_POST, executamos a função write() para validar e salvar os dados no banco.  Então utilizamos um pequeno algoritmo com uma declaração condicional. Resumidamente estamos dizendo “SE $_GET[‘admin’] for igual a 1, então mostre o formulário utilizando o método display_admin(), DO CONTRÁRIO mostre os registros guardados no banco utilizando o método display_public().”

E é isso! Uma vez que você pegar o jeito, essa parte básica de programação vai permitir que você crie e programe coisas mais complexas, ao ponto de ter controle total sobre o website que construir, mesmo que talvez queira construir seu próprio CMS do zero ou simplesmente melhorar algum CMS que já existe, por exemplo, criando um plugin para o WordPress.

Fabio Ferreira on EmailFabio Ferreira on InstagramFabio Ferreira on Twitter
Fabio Ferreira

Desenvolvedor Javascript e PHP, é editor do blog Café na Veia e também atua como desenvolvedor web freelancer na cidade de São Paulo.


Author: Fabio Ferreira

Desenvolvedor Javascript e PHP, é editor do blog Café na Veia e também atua como desenvolvedor web freelancer na cidade de São Paulo.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Instagram did not return any images.

Siga também nosso Instagram!