Mudanças entre as edições de "Projeto Integrador - 2010.1 - Equipe Café On-Line"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 607: Linha 607:
  
 
*Devido a problemas com os roteadores é provável que este serviço sera configurado no Access Point.
 
*Devido a problemas com os roteadores é provável que este serviço sera configurado no Access Point.
 +
 +
[[==Dia 02/07/2010==]]
  
 
==Dia 16/6/2010==
 
==Dia 16/6/2010==

Edição das 05h40min de 7 de julho de 2010

Descrição das atividades por datas - Projeto Integrador 2010-1

Dia: 08/6/2010

Criação do nome da equipe: Café On-line.

Cabeamento

  • Foi passado os cabos do Patch Panel do Armário Principal para o Armário Café On-line.
  • Feitos os pontos de acesso (Tomadas).
  • Padrão 568A.

Gerência de Rede

  • Instalação do Sistema Operacional, definido pela equipe.


Hardware do servidor

*Processador:
# lshw -short -c cpu
H/W path         Device      Class       Description
====================================================
/0/4                         processor   Intel(R) Celeron(R) CPU 2.26GHz

*Memoria:
# lshw -short -c memory
H/W path         Device      Class       Description
====================================================
/0/4/5                       memory      16KiB L1 cache
/0/4/6                       memory      256KiB L2 cache
/0/2f                        memory      512MiB System Memory
/0/2f/0                      memory      256MiB DIMM DDR Synchronous 333 MHz (3.0 ns)
/0/2f/1                      memory      256MiB DIMM DDR Synchronous 333 MHz (3.0 ns)

*Rede
# lshw -short -c network
H/W path         Device      Class       Description
====================================================
/0/100/1e/1      eth1        network     RTL-8169 Gigabit Ethernet
/0/100/1e/8      eth0        network     82801DB PRO/100 VE (LOM) Ethernet Controller


*Disco
# lshw -short -c disk
H/W path         Device      Class       Description
====================================================
/0/100/1f.1/0    /dev/sda    disk        41GB Maxtor 6E040L0
/0/100/1f.1/1    /dev/cdrom  disk        CD/DVDW SH-S182D

*Video
# lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 82845G/GL[Brookdale-G]/GE 
Chipset Integrated Graphics Device (rev 01)

Para informações adicionais executar
# dmidecode | less

Distribuição utilizada:

# lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 10.04 LTS
Release:        10.04
Codename:       lucid

Utilizamos a Distribuição Ubuntu Server LTS. por ser a de maior familiaridade entre os integrantes da equipe e na "versão" LTS por ter suporte por um período de tempo maior que as demais versões do Ubuntu, possibilitando que a experiencia realizada no projeto possa ser aproveitada no futuro sem grandes alterações.

Particionamento usado:

Partição     "Tamanho"    Tipo       Ponto de montagem
====================================================
/dev/sda1     285MB       EXT3            /boot
/dev/sda2     717MB    Linux/swap 
/dev/sda3     36GB        EXT4            /
  • Rede cafeonline:

Rede externa: IP:200.135.37.100 Mascara: 255.255.255.192 (/26) Broadcast 200.135.37.127 Rede:200.135.37.64/26 1°IP valido: 200.135.37.65 Ultimo IP valido: 200.135.37.126 Gateway:200.135.37.126 </syntaxhighlight> Rede interna: IP:192.168.100.1 Mascara: 255.255.255.0 (/24 ) Broadcast 192.168.100.255 Rede:192.168.100.0 1°IP valido: 192.168.100.1 Ultimo IP valido: 192.168.100.254 Gateway:¿? </syntaxhighlight>

  • configuração de rede

Arquivo /etc/network/interfaces: Arquivo de configuração das interfaces de rede

auto lo iface lo inet loopback

  1. The primary network interface
  2. Interface externa ip 200.135.37.100/26

auto eth0 iface eth0 inet static

       address 200.135.37.100
       netmask 255.255.255.192
       broadcast 200.135.37.127
       network 200.135.37.64
       gateway 200.135.37.126
       # dns-* options are implemented by the resolvconf package, if installed
       dns-nameservers 127.0.0.1 ns1.cafeonline.sj.ifsc.edu.br
       dns-search cafeonline.sj.ifsc.edu.br


  1. Interface interna ip 192.168.100.1/24

auto eth1 iface eth1 inet static

       address 192.168.100.1
       netmask 255.255.255.0
       network 192.168.100.0
       broadcast 192.168.100.255

</syntaxhighlight> Arquivo /etc/resolv.conf: Arquivo de configuração dos servidores DNS que o sistema utilizara, no caso é a própria maquina pois ela sera um servidor também DNS.

