Projeto Integrador - 2010.1 - Equipe Café On-Line
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
- The primary network interface
- 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
- 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
- aptotude update; aptitude install iptables
</syntaxhighlight>
script /etc/init.d/fw:
- !/bin/sh
- Interfaces
IFACE_INTERNA="eth1"
IFACE_EXTERNA="eth0"
- Habilita ip forward
echo 1 > /proc/sys/net/ipv4/ip_forward
- Habilita syncookies (evita que um grande numero de pacotes SYN, estourem o limite de conexões)
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
- NAT
iptables -t nat -A POSTROUTING -o ${IFACE_EXTERNA} -j MASQUERADE
- 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
- Bloqueio para acesso direto ao Proxy
iptables -A INPUT -m tcp -p tcp ! -s 127.0.0.1 --dport 3128 -j DROP
- limita resposta a "ping"
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
- 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
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
- Instalando e configurando
- aptitude update; aptitude install ntp
</syntaxhighlight>
Arquivo /etc/ntp.conf: Arquivo de configuração do daemon ntpd. Abaixo os parâmetros alterados.
- blablabla..
- Linhas adicionadas para que o ntpd sincronize o horário com os servidores abaixo
- servido da rnp
server ntp.cais.rnp.br
- servidor "a" do observatório nacional
server a.ntp.br
- servidor "b" do observatório nacional
server b.ntp.br
- blablabla...
- Restringe o acesso ao servidor ntp apenas a dispositivos da rede local
restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap
- 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
- 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]
- 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.
- Lista de usuários que podem solar no servidor
AllowUsers nx cafeonline
- porta na qual o serviço ficara ativo
Port 22
- 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:
- !/bin/bash
- O objetivo deste scritp e realizar backup do servidor em um diretório local, em DVD
- e ainda enviar uma copia a um servidor remoto via ssh
- Escrito por: equipe cafeonline para o projeto integrador do curso técnico
- em telecomunicações com enfase em redes (erixtec@gmail.com)
- Ultima alteração em: 05/07/2010 para: Modificar acesso remoto, para usar o sshfs
- Variáveis de uso geral
- Formata a data utilizada para identificar quando o backup foi realizado
DATA=`date +%d-%m-%Y-%H-%M`
- Diretorio onde sera feito o backup
DIRBKP=/var/backup/local
- Nome do arquivo compactado
NOMEARQUIVO=server-cafeonline-backup-local.tar.bz2
- Variáveis para gravação em DVD
- Dispositivo usado para a gravação em /dev/dispositivo como em /dev/sr0
DEVICE=/dev/dvd
- Velovidade de gravação
VELGRAV=4
- Diretorio a ser gravado
DIRGRAV=/var/backup/local
- Variáveis para backup remoto
- Servidor onde sera armazenado o backup
SERVERSSH=eris.dontexist.net
- Porta do SSH no servidor de backup
PORTSERVERSSH=22
- Usuario usado para logar no servidor de backup
USERSSH=backup
- Diretorio Usado para armazenar o backup no servidor remoto
DIRREMOTO=/backup/server-cafeonline
- Diretorio onde sera montado o diretório remoto a fim de receber o backup
DIRMNT=/mnt/backupremoto
- Inicio do bakup #####
- Cria o diretório de backup caso ele não exista
mkdir -p $DIRBKP
- Acessa o diretório
cd $DIRBKP
echo "Backup $DATA iniciado" >$DIRBKP/log-backup.txt
- 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/* /
- Gravar em DVD #####
- Fecha a "gaveta" da unidade de DVD caso esteja aberta
eject -t
- Coleta informações da mídia
- (algumas vezes a mídia não é reconhecida se não for executado este comando)
dvd+rw-mediainfo $DEVICE
- Formata DVD-RW (opções uteis -force, -lead-out)
dvd+rw-format -gui -blank $DEVICE
sleep 5
- Iden acima para este comando
dvd+rw-mediainfo $DEVICE
- Grava os arquivos
echo "Gravação iniciada as $DATA " >>$DIRBKP/log-backup.txt
- grava o backup
growisofs -speed=$VELGRAV -Z $DEVICE -R -J $DIRGRAV
sleep 5
echo "Gravação finalizada as $DATA" >>$DIRBKP/log-backup.txt
- Ejeta o DVD
eject
- Backup Remoto Via sshfs #####
- Monta o diretório remoto
sshfs $USERSSH@$SERVERSSH:$DIRREMOTO $DIRMNT -o reconnect,sshfs_sync,allow_other -p $PORTSERVERSSH
- 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:
- 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):
- ssh-keygen -t rsa
- scp ~/.ssh/id_rsa.pub backup@eris.dontexist.net:/backup
- chmod 700 ~/.ssh
- 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
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:
- aptitude update; aptitude install dhcp3-server
</syntaxhighlight>
Arquivo: /etc/dhcp3/dhcpd.conf configurações do servidor dhcp.
- Integração com os outros serviços
- Atualizar alguma informação com origem no DNS? Nenhuma (none).
ddns-update-style none;
- O 'log' das atividades do servidor serão registradas pela 'facility' local7 - arquivo /var/log/sys
log
log-facility local7;
- 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 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:
- aptitude update; aptitude install squid3
</syntaxhighlight>
Arquivo: /etc/squid3/squid.conf Principal arquivo de configuração
- blablabla...
- substituir http_port 3128, por: http_port 3128 transparent
http_port 3128 transparent
- blablabla...
visible_hostname www.cafeonline.sj.ifsc.edu.br
- 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:
- aptitude update; aptitude install dansguardian
</syntaxhighlight>
Arquivo: /etc/dansguardian/dansguardian.conf comentar a linha
- blablabla...
- comentar a linha abaixo
- UNCONFIGURED
- blablabla...
- alterar as mensagens para português do Brasil:
language = 'ptbrazilian'
- blablabla...
</syntaxhighlight>
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:
- 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ções avançadas:
Configurações de segurança(desabilitado conforme especificação do projeto):
Configurações de rede e dhcp:
Aplicação
Autenticação
- Página principal do site (index.html):
<html>
<head>
<title>Café 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é Online </title>
<link rel="stylesheet" media="all" type="text/css" href="style.css" />
</head>
<body>
<h1><center> Autenticaçã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éOnline </title>
<link rel="stylesheet" media="all" type="text/css" href="style.css" />
</head>
<body bgcolor="000000" text="FFFFFF">
<h1>Cadastro de anú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ítulo: <br>
<input type:"text" name="titulo">
<p> Nome do cliente: <br>
<input type:"text" name="nome">
<p> Anú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é 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úncio cadastrado com sucesso <br></h2>";
echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de anúncios</a>";
}else{
echo "Erro ao cadastrar anú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é online </title>
</head>
<body bgcolor="000000" text="FFFFFF">
<h1>Listagem de anú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ítulo do anúncio</th>";
echo "<th>Validade</th>";
echo "<th>Açõ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 </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ú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ú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í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ú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úncio expirado?
<?$data = date("Y-m-d");
$timestamp1 = strtotime($linha['VALIDADE']);
$timestamp2 = strtotime($data);
if ($timestamp1 < $timestamp2){
echo "Sim<br>";
}else{
echo "Nã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é 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úncios</a>";
}else{
echo "Erro ao Atualizar";
"<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/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");
}
?>
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é 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úncio exlcluido<br></h2>";
echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Voltar para lista de anú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;}