Livro de visitas com PHP e MySQL

Propaganda
Livro de visitas com PHP e MySQL
Construção de um livro de visitas utilizando a tecnologia de programação
de páginas dinâmicas de servidor PHP e a base de dados MySQL.
CAPÍTULOS DO MANUAL
1.- Introdução ao livro de visitas com PHP e MySQL
Primeiras notas e referências prévias de interesse antes de mostrar o funcionamento do exercício.
2.- Esquema de funcionamento do livro de visitas PHP
Como funciona nosso script para a criação de um livro de visitas com PHP e MySQL.
3.- A base de dados MySQL do livro de visitas
A base de dados em um sistema MySQL necessária para a realização de um livro de visitas.
4.- Mostrando as assinaturas do livro de visitas
Código para mostrar as assinaturas que nosso livro de visitas tenha registrado.
5.- O formulário para assinar o livro de visitas
Código HTML do formulário que utilizamos para a criação de um livro de visitas com PHP e MySQL.
6.- Comprovar se os dados recebidos são corretos
Antes de inserir os dados recebidos pelo formulário na aplicação Livro de Visitas, devemos comprovar
que a informação é correta, ou seja, que os dados recebidos são válidos.
7.- Inserimos os dados na base de dados
Uma vez comprovado que os dados são corretos, os insiro na tabela do livro de visitas.
Livro de visitas com PHP e MySQL
Manual por:
Criar Web, manuais e recursos para desenvolvimento web
Versão on-line:
http://www.criarweb.com/manuais/19
Introdução ao livro de visitas com PHP e MySQL
Ante os numerosos pedidos de nossos leitores de comentar um código para fazer
um livro de visitas ao longo da vida deste site, decidimos realizar este manual
sobre a criação de um livro de visitas, programado em PHP e com base de dados
MySQL.
É um livro de visitas muito parecido ao que utilizamos em CriarWeb, na URL:
http://criarweb.com/livro_visitas/, um pouco mais simplificado e com uns campos
de formulário um pouco mais gerais, para que possa servir no maior número de
web sites da temática mais variada.
O exercício que faremos pode ser seguido com conhecimentos mínimos de PHP, de
modo que está ao alcance de qualquer pessoa que tenha iniciado nesta interessante
linguagem de programação páginas de servidor. No obstante, antes de começar,
vale a pena mostrar algumas referências a manuais que podem nos ajudar a
entender os scripts tratados.
Manual de PHP: http://criarweb.com/php/
Com os temas mais básicos sobre a tecnologia, que todos os leitores deveriam
conhecer.
Manual de MySQL: http://criarweb.com/manuais/mysql/
Com artigos práticos sobre o trabalho com a base de dados MySQL.
A informação se complementa também com outros dois manuais: Workshop de PHP
e Manual de PHP 5 onde podemos encontrar mais recursos PHP disponíveis em
CriarWeb.com.
Informe de M. A. A. Tradução Juliana Monteiro
Mail: [email protected]
Esquema de funcionamento do livro de visitas PHP
Vejamos o diagrama de funcionamento da aplicação do livro de visitas em PHP para
termos uma idéia inicial, que completaremos mais adiante com o código de cada
script.
Vamos basear todo o trabalho em uma mesma página, que será a encarregada de
mostrar todas as assinaturas dos visitantes e buscar os dados vindos pelo
formulário de participação para introduzi-los na base de dados. Isto pode complicar
um pouco o código do exercício final, mas veremos o script por partes para que
seja simples. Agora somente temos que entender sua estrutura geral.
Explicação
A página do livro de visitas pode ou não receber por um formulário e dependendo
disso, deveria fazer umas ou outras ações. Portanto, o primeiro que vamos fazer é
averiguar se recebemos ou não os dados pelo formulário.
1) Se não recebe dados do formulário
Mostro as últimas 10 assinaturas do livro de visitas. Conseguiremos isto com um
acesso à base de dados e um loop que percorre os resultados da busca.
No caso de que não receba os dados, depois de mostrar as últimas assinaturas,
devemos saber se existem ou não mais assinaturas na base de dados para
visualizar.
1.1) Se existem mais assinaturas, mostro a mensagem para vê-las.
1.2) Se não existem mais assinaturas, não faço nada.
Por último, coloco o formulário de assinatura para que os visitantes possam
participar.
2) Se recebo dados pelo formulário
Isto quer dizer que o visitante preencheu o formulário de assinatura do livro e o
enviou. Então devo registrar esta assinatura, embora seja também muito
importante realizar uma pequena comprovação e/ou conserto dos dados do
formulário para evitar que um usuário malicioso tente estragar o script inserindo
certos elementos suscetíveis de provocar erros como etiquetas HTML ou PHP. Entre
as comprovações também nos certificamos, por exemplo, de que o usuário
escreveu algum dado no formulário, mas veremos todas estas comprovações mais
tarde.
2.1) Se os dados eram corretos
Se todas as comprovações foram positivas, introduziremos os dados no formulário
e daremos um obrigado ao visitante por assinar o livro.
2.2) Se os dados não eram corretos
Advertiremos ao visitante que deve preencher os campos corretamente.
Informe de M. A. A. Tradução Juliana Monteiro
Mail: [email protected]
A base de dados MySQL do livro de visitas
Para o trabalho com o livro de visitas, como já apontamos, se requer o uso de uma
base de dados. Bom, na verdade o que necessitaremos é contar com uma tabela
adicional para a base de dados que já contenha seu web site.
Referência: O trabalho com base de dados está relatado no manual de Programação em
PHP. No mesmo manual também dispomos de algumas indicações práticas que explicam
como colocar uma base de dados no servidor remoto.
A tabela livrovisitas_php
Neste exercício deveremos criar uma tabela com a informação das assinaturas.
Chamaremos de livrovisitas_php e conterá os seguintes campos:
Nome do campo
Tipo
Id_livrovisitas_php int(11)
nome
varchar(150)
email
varchar(100)
valoracao
tinyint(4)
comentario
text
O campo id_livrovisitas_php será um campo auto numérico, que será a chave
primária da tabela. Os campos nome e e-mail serão do tipo cadeia de texto, com
150 e 100 caracteres de tamanho máximo respectivamente. O campo valoração
salvará um número, neste caso de tamanho pequeno (tinyint) porque só vamos
salvar números do 1 ao 5. Por último, o comentário, que é uma cadeia de texto
com longitude indeterminada.
Poderemos criar a tabela em nosso servidor de bases de dados com a seguinte
sentença Crearte Table:
CREATE TABLE livrovisitas_php (
id_livrovisitas_php int(11) unsigned NOT NULL auto_increment,
nome varchar(150) NOT NULL,
email varchar(100) NOT NULL,
valoracao tinyint(4),
comentario text,
PRIMARY KEY (id_livrovisitas_php)
);
Informe de M. A. A. Tradução Juliana Monteiro
Mail: [email protected]
Mostrando as assinaturas do livro de visitas
Recordando a explicação geral deste exercício, lembraremos que a página do livro
de visitas tinha dois grandes blocos, que se decidiam comprovando se se recebe ou
não algo pelo formulário. Para isso podemos utilizar um enunciado if como este:
if (!$HTTP_POST_VARS)
No caso de não receber dados pelo formulário este if se avaliaria com resultado
positivo. Preste atenção na negociação para entender a correta avaliação do if.
Neste capítulo vamos relatar a parte do if na qual não se recebem dados por um
formulário, ou seja, a avaliação positiva do if.
Extrair as últimas assinaturas
Neste caso, o primeiro a realizar é a extração das últimas assinaturas da base de
dados. Para isso, devemos construir uma sentença SQL que selecione da base de
dados tais assinaturas.
//se não recebo nada pelo formulário de assinatura do livro, mostro as assinaturas do livro
//construo a sentença SQL
$ssql = "SELECT * FROM livrovisitas_php";
//se mostrarão as últimas assinaturas, embora haja um link na parte debaixo que se poderá clicar para
ver mais assinaturas.
if (isset($_GET["vermais"]))
$ssql .= " where id_livrovisitas_php<=" . $vermais;
//ordeno a sentença e limito o número de resultados
$ssql .= " ORDER BY id_livrovisitas_php desc limit 11";
//tomo o jogo de resultados
$resultid = mysql_query($ssql,$conn);
Esta sentença se constrói em várias partes. Primeiro, cria-se a primeira parte do
select e logo outras partes mais complicadas de ver.
Será necessário um corte para entender a parte na qual se avalia se existe ou não
a variável vermais, recebida por URL ($_GET["vermais"]). Isto vem porque na
parte debaixo das assinaturas, no caso de existirem mais assinaturas das quais se
tenham mostrado, se colocaria um link para ver mais assinaturas, que conteria
uma referência a este próprio livro de visitas com a variável vermais igual ao
identificador da próxima assinatura que tenha que se visualizar. Algo como
livrovisitas/index.php?vermais=960
Se havíamos recebido a variável vermais, selecionamos somente as assinaturas que
tenham o identificador menor ou igual que o índice recebido em vermais.
AS assinaturas devem ser vistas em ordem decrescente, para que se mostrem
primeiro as últimas assinaturas inseridas. É o que se indica na parte que põem
ORDER BY. Ademais se devem selecionar somente 10 assinaturas por página,
embora na prática selecionaremos 11, apesar da última não se mostrar, só se
extrai para saber o índice que tem e utiliza-lo para construir o link vermais, no caso
de que existam outras assinaturas por visualizar.
Na última linha se executa a sentença SQL para extrair os dados.
Loop While
Realiza-se a seguir um loop para percorrer os resultados. É um simples percorrido
por um conjunto de resultados de uma consulta a base de dados. Tem a
particularidade de que se contam os resultados mostrados para, no caso de que se
tenha mostrado já 10, não seguir mostrando mais.
while (($damefila=mysql_fetch_object($resultid)) && ($num_filas<10))
{
?>
<table align="center" width="100%" cellspacing="2" cellpadding="0" border="0">
<tr>
<td valign="top" class=fuente8><b>
<? //se o visitante não introduziu nome mostro como nome "Anônimo"
if ($damefila->nome == "-"){
"Anônimo";
}elseif ($damefila->email != "-") {
echo '<a href="mailto:' . $damefila->email . '">' . $damefila->nome . '</a>';
}else{
echo $damefila->nome;
}
?></b>:<br>
</td></tr>
<tr><td bgcolor=cccccc colspan="2"><img src="images/pixeltrans.gif" width=1 height=1
border="0"></td></tr>
<td class=fuente8 valign="top">
<?echo strip_tags($damefila->comentario)?>
<td valign="top" align="right" nowrap class=fuente8>
Valoracao: <?echo $damefila->valoracao?>
</td>
</tr>
</table>
<br>
<?
$num_filas++;
} //termina o loop while
Os resultados se mostram em uma tabela, por isso pode ficar um pouco confuso
este código no meio de tantas etiquetas HTML, mas não foi revisto nenhuma
complicação especial.
Mostrar o link de vermais
Ao final da página, se havia mais assinaturas por ver, há que mostrar o link de
vermais. Para isso, simplesmente avaliamos a variável que contém o ponteiro ao
registro atual. Se o loop anterior finalizou porque tal ponteiro havia chegado ao da
lista de valores, então é que não há mais assinaturas para ver. Se ao contrário, o
loop finalizou e ainda faltava alguma assinatura no ponteiro é que há que mostrar o
link de vermais e colocar o índice da assinatura que seria visualizada a seguir.
//se faltam mais valorações no conjunto de resultados, mostro o link de "Ver mais"
if ($damefila)
echo "<div align=center><b><a href=\"index.php?vermais=$damefila->id_lirovisitas_php\">Ver
mais mensagem</a></b></div><br>";
Mostrar o formulário de assinatura
Por último, deveria ser mostrado o formulário da assinatura. Nós o separamos em
um diretório a parte para que fique tudo mais organizado. No código de nosso
exercício nesta seção, o único que encontraremos será o include com o arquivo
HTML que contém o formulário.
include ("formul_mensagem.html");
Informe de M. A. A. Tradução Juliana Monteiro
Mail: [email protected]
O formulário para assinar o livro de visitas
O código do formulário para que os visitantes possam incluir sua assinatura no livro
de visitas é o seguinte.
<form name=livrovisitas action="index.php" method="post">
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td class=titcol> <b>Assine o Livro de Visitas</b></td>
</tr>
<tr>
<td class=fuente8> Deixe sua mensagem no livro de visitas e dê sua opinião do site
<br>
<br>
</td>
</tr>
<tr>
<td>
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td class=fuente8 align="center">
Nome
<br>
<input type="Text" name="nome" size="20" maxlength="150">
<br>
<br>
Email
<br>
<input type="Text" name="email" size="20" maxlength="100">
<br>
<br>
Valoracao
<br>
<select name="valoracao">
<option value=1>Péssima
<option value=2>Ruim
<option value=3 selected>Regular
<option value=4>Boa
<option value=5>Fantástica
</select>
</td>
<td ALIGN=CENTER class=fonte8 valign="middle">
Comentarios:
<br>
<textarea name="comentario" cols="30" rows="7"></textarea>
</td>
</tr>
<tr>
<td colspan=2 align=center class=fonte8>
<br>
<input type="submit" value=" Enviar a assinatura ao livro de visitas ">
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
Não há nenhuma complicação para entender isto. Simplesmente deveremos
conhecer um pouco a forma de criar formulários HTML.
Informe de M. A. A. Tradução Juliana Monteiro
Mail: [email protected]
Comprovar se os dados recebidos são corretos
A outra parte do script do livro de visitas em PHP que nos falta comentar contém a
codificação das ações a fazer no caso de que se recebem dados do formulário. Tais
ações são basicamente comprovar se os dados são corretos e, se assim for, inserir
a informação na base de dados.
As comprovações servem para assegurarmos que a informação introduzida vai ser
sempre válida, para que as assinaturas se mostrem perfeitamente. Determinadas
informações poderiam dar lugar a erros ao introduzir a informação na base de
dados ou na hora de mostrar as assinaturas na página.
Eliminar as etiquetas HTML ou PHP
É muito importante apagar toda etiqueta HTML ou PHP do texto dos campos
introduzidos pelo visitante. Se um visitante colocasse este comentário:
Olá <b>Amigos</b>
Teria como resultado que, ao visualizar sua assinatura, se mostrasse a palavra
"Amigos" em negrito. Isto não seria um problema, mas se se pode incluir uma
etiqueta assim, também poderiam colocar links, imagens ou determinados
elementos que pudessem deslocar a página, mudar nossos estilos habituais ou
incluir scripts que pudessem molestar a outros visitantes ou aos administradores do
web site.
//eliminamos as etiquetas HTML e PHP das cadeias de texto
$nome = strip_tags($_POST["nombre"]);
$email = strip_tags($_POST["email"]);
$comentario = strip_tags($_POST["comentario"]);
Cortamos as cadeias muito longas
Para não tentar introduzir textos na base de dados que na verdade não cabem,
recorto os textos até seu tamanho máximo.
//Cortamos as cadeias muito longas
$nome=substr($nome,0,150);
$email=substr($email,0,80);
Comprovamos que o visitante preencheu algo
Também devemos comprovar que todos os campos introduzidos não estão vazios,
porque nesse caso queria dizer que o usuário está tratando de assinar com nenhum
dado sobre seu nome ou comentários do web e não desejamos que isto ocorra.
<?
if (strlen($nome)==0 and strlen($email)==0 and strlen($comentario)==0)
{
?>
<div align="center"><b>Obrigado pelo envio</b>.<br><br>Agradecemos porém, se não for muito
esforço, que preenchesse algum dos campos para deixar constância de sua visita.</div>
<?
}
?>
Se não havia preenchido nada mostramos uma mensagem avisando-o. Caso
contrário, ou seja, se tudo está correto, insiro na base de dados a informação.
Informe de M. A. A. Tradução Juliana Monteiro
Mail: [email protected]
Inserimos os dados na base de dados
Se todas as comprovações foram corretas, se introduz na base de dados do livro de
visitas a informação recebida como assinatura.
Mas antes se realizará um pequeno ajuste adicional dos dados a introduzir.
//se algum dos campos falta prefiro colocar um travessão ou "sem comentários"
if (!$nome)$nome="-";
if (!$email) $email="-";
if (!$comentario) $comentario="Sin comentarios";
Simplesmente se faz isso para comprovar se algum dos dados faltava, pois nesse
caso preferimos introduzir um caractere ou texto especial ao invés de introduzir um
string vazio.
Aliás, a variável que salva a valoração da página, teoricamente não precisa ser
comprovada, porque sempre a receberemos bem, já que o formulário contém este
valor em um campo SELECT de HTML, onde sempre se seleciona um valor válido
introduzido pelo usuário, entre os possíveis, que os define o programador de tal
campo SELECT.
Logo, devemos codificar uma sentença SQL com um INSERT com os dados do
formulário. A sentença de inserção se realizará concatenando os dados do
formulário com a própria sentença SQL.
Referência: Pode ser interessante para pessoas sem experiência repassar o artigo onde se
explicam as inserções em base de dados. Este artigo está englobado no Manual de PHP de
CriarWeb.com.
//Geramos a ssql e inserimos o registro
$ssql = "INSERT INTO livrovisitas_php (nome,email,valoracao,comentario) VALUES ('" . $nome . "','" .
$email . "'," . $_POST["valoracao"] . ",'" . $comentario . "')";
mysql_query($ssql,$conn);
Por último mostra-se uma mensagem agradecendo ao visitante que assinou o livro
de visitas.
<div align="center"><b>Muito obrigado pela sua participação </b></div>
Pode-se ver em em funcionamento aqui.
Download