nameserver 127.0.0.1

</syntaxhighlight>

Scritp basico para "NAT" e redirecionamento de portas, utilizando o netfilter/iptables[1]

Instalando

  1. aptotude update; aptitude install iptables

</syntaxhighlight>

script /etc/init.d/fw:

  1. !/bin/sh
  1. Interfaces

IFACE_INTERNA="eth1" IFACE_EXTERNA="eth0"

  1. Habilita ip forward

echo 1 > /proc/sys/net/ipv4/ip_forward

  1. Habilita syncookies (evita que um grande numero de pacotes SYN, estourem o limite de conexões)

echo 1 > /proc/sys/net/ipv4/tcp_syncookies

  1. NAT

iptables -t nat -A POSTROUTING -o ${IFACE_EXTERNA} -j MASQUERADE

  1. Redirecionamento para o Analisador de Conteúdo Dansguardian

iptables -t nat -A PREROUTING -i ${IFACE_INTERNA} -p tcp --dport 80 \ -j REDIRECT --to-port 8080

  1. Bloqueio para acesso direto ao Proxy

iptables -A INPUT -m tcp -p tcp ! -s 127.0.0.1 --dport 3128 -j DROP

  1. limita resposta a "ping"

iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

  1. Bloqueia pacotes invalidos

iptables -A INPUT -m state --state INVALID -j DROP


exit 0 </syntaxhighlight>

Iniciar o script junto com o sistema

update-rc.d fw start 01 2 3 4 5 </syntaxhighlight>


Link's uteis: Ubuntu server guide:[2] em pdf[3], Pesquisa no Guia FOCA [4], google/linux [5] --Eris 12:54, 5 Julho 2010 (BRT)

Fotos do Primeiro Dia

Portas das Tomadas do Patch Panel do Armário Café On-line.
Portas do Patch Panel Armário Principal da equipe Café On-line.
Portas que chegam do Armário Principal para o Armário Café On-line.
Rack Armário Principal.
Rack Café On-line.

Dia: 09/6/2010

Cabeamento

  • Verificamos se a parte de cabeamento ta ok.
  • Foi visto que os Patch Panel do Lab. de Transmissão não funcionam muito bem.

Gerência de Rede

Instalação e configuração dos serviços

  • NTP
  • DNS

NTP

  • NTP[6] (Network Time Protocol ou Protocolo de Tempo para Redes). É um protocolo que permite a sincronização dos relógios dos dispositivos de uma rede como servidores, estações de trabalho, roteadores e outros equipamentos à partir de referências de tempo confiável[7] Portas 123UDP/TCP.


  • Instalando e configurando

  1. aptitude update; aptitude install ntp

</syntaxhighlight>

Arquivo /etc/ntp.conf: Arquivo de configuração do daemon ntpd. Abaixo os parâmetros alterados.

  1. blablabla..
  2. Linhas adicionadas para que o ntpd sincronize o horário com os servidores abaixo
  3. servido da rnp

server ntp.cais.rnp.br

  1. servidor "a" do observatório nacional

server a.ntp.br

  1. servidor "b" do observatório nacional

server b.ntp.br

  1. blablabla...
  2. Restringe o acesso ao servidor ntp apenas a dispositivos da rede local

restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap

  1. blablabla...

</syntaxhighlight>


link's uteis: ntp.br [8], guia rápido de configuração do ntp.br [9], manual sobre ntp da rnp[10], documentação no ntp.org [11]

--Eris 12:53, 5 Julho 2010 (BRT)

DNS

  • DNS (Domain Name System - Sistema de Nomes de Domínios) é um sistema de gerenciamento de nomes hierárquico e distribuído que permite a "tradução" de nomes de "maquinas" em endereços IP.

Portas utilizadas: 53 UDP/TCP

Instalação e configuração de servidor DNS(BIND9[12])

  • Instalar
  1. aptitude update; aptitude install bind9

</syntaxhighlight> Arquivo /etc/bind/named.conf.options:: Neste arquivo vão configurações "globais" do bind.

options {

              directory "/var/cache/bind";
       version "N/A"; # Não exibe versão do bind
       listen-on-v6 { any; };
          listen-on { any; };
          allow-recursion { 127.0.0.0/8; 192.168.100.0/24; }; # define quem pode faver consultas recursssivas ao servidor
          allow-query { any; }; # define quem pode consultar o servidor
          allow-query-cache { any; };

};


</syntaxhighlight>

Arquivo /etc/bind/named.conf.local: Neste arquivo indicamos o domínio a ser configurado e em quais arquivos ficarão as configurações deste e do DNS reverso.

