Ir para o conteúdo

Criar um Sistema de Artigos

base_de_dados.php

<?php

  // Dados de login

  $hostado = "localhost"; //Normalmente é localhost 
  $base_de_dados = "nome_da_base_de_dados";
  $utilizador = "utilizador_da_db";
  $password = "password";

  $conectando = mysql_connect($hostado, $utilizador, $password) or die ('Erro ligando há base de dados MySql');
  mysql_select_db($base_de_dados);
?>

Em cima inserimos os dados para fazer a ligação à base de dados e fazemos a ligação.

Criando a tabela no MySql

mysql_query ("CREATE TABLE `Artigos` 
  ( `id` INT NOT NULL AUTO_INCREMENT, `data` TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, 
  `titulo` TEXT NOT NULL, `conteudo` TEXT NOT NULL, PRIMARY KEY (id) ) TYPE=myisam ; ");

Aqui criamos a tabela necessária para o sistema funcionar.

artigo.php

<?php
  include 'base_de_dados.php';

  // se não for especificada o id listar
  if(!isset($_GET['id'])) {
    $self = $_SERVER['PHP_SELF'];

    $query = "SELECT id, titulo FROM Artigos ORDER BY id";
    $resultado = mysql_query($query) or die('Erro : ' . mysql_error()); 

    // Criando a lista de artigos
    $conteudo = '<ol>';
    while($row = mysql_fetch_array($resultado, MYSQL_NUM)) {
      list($id, $titulo) = $row;
      $conteudo .= "<li><a href=\"ver_artigo.php?id=$id\">$titulo</a></li>\r\n";
    }

    $conteudo .= '</ol>';

    $titulo = 'Artigos';
  } else {
    // Obtendo informação da base de dados
    $query = "SELECT titulo, conteudo FROM Artigos WHERE id=".$_GET['id'];
    $resultado = mysql_query($query) or die('Erro : ' . mysql_error()); 
    $row = mysql_fetch_array($resultado, MYSQL_ASSOC); 

    $titulo = $row['titulo'];
    $conteudo = $row['conteudo'];
  } 

  mysql_close($conn);
?>

<html>
  <head>
    <title>Artigos</title>
  </head>
  <body>
    <h1 align="center"><?php echo $titulo; ?></h1>
    <?php 
      echo $conteudo;
      // Links para ver os artigos
      if(isset($_GET['id'])) { 
    ?>
    <p>&nbsp;</p>
    <p align="center"><a href="<?php echo $_SERVER['PHP_SELF']; ?>">Lista de Artigos</a></p>
    <?php
      }
    ?>
    <div align="center" class="estilo3">(c) <a href="http://portugal-a-programar.org">Portugal-a-programar.org</a> - <b>Coder:</b> RevX</div>

  </body>
</html>

<?php
  include 'base_de_dados.php';

  // Para a cache crie na directoria dos php's a pasta cache e lá dentro 
  // o ficheiro index.html, mude para CHMOD 777

  $cacheDir = dirname(__FILE__) . '/cache/';

  if (isset($_GET['id'])) {
    $cacheFile = $cacheDir . '_' . $_GET['id'] . '.html';
  } else {
    $cacheFile = $cacheDir . 'index.html';
  } 

  if (file_exists($cacheFile)) {
    readfile($cacheFile);
    exit;
  }

  if(!isset($_GET['id'])) {
    $self   = $_SERVER['PHP_SELF'];

    $query  = "SELECT id, titulo FROM Artigos ORDER BY id";
    $resultado = mysql_query($query) or die('Erro : ' . mysql_error()); 

    $introducao = '<ol>';
    while($row = mysql_fetch_array($resultado, MYSQL_NUM)) {
      list($id, $titulo) = $row;
      $introducao .= "<li><a href=\"$self?id=$id\">$titulo</a></li>\r\n";
    }

    $introducao .= '</ol>';

    $titulo = 'Artigos';
  } else {
    // Obter informação da base de dados
    $query  = "SELECT titulo, texto_intro, texto_completo FROM Artigos WHERE id=".$_GET['id'];
    $resultado = mysql_query($query) or die('Error : ' . mysql_error()); 
    $row    = mysql_fetch_array($resultado, MYSQL_ASSOC); 

    $titulo = $row['titulo'];
    $introducao = $row['texto_intro'];
    $desenvolvimento = $row['texto_completo'];
  } 

  mysql_close($conn);

?>

Aqui definimos o index dos artigos.

criar_artigo.php

<html>
  <head>
    <title>Criar Artigo</title>
  </head>
  <body>

  <form method="post">
    <table width="100%" border="0" cellpadding="2" cellspacing="1" align="center">
      <tr> 
        <td width="100"><font color="#FF0000"><b>Titulo:</b></font></td>
        <td><input name="titulo" type="text" value="" size="53" /></td>
      </tr> 
      <tr> 
        <td width="100"><b>Conteúdo:</b></td>
        <td><textarea name="desenvolvimento" cols="50" rows="10"></textarea></td>
      </tr>
      <tr> 
        <td width="100">&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr> 
        <td colspan="2" align="center"><input name="gravar" type="submit" value="Gravar Artigo"></td>
      </tr>
    </table>
  </form>

  <?php
    if(isset($_POST['gravar'])) {
      $titulo   = $_POST['titulo'];
      $conteudo = $_POST['conteudo'];

      if(!get_magic_quotes_gpc()) {
        $titulo   = addslashes($titulo);
        $conteudo = addslashes($conteudo);
      }
      include 'base_de_dados.php';

      $query = " INSERT INTO Artigos (titulo, conteudo) ".
            " VALUES ('$titulo', '$conteudo')";
      mysql_query($query) or die('Erro ao ligar à Base de Dados');

      mysql_close($conn);

      echo "Artigo '$titulo' adicionado";
    }
?>

              </td>
            </tr>
          </table>
        </td>
      </tr>
    </table>
    <div align="center" class="estilo3">(c) <a href="http://portugal-a-programar.org">Portugal-a-programar.org</a> - <b>Coder:</b> RevX</div>

  </body>
</html>

Aqui criamos o sítio onde vamos introduzir os artigos para eles serem adicionados.

ver_artigo.php

<?php
  include 'base_de_dados.php';

  /*
    Escolhendo a directoria onde se vai armazenar a cache
  */ 
  $cacheDir  = dirname(__FILE__) . '/cache/';

  /*
    Gerando o nome do ficheiro de cache neste caso será feito um index apartir dos ids
  */
  if (isset($_GET['id'])) {
    $cacheFile = $cacheDir . '_' . $_GET['id'] . '.html';
  } else {
    $cacheFile = $cacheDir . 'index.html';
  }    

  /* 
    Se o ficheiro em cache for encontrado envia-se para o cliente
  */
  if (file_exists($cacheFile) {
    header("Content-Type: text/html");
    readfile($cacheFile);
    exit;
  }

  /*
    Se o ficheiro de cache não for encontrado/Não existir
  */

  // se não for especificada o id listar
  if(!isset($_GET['id'])) {
    $self = $_SERVER['PHP_SELF'];

    $query = "SELECT id, titulo FROM Artigos ORDER BY id";
    $resultado = mysql_query($query) or die('Erro : ' . mysql_error()); 

    // Criando a lista de artigos
    $conteudo = '<ol>';
    while($row = mysql_fetch_array($resultado, MYSQL_NUM)) {
      list($id, $titulo) = $row;
      $conteudo .= "<li><a href=\"$self?id=$id\">$titulo</a></li>\r\n";
    }

    $conteudo .= '</ol>';

    $titulo = 'Artigos';
  } else {
    // Obtendo informação da base de dados
    $query = "SELECT titulo, conteudo FROM Artigos WHERE id=".$_GET['id'];
    $resultado = mysql_query($query) or die('Error : ' . mysql_error()); 
    $row = mysql_fetch_array($resultado, MYSQL_ASSOC); 

    $titulo = $row['titulo'];
    $conteudo = $row['conteudo'];
  } 

  mysql_close($conn);
?>
<?php
  // iniciando buffering 
  ob_start();
?>
<html>
  <head>
    <title>
      <?php echo $titulo; ?>
    </title>
  </head>
  <body>

    <?php 
      echo $conteudo;

      // Links para ver os artigos
      if(isset($_GET['id'])) { 
    ?>
        <p>&nbsp;</p>
        <p align="center"><a href="<?php echo $_SERVER['PHP_SELF']; ?>">Lista de Artigos</a></p>
        <?php
      }
        ?>
    <div align="center" class="estilo3">(c) <a href="http://portugal-a-programar.org">Portugal-a-programar.org</a> - <b>Coder:</b> RevX</div>
  </body>
</html>
<?php

  // obter buffer
  $buffer = ob_get_contents();

  //acabando com o buffer
  ob_end_flush();

  // criando o ficheiro de cache
  $fp = @fopen($cacheFile, "w");
  @fwrite($fp, $buffer);
  @fclose($fp);
?>

Aqui vemos os artigos, estando este intimamente ligado ao artigo.php.