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 a "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
Dia 16/6/2010
Gerência de Rede
- Instalação do Squid e Dansguardian.
- Alteramos as regras de roteamento, afim de configurar um proxy transparente.
--Rubia Andrade 21:09, 16 Junho 2010 (BRT)
Aplicação
Criando banco de dados
- Primeiramente foram criadas as tabelas no mysql:
(colocar comandos usados na criação das tabelas)
Cadastro dos anúncios
- Segue abaixo o código da página (cadastro.html) onde o admin digitará os dados do anúncio:
<html>
<head>
<title> CaféOnline </title>
</head>
<body bgcolor="000000" text="FFFFFF">
<table align=center>
<tr>
<h1>Cadastro de anúncios</h1>
<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">
<p> Expirado:
<input type=checkbox>
<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>
- 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):
<html>
<head>
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
</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>
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.
<html>
<head>
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
<title> Café online </title>
</head>
<body bgcolor="000000" text="FFFFFF">
<h1>Listagem de anúncios</h1>
<table><tr><td>
<?
$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 border=1>";
echo "<tr><td>Nome do cliente</td>";
echo "<td>Título do anúncio</td>";
echo "<td>Validade</td>";
echo "<td>Ações</td></tr>";
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>
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):
<html>
<head>
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
<title> Caf&eacte; online </title>
</head>
<body bgcolor="000000" text="FFFFFF">
<h1>Editar anúncio </h1>
<?
$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> Expirado:
<input type=checkbox>
<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>
- Código onde é feita a atualização do banco de dados (add2.php):
<html>
<head>
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
</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>
Excluindo anúncios
Segue o código da página para exclusão de anúncios (excluir.php):
<html>
<head><meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /></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>