... zone "cafeonline.sj.ifsc.edu.br" {

type master;
file "/etc/bind/dbcafeonline.sj.ifsc.edu.br";

}; zone "100.64-127.37.135.200.in-addr.arpa" {

type master;
file "/etc/bind/db100.64-127.37.135.200.in-addr.arpa";

};

</syntaxhighlight>

Arquivo /etc/bind/dbcafeonline.sj.ifsc.edu.br: Arquivo com as configurações do domínio

$TTL 86400 @ IN SOA server.cafeonline.sj.ifsc.edu.br. admin.cafeonline.sj.ifsc.edu.br. (

   2010063001   ; serial
           1d   ; refresh
           1h   ; retry
           1w   ; expire
           1d   ; negative cache ttl

) @ IN NS server @ IN A 200.135.37.100 @ IN MX 0 mail.cafeonline.sj.ifsc.edu.br. server IN A 200.135.37.100 ns1 IN A 200.135.37.100 mail IN A 200.135.37.100 www IN A 200.135.37.100 smtp IN CNAME mail.cafeonline.sj.ifsc.edu.br. pop IN CNAME mail.cafeonline.sj.ifsc.edu.br. imap IN CNAME mail.cafeonline.sj.ifsc.edu.br. ssl IN CNAME www.cafeonline.sj.ifsc.edu.br. cacti IN CNAME www.cafeonline.sj.ifsc.edu.br. cafeonline.sj.ifsc.edu.br. IN TXT "v=spf1 mx -all"

</syntaxhighlight>

Arquivo /etc/bind/db100.64-127.37.135.200.in-addr.arpa: Arquivo com as configurações do DNS reverso

$TTL 86400

Start of Authority
início de autoridade

@ IN SOA ns1.cafeonline.sj.ifsc.edu.br. admin.cafeonline.sj.ifsc.edu.br. (

 2010070501        ; Serial
 1d        ; Refresh
 4h        ; Retry
 1w        ; Expire
 1d )    ; Negative Cache TTL
Name Server
servidores DNS

@ IN NS ns1.cafeonline.sj.ifsc.edu.br.

Address
endereço

100 IN PTR ns1.cafeonline.sj.ifsc.edu.br.


</syntaxhighlight> --Eris 12:53, 5 Julho 2010 (BRT)

Dia: 10/6/2010

Cabeamento

  • Verificamos a parte dos Patch Panel, apenas uma porta não funciona.


Dia: 11/6/2010

Gerência de Rede

  • Configurado acesso remoto.

SSH[13]: É um protocolo de rede que permite acesso remoto seguro(conexão entre cliente e servidor criptografada), Porta 22TCP.

Instalando e configurando o OpenSSH-Server[14]

  1. aptitude update; aptitude install openssh-server

</syntaxhighlight>

Arquivo /etc/ssh/sshd_config: Neste arquivo de configuração do servidor ssh. Abaixo apenas os parâmetros a adicionar ou alterar.

  1. Lista de usuários que podem solar no servidor

AllowUsers nx cafeonline

  1. porta na qual o serviço ficara ativo

Port 22

  1. Define se o usuario root podo acessar via ssh

PermitRootLogin no

</syntaxhighlight>

Gerência de Rede/Programação

  • Configurado scritp de backup/acesso automatizado ao servidor de backup externo

Scritp de backup:

  1. !/bin/bash
  2. O objetivo deste scritp e realizar backup do servidor em um diretório local, em DVD
  3. e ainda enviar uma copia a um servidor remoto via ssh
  4. Escrito por: equipe cafeonline para o projeto integrador do curso técnico
  5. em telecomunicações com enfase em redes (erixtec@gmail.com)
  6. Ultima alteração em: 05/07/2010 para: Modificar acesso remoto, para usar o sshfs


            1. Variáveis de uso geral
  1. Formata a data utilizada para identificar quando o backup foi realizado

DATA=`date +%d-%m-%Y-%H-%M`

  1. Diretorio onde sera feito o backup

DIRBKP=/var/backup/local

  1. Nome do arquivo compactado

NOMEARQUIVO=server-cafeonline-backup-local.tar.bz2


          1. Variáveis para gravação em DVD
    1. Dispositivo usado para a gravação em /dev/dispositivo como em /dev/sr0

DEVICE=/dev/dvd

    1. Velovidade de gravação

VELGRAV=4

    1. Diretorio a ser gravado

DIRGRAV=/var/backup/local


          1. Variáveis para backup remoto
    1. Servidor onde sera armazenado o backup

SERVERSSH=eris.dontexist.net

    1. Porta do SSH no servidor de backup

PORTSERVERSSH=22

    1. Usuario usado para logar no servidor de backup

USERSSH=backup

    1. Diretorio Usado para armazenar o backup no servidor remoto

DIRREMOTO=/backup/server-cafeonline

    1. Diretorio onde sera montado o diretório remoto a fim de receber o backup

DIRMNT=/mnt/backupremoto


          1. Inicio do bakup #####
  1. Cria o diretório de backup caso ele não exista

mkdir -p $DIRBKP

  1. Acessa o diretório

cd $DIRBKP

echo "Backup $DATA iniciado" >$DIRBKP/log-backup.txt

    1. Cria o arquivo compactado de backup

tar -cvpjf $NOMEARQUIVO --exclude=/lost+found/* --exclude=/dev/* --exclude=/sys/* \

--exclude=/proc/* --exclude=/tmp/* --exclude=/var/tmp/*  --exclude=$DIRBKP  --exclude=/mnt/*  /


          1. Gravar em DVD #####
    1. Fecha a "gaveta" da unidade de DVD caso esteja aberta

eject -t

    1. Coleta informações da mídia
  1. (algumas vezes a mídia não é reconhecida se não for executado este comando)

dvd+rw-mediainfo $DEVICE

    1. Formata DVD-RW (opções uteis -force, -lead-out)

dvd+rw-format -gui -blank $DEVICE

sleep 5

  1. Iden acima para este comando

dvd+rw-mediainfo $DEVICE


    1. Grava os arquivos

echo "Gravação iniciada as $DATA " >>$DIRBKP/log-backup.txt

    1. grava o backup

growisofs -speed=$VELGRAV -Z $DEVICE -R -J $DIRGRAV sleep 5

echo "Gravação finalizada as $DATA" >>$DIRBKP/log-backup.txt

  1. Ejeta o DVD

eject

          1. Backup Remoto Via sshfs #####
    1. Monta o diretório remoto

sshfs $USERSSH@$SERVERSSH:$DIRREMOTO $DIRMNT -o reconnect,sshfs_sync,allow_other -p $PORTSERVERSSH

    1. Copia o backup

cp -v $DIRBKP/$NOMEARQUIVO $DIRMNT


sleep 5

fusermount -u $DIRMNT


exit 0


</syntaxhighlight>

Para a conexão com o servidor remoto sera utilizado o software sshfs[15] que usa o protocolo SSH e o FUSE[16] para montar um diretório remoto de forma que para o usuário pareça um diretório Local, o que torna mais simples "movimentar" arquivos entre os servidores.

Instalando:

  1. aptitude update; aptitude install sshfs

</syntaxhighlight> Para automatizar o login no servidor de backup(permitir que o script o faça "sozinho") sera preciso configurar o openssh-server[17](no servidor que recebera o backup) para aceitar login sem pedir senha, usando no lugar um par de chaves criptográficas[18]

No servidor local como root(ja que é este usuário que executara o script via cron):

  1. ssh-keygen -t rsa
  2. scp ~/.ssh/id_rsa.pub backup@eris.dontexist.net:/backup
  3. chmod 700 ~/.ssh
  4. chmod 600 ~/.ssh/id_rsa

</syntaxhighlight> No servidor remoto: backup@buxtehude ~]% cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys % rm -rf id_rsa.pub % chmod 600 ~/.ssh/authorized_keys </syntaxhighlight>

Link's uteis: openssh manual [19], CentOS HowTos [20] --Eris 13:22, 5 Julho 2010 (BRT)

Dia 14/6/2010

Aula após o Intervalo, pois tivemos que apresentar um trabalho.

Instalação de Equipamento

  • Implantação dos Modems, como o cabo que interliga os laboratórios chega no RACK da direita, acabamos instalando todos os modems no mesmo lugar onde o fio chegava.
  • Rede interna: 192.168.100.0/24.

Cabeamento

  • Foi feito os Patch Cord.


Fotos certificação do Link físico

Roteador Cisco, Modem Parks e Modem Digitel.
Modems sincronizados
Link de 2Mbps certificado!
Link 64Kbps certificado!
Conexão Modem
Diagrama de interconexão física dos laboratórios.


Dia 15/6/2010

Instalação de Equipamento

  • Inicio das configurações dos modems.

Programação

  • Iniciamos a página de autenticação.

Cabeamento

  • Realizamos testes do link.
  • Apenas uma porta não funciona.

Gerência de Rede

  • Configurado DHCP

DHCP[21] (Dynamic Host Configuration Protocol, protocolo de configuração dinâmica de hosts) é um protocolo para configuração dinâmica de parâmetros de rede como endereço IP, DNS, Gateway etc. Porta 67/UDP.

Instalando:

  1. aptitude update; aptitude install dhcp3-server

</syntaxhighlight>

Arquivo: /etc/dhcp3/dhcpd.conf configurações do servidor dhcp.

  1. Integração com os outros serviços
  2. Atualizar alguma informação com origem no DNS? Nenhuma (none).

ddns-update-style none;

  1. O 'log' das atividades do servidor serão registradas pela 'facility' local7 - arquivo /var/log/sys

log log-facility local7;

  1. Rede interna: 192.168.100.0/24

subnet 192.168.100.0 netmask 255.255.255.0 {

  #
  # Faixa de IPs disponíveis
  range 192.168.100.2 192.168.100.253;
  #
  # Máscara de rede    
  option subnet-mask 255.255.255.0;
  #
  #Endereço de 'broadcast'
  option broadcast-address 192.168.100.255;
  #
  # Rotas
  option routers 192.168.100.1;
  #
  # Servidores e domínios DNS
  option domain-name-servers 192.168.100.1;
  option domain-name "cafeonline.sj.ifsc.edu.br";

  # Tempo predefinido e máximo de "aluguel" (lease): 4h e 1 dia respectivamente
  default-lease-time 14440;
  max-lease-time 86400;

}

</syntaxhighlight>

  • Devido a problemas com os roteadores é provável que este serviço sera configurado no Access Point.

==Dia 02/07/2010==

Dia 16/6/2010

Gerência de Rede

  • Squid e Dansguardian.

Squid[22] é um servidor proxy[23] e cache de paginas web. Porta 3128 TCP

Instalando:

  1. aptitude update; aptitude install squid3

</syntaxhighlight> Arquivo: /etc/squid3/squid.conf Principal arquivo de configuração

  1. blablabla...
  1. substituir http_port 3128, por: http_port 3128 transparent

http_port 3128 transparent

  1. blablabla...

visible_hostname www.cafeonline.sj.ifsc.edu.br

  1. blablabla...

</syntaxhighlight>

Dansguardian[24] é um software para filtrar conteúdo web que funciona em conjunto com o squid, para a restringir o acesso a paginas web ou a conteúdo das mesmas, sera usado no projeto pois permite modificar o código das paginas acessadas através dele. Porta 8080 TCP

Instalando:

  1. aptitude update; aptitude install dansguardian

</syntaxhighlight> Arquivo: /etc/dansguardian/dansguardian.conf comentar a linha

  1. blablabla...
  1. comentar a linha abaixo
  2. UNCONFIGURED
  1. blablabla...
  1. alterar as mensagens para português do Brasil:

language = 'ptbrazilian'

  1. blablabla...

</syntaxhighlight>

Link's uteis: squid ninja[25] squid-cache brasil [26]

Dia 17/6/2010

Programação

  • Criação das tabelas no Mysql

Dia 18/6/2010 ao dia 24/6/2010

Programação

  • Andamento do Site


Dia 25/6/2010

Gerência de Rede

  • Email

Postfix [27] é um agente de transferência de emails (MTA), um software livre para envio e entrega de emails[28]. Porta 25TCP(SMTP[29])

Instalando:

  1. aptitude update; aptitude install postfix

</syntaxhighlight>

Arquivo: /etc/postfix/main.cf principal arquivo de configuração do postfix

myhostname = server.$mydomain mydomain = cafeonline.sj.ifsc.edu.br alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = $mydomain mydestination = $myhostname, $mydomain, mail.cafeonline.sj.ifsc.edu.br, smtp.cafeonline.sj.ifsc.edu.br, localhost.cafeonline.sj.ifsc.edu.br, localhost, localhost.localdomain

relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all

</syntaxhighlight>

Dia 02/07/2010

  • configuração do Access Point Wireless

Configuração básica: Basic-setting.png

Configurações avançadas:

1advanced-settings.png

Configurações de segurança(desabilitado conforme especificação do projeto):

1security.png

Configurações de rede e dhcp:

1systemutility.png

Aplicação

Autenticação

  • Página principal do site (index.html):
<html>
<head>
	<title>Caf&eacute; Online</title>
	<link rel="stylesheet" media="all" type="text/css" href="style.css" />
<body bgcolor="000000">
	<h1>Cadastros com Webmaster</h1>
	<p>webserver@cafeonline.sj.ifsc.edu.br</p>
	<p><a href="http://www.cafeonline.sj.ifsc.edu.br/autenticacao.php">Acesso Restrito</a></p>	
<center><IMG SRC="800x600.gif"></center>

</body>
</html>
  • Página de autenticação do admin (autenticacao.php):
<html>
<head>
        <title> Caf&eacute Online </title>
	<link rel="stylesheet" media="all" type="text/css" href="style.css" />        
</head>
<body>
        <h1><center> Autentica&ccedil;&atilde;o <center></h1>
        <form name="formulario" action="verificar.php" method="post">
                <p> Login: <br>
                <input type="text" name="login">
                <p> Senha: <br>
                <input type="password" name="senha"> <br>
                <input type="submit" name="b_enviar" value="Enviar" class="botoes" />
</body>
</html>
  • Página de verificação do login (verificar.php):
<?
	$admin = $_POST['login'];
	$senha = $_POST['senha'];

     if (($admin == 'admin') && ($senha == 'cafeonline')){
		session_start();
	 	$_SESSION['login'] = $admin;
		$_SESSION['senha'] = $senha;
		header("Location: listar.php");
         }else{
	    	header("Location: autenticacao.php");
         }
      
?>

Cadastro dos anúncios

  • Segue abaixo o código da página (cadastro.php) onde o admin digitará os dados do anúncio:
<?
	session_start();
	if(isset($_SESSION['login'])){
	
?>

<html>
<head>
   <title> Caf&eacute;Online </title>
   <link rel="stylesheet" media="all" type="text/css" href="style.css" />	
</head>
<body bgcolor="000000" text="FFFFFF">
   <h1>Cadastro de an&uacute;ncios</h1>
   <a href="http://www.cafeonline.sj.ifsc.edu.br/sair">Sair</a>
   <table align=center>
   <tr>
	<form name="formTeste" action="add.php" method="post">
	<table>
	   <tr><td>
  		<p> T&iacute;tulo: <br>
  		<input type:"text" name="titulo">
  		<p> Nome do cliente: <br>
  		<input type:"text" name="nome">
  		<p> An&uacute;ncio: <br>
  		<textarea rows="2" cols="20" name="texto"></textarea>
  		<p> Link: <br>
  		<input type:"text" name="link">
  		<p> Expira em: <br>
  		<input type:"text"name="validade"><br>
  		<input type="submit" name="b_enviar" value="Gravar"><BR>
	     </td>
	     <td>
	    	<img src="800x600.gif" border="0" width="600" height="400">
    	     </td>
	   </tr>
</body>
</html>

<?
	}else{
		header("Location: autenticacao.php");
}
?>


  • Depois de informados os dados do anúncio o admin é redirecionado para outra pagina onde será feita a conexão com o banco de dados mysql para inserir os dados nas tabelas.

Segue o código (add.php):

<?
        session_start();
        if(isset($_SESSION['login'])){

?>

<html>
<head>
	<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
	<link rel="stylesheet" media="all" type="text/css" href="style.css" />
	<title>Caf&eacute; Online</title>
</head>
<body bgcolor="000000" text="FFFFFF">
<?

  $titulo=$_POST['titulo'] ;
  $nome=$_POST['nome'] ;
  $texto=$_POST['texto'] ;
  $link=$_POST['link'] ;
  $validade=$_POST['validade'] ;

  if (!empty ($titulo) && !empty ($nome) && !empty ($texto) && !empty ($link) && !empty ($validade))
  {
	$conexao = mysql_connect("localhost","root","cafeonline") ;
	$base_ok = mysql_select_db("cafeonline",$conexao) or die ("erro 1");
	$inserir = "INSERT INTO anuncio (NOMECLIENTE, NOMEANUNCIO, TEXTO, LINK, VALIDADE) VALUES ('$nome', '$titulo', '$texto', '$link', '$validade')";
	$cadastrar = mysql_query($inserir,$conexao) or die("erro 2");
	mysql_close($conexao) or die("Erro fechar conexao");
	if($cadastrar==true)
	{
		echo "<h2>An&uacute;ncio cadastrado com sucesso <br></h2>";	
		echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de an&uacute;ncios</a>";
	}else{
		echo "Erro ao cadastrar an&uacute;ncio";
		echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de anúncios</a>";
	}
  }else{
	  echo "<h2>Erro, campos vazios<br></h2>";
	  echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/cadastro'>Voltar para cadastro</a>";
  }
header("Content-Type: text/html; charset=ISO-8859-1", true);
?>
</body>
</html>

<?
        }else{
                header("Location: autenticacao.php");
}
?>

Listagem de anúncios

  • Na página listar.php é feita a conexão com o banco de dados e também a consulta nas tabelas, para fazer a listagem dos anúncios ja cadastrados, e através dessa página pode-se selecionar um anúncio o qual deseja editar ou excluir.
<?

	session_start();
	if (isset($_SESSION['login'])){
		
?>
<html>
<head>
	<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
	<link rel="stylesheet" media="all" type="text/css" href="style.css" />
	<title> Caf&eacute; online </title>
</head>
<body bgcolor="000000" text="FFFFFF">
	<h1>Listagem de an&uacute;ncios</h1>
	<a href="http://www.cafeonline.sj.ifsc.edu.br/sair">Sair</a>
	<table><tr><td valign="top">
<?
$conexao = mysql_connect("localhost","root","cafeonline") or die ("ERRO");
if($conexao) // se $conexao é true, ou seja, conectou ao banco de dados, seleciona com qual banco deseja trabalhar.
{
	mysql_select_db("cafeonline") or die ("erro 1"); //seleciona qual o banco
	$query = "SELECT * FROM anuncio" or die ("erro 2"); //seleciona tudo (*), de uma tabela chamada anuncio
	$dados = mysql_query($query,$conexao) or die ("erro 3");

	echo "<table class='stats'>";
	echo "<th>Nome do cliente</th>";
	echo "<th>T&iacute;tulo do an&uacute;ncio</th>";
	echo "<th>Validade</th>";
	echo "<th>A&ccedil;&otilde;es</th>";
	 
	while($linha=mysql_fetch_array($dados,MYSQL_ASSOC))
	{
	$id = $linha["IDANUNCIO"];	
		echo "<tr><td>" . $linha["NOMECLIENTE"] . "</td>" ;
		echo "<td>" . $linha["NOMEANUNCIO"] . "</td>" ;
		echo "<td>" . $linha["VALIDADE"] . "</td>" ;
		echo "<td><a href='excluir.php?id=$id' style='text-decoration:none'>Excluir&nbsp;&nbsp;</a>";
		echo "<a href='editar.php?id=$id' style='text-decoration:none'>Editar</a></td></tr>";
	}
	echo "</table>";
	echo "<center><a href='http://www.cafeonline.sj.ifsc.edu.br/cadastro'>Incluir novo an&uacute;ncio</a></center>";
	mysql_close($conexao) or die ("erro 5");
}
header("Content-Type: text/html; charset=ISO-8859-1", true); 
?>
</td><td>
<img src="800x600.gif" border="0" width="600" height="400" align="right"></td></tr></table>
</body>
</html>

<?
	}else{
	header("Location: autenticacao.php");
}
?>


Editando e atualizando os anúncios

  • Depois de selecionado um anúncio na página de listagem o admin é direcionado para a página de edição de anúncios. E então são mostrados os dados que já estão cadastrados do anúncio selecionado, podendo alterar o que desejar e depois apertando no botão gravar que é direcionado para a página onde será feita a atualização do banco de dados.

Segue o código da página de edição de anúncios (editar.php):

<?
	session_start();
	if(isset($_SESSION['login'])){
	
?>

<html>
<head>
	<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
	<link rel="stylesheet" media="all" type="text/css" href="style.css" />
	<title> Caf&eacte; online </title>
</head>
 <body bgcolor="000000" text="FFFFFF">
  <h1>Editar an&uacute;ncio </h1>
  <a href="http://www.cafeonline.sj.ifsc.edu.br/sair">Sair</a>
  
<?	
	$id = $_GET['id'];
	$conexao = mysql_connect("localhost","root","cafeonline") ;
	mysql_select_db("cafeonline") or die ("erro 1");
	$query = ("select * from anuncio where IDANUNCIO=$id");
	$dados = mysql_query($query,$conexao);
	$linha=mysql_fetch_array($dados,MYSQL_ASSOC);
	mysql_query($linha);
	header("Content-Type: text/html; charset=ISO-8859-1", true);
?>
  <form name="formTeste" action="add2.php?id=<? echo $id ?>" method="post">
	<table>
	   <tr>
    	     <td>
  		<p> T&iacute;tulo: <br>
  		<input type:"text" name="titulo" value="<? echo  $linha['NOMEANUNCIO']  ?>">
  		<p> Nome do cliente: <br>
  		<input type:"text" name="nome" value="<? echo  $linha['NOMECLIENTE']  ?>">
  		<p> An&uacute;ncio: <br>
  		<textarea rows="2" cols="20" name="texto"><? echo  $linha['TEXTO']  ?></textarea>
  		<p> Link: <br>
  		<input type:"text" name="link" value="<? echo  $linha['LINK']  ?>">
  		<p> Expira em: <br>
  		<input type:"text"name="validade" value="<? echo  $linha['VALIDADE']  ?>">
  		<p> An&uacute;ncio expirado?
  		<?$data = date("Y-m-d");
		$timestamp1 = strtotime($linha['VALIDADE']);
		$timestamp2 = strtotime($data);
		if ($timestamp1 < $timestamp2){
			echo "Sim<br>";
		}else{
			echo "N&atilde;o<br>";
		}
		?>
		<input type="submit" name="b_enviar" value="Gravar"><BR>
	     </td>
	     <td>
	    	<img src="800x600.gif" border="0" width="600" height="400">
    	     </td>
	   </tr>
</body>
</html>


<?

	}else{
		header("Location: autenticacao.php");
	}
?>


  • Código onde é feita a atualização do banco de dados (add2.php):
<?
        session_start();
        if(isset($_SESSION['login'])){

?>

<html>
<head>
	<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
	<link rel="stylesheet" media="all" type="text/css" href="style.css" />
	<title>Caf&eacute; Online</title>
</head>
<body bgcolor="000000" text="FFFFFF">
<?
	$conexao = mysql_connect("localhost","root","cafeonline") ;
	$base_ok = mysql_select_db("cafeonline",$conexao);
	$id = $_GET['id'];
	$titulo=$_POST['titulo'] ;
	$nome=$_POST['nome'] ;
	$texto=$_POST['texto'] ;
	$link=$_POST['link'] ;
	$validade=$_POST['validade'] ;
	
	if (!empty ($titulo) && !empty ($nome) && !empty ($texto) && !empty ($link) && !empty ($validade))
	{
		$update=mysql_query("UPDATE anuncio SET NOMECLIENTE='$nome', NOMEANUNCIO='$titulo', TEXTO='$texto', LINK='$link', VALIDADE='$validade' WHERE IDANUNCIO='$id'");
		if($update==true)
		{
				echo "<h2>Dados atualizados com sucesso <br></h2>";	
				echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de an&uacute;ncios</a>";
		}else{
			echo "Erro ao Atualizar";
			"<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de an&uacutencios</a>";
		}
	}else{
		echo "<h2>Erro, campos vazios<br></h2>";
		echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar'>Voltar para lista de an&uacute;ncios</a>";
	}
header("Content-Type: text/html; charset=ISO-8859-1", true);
?>
</body>
</html>


<?
        }else{
                header("Location: autenticacao.php");
}
?>


Excluindo anúncios

Segue o código da página para exclusão de anúncios (excluir.php):

<?
	session_start();
	if(isset($_SESSION['login'])){

?>


<html>
<head>
	<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
	<link rel="stylesheet" media="all" type="text/css" href="style.css" />
	<title>Caf&eacute; Online</title>
</head>
<body bgcolor="000000" text="FFFFFF">
<?

$conexao = mysql_connect("localhost","root","cafeonline") ;
$base_ok = mysql_select_db("cafeonline",$conexao) or die ("erro 1");
$id=$_GET["id"]; 
$query = mysql_query("delete from anuncio where IDANUNCIO='$id'");
mysql_query($query);

if ($query==true)
{
echo "<h2>An&uacute;ncio exlcluido<br></h2>";
echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Voltar para lista de an&uacute;ncios</a>";
}else{
echo "Erro ao excluir anúncio";
echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Voltar para lista de anúncios</a>";
}
header("Content-Type: text/html; charset=ISO-8859-1", true);
?>
</body>
</html>

<?
	}else{
                header("Location: autenticacao.php");
}
?>

Botão sair

  • Nas páginas de listagem, cadastro e edição foram colocados links para o usuario sair da seção(sair.php):
<?
	session_start(); //iniciamos a sessão que foi aberta
	session_destroy(); //destruimos a sessão
	session_unset(); //limpamos as variaveis globais das sessões
	header("Location: autenticacao.php");
?>

CSS usado para estilo das páginas

  • Segue o código css para a estilização das páginas (style.css):
body {
	margin: 0;
	padding: 0;
	background: #000000;
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
	color: #CFCFCF;
}

h1, h2, h3 {
	margin: 0;
	padding: 0;
	font-weight: normal;
	color: #E8E8E8;
}

h1 {
	font-size: 2em;
}

h2 {
	font-size: 2.4em;
}

h3 {
	font-size: 1.6em;
}

p, ul, ol {
	margin-top: 0;
	line-height: 180%;
}

a {
	text-decoration: none;
	color: #860B28;
}

table.stats th
{text-align: center;
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif ;
font-weight: negrit;
font-size: 14px;
color: #fff;
width: 280px;
background-color: #000;
border: 1px solid;
border-collapse: collapse;
border-spacing: 1px;}

table.stats td
{background-color: #000;
color: #fff;
padding: 4px;
text-align: left;
border: 1px #fff solid;}