Com Criar Um Sistema De Comentários Em PHP E MYSQL

Hoje em dia o principal recurso que um site tem é a comunicação com o cliente.

Se a comunicação for boa, o site cresce, senão, é apenas mais um na Internet!

Um dos vários recursos que temos é o “sistema de comentários”.

Geralmente você encontra este recurso em grandes portais ou listas de discussão onde o usuário deve dar a sua opinião, sugestão ou emitir um comentário.

Na matéria de hoje, estaremos criando este recurso e mostrando de forma prática como adaptar um sistema de comentários em seu site.

comentarios

Configurando A Base de Dados MySQL

Antes de tudo, é necessário configurar a base de dados.

Com o BD já criado, acesse o ficheiro “conexao.php” e configure o ficheiro alterando as informações de acesso à base de dados (conforme script a seguir).



<?

// SERVIDOR

$database = "SERVIDOR";
$dbname   = "BASEDEDADOS";
$usuario  = "USUARIO";
$dbsenha  = "SENHA";

$conexao=mysql_connect ($database, $usuario, $dbsenha);

if($conexao){
      if (mysql_select_db($dbname, $conexao)){
           print "";
      }else{
           print "Não foi possível selecionar o Banco de Dados";
           }
      }else{
           print "Erro ao conectar o MySQL";
           }
          
?>

Após a configuração, vamos agora criar a tabela que será usada!

Criando A Tabela Na Base De Dados

Para configurar a base de dados através do script, abra o ficheiro script-sql.txt (disponível em anexo) e cole seu conteúdo no Programa utilizado para gerenciamento da base de dados.

Em nossas matérias utilizamos como padrão o MySQLFront. Caso tu também esteja utilizando este programa, clique em SQL Editor e cole o conteúdo do script (conforme código e imagem abaixo).



----- INSTALANDO A TABELA -----

CREATE TABLE `tbl_depoimentos` (
  `id_depoimento` int(11) NOT NULL auto_increment,
  `id_site` int(11) default NULL,
  `cliente` varchar(80) default NULL,
  `email` varchar(150) default NULL,
  `depoimento` varchar(255) default NULL,
  `data_cadastro` varchar(10) default NULL,
  `status` char(1) default NULL,
  PRIMARY KEY  (`id_depoimento`)
);

INSERT INTO `tbl_depoimentos` VALUES (1,934,'Fábio Aquino',NULL,'Gostei muito desta praia. Era o que eu precisava para descansar e tirar férias.','2010-09-23','1');
INSERT INTO `tbl_depoimentos` VALUES (3,934,'Vanessa',NULL,'Muito bom o novo site da sua empresa, ficou bem visível os icones de procura!',NULL,'1');
INSERT INTO `tbl_depoimentos` VALUES (7,934,'Quemuel Aquino',NULL,'sdf sfs dsdfs fsdf sd fs dfsd','2010-09-23','1');
INSERT INTO `tbl_depoimentos` VALUES (9,1,'Marta Regina','modelosbrasileirasaqui@ymail.com','dfsad adf dafad fadf adf adf adf ad f','2010-11-03','0');

Após importar os dados, vamos dar continuidade às configurações?

Efetuando Configurações

Abra o ficheiro “comentario_envia.php” e efetue as configurações a seguir:

  • Configure o endereço de email que receberá as informações a serem validadas (conforme trecho a seguir):

    $email_admin = "seuemail@seusite.com"; // seu email
  • Configure o site que usará o sistema. Caso você queira, deixe como padrão a variável “$_SERVER” que trará o endereço atual (conforme trecho a seguir):

    $link_site = $_SERVER['SERVER_NAME']; // pega a URL do seu site

As demais informações poderão ser usadas de forma automática (conforme o código a seguir):



<?

include('conexao.php');

$email_admin = "seuemail@seusite.com"; // seu email

$id_site   = "1"; // esse sistema foi feito para rodar em vários sites... por isso uma ID.

$link_site = $_SERVER['SERVER_NAME']; // pega a URL do seu site

$nome          = $_POST['nome'];
$email         = $_POST['email'];
$comentario    = $_POST['comentario'];
$comentario    = ereg_replace("\n","<br>",$comentario);
$data_cadastro = date ('Y-m-d');
  
  
$query_comentario = "INSERT INTO tbl_depoimentos(id_site, cliente, email, depoimento, data_cadastro, status) VALUES('$id_site', '$nome', '$email', '$comentario', '$data_cadastro', '0')";
$rs_comentario = mysql_query($query_comentario);

// SELECIONA PARA VALIDAR A APROVAÇÃO
$query_select_cad = "SELECT * FROM tbl_depoimentos where id_site = '$id_site' AND cliente = '$nome' AND email = '$email' and data_cadastro = '$data_cadastro' and status = '0'";
$rs_select_cad    = mysql_query($query_select_cad);

$campo_select_cad = mysql_fetch_array($rs_select_cad);
$id_depoimento_select_cad = $campo_select_cad['id_depoimento'];

$assunto = "Envio de Comentário - $link_site";

$mensagem = "<center><table width='500' border='0' cellspacing='1' cellpadding='4' bgcolor='#4a66a3'>

<tr>

    <td bgcolor='white' valign='top'>
       <link rel='important stylesheet' href='chrome://messenger/skin/messageBody.css'>
       <style type='text/css' media='screen'>
       <!-- td { color: #069; font-size: 8pt; font-family: Arial, Verdana, Arial, Helvetica, sans-serif } --></style>
         <br>
        <p align='justify'>Prezado Administrador, <br>

          <br>

          Recebemos através do site $link_site o comentário abaixo descrito:<br><br>

          <b>COMENTÁRIO:</b><BR>

          <b>Nome:</b> $nome<br>
          <b>EMail:</b> $email<br>
          <b>Comentário:</b><br>$comentario<br><br>

          <center>
          <a href='http://$link_site/comentarios/script_comentario.php?acao=reprovar&id_depoimento=$id_depoimento_select_cad&id_site=$id_site' target='_blank'>CANCELAR</A>
          - <a href='http://$link_site/comentarios/script_comentario.php?acao=aprovar&id_depoimento=$id_depoimento_select_cad&id_site=$id_site' target='_blank'>APROVAR</A><BR<BR>
          </center>

          <p> <font color='#076DB8'>Atenciosamente,<br>

        <br>

        Central de Relacionamentos<br>
        <b>$link_site ©</b><br>

        </font>

      <br>

      <b><font color='#7694CB' size='1' face='Verdana, Arial, Helvetica, sans-serif'>

      :: Politica de Privacidade::<br>

      </font></b>

      <font color='#7694CB' size='1' face='Verdana, Arial, Helvetica, sans-serif'>

      O envio e recebimento de nossas mensagens procura estar alinhado com o C&oacute;digo

       de &Eacute;tica Anti-SPAM que objetiva reger e orientar a

       comunica&ccedil;&atilde;o institucional, comercial e publicit&aacute;ria

       enviada sob a forma de mensagens eletr&ocirc;nicas.</font>

       <br>

       <hr size='1'>

       <font size='1' face='Verdana, Arial, Helvetica, sans-serif'>

       Temos a forte convic&ccedil;&atilde;o de que

      a rela&ccedil;&atilde;o entre cliente e empresa deve ser marcada pelo

      conceito de parceria, fortalecendo o v&iacute;nculo estabelecido em bases de

       confian&ccedil;a e apoio m&uacute;tuo.</font></td></tr></table></center>";

  $headers = "MIME-Version: 1.0" . "\r\n";

  $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";// More headers

  $headers .= "From: $email" . "\r\n"; // 'From: $email_dest' . "\r\n";

mail("$email_admin", "$assunto", "$mensagem", "$headers");

if (mail){

?>
<script language="JavaScript">

alert('Comentário enviado com sucesso !!!');

</script>

<meta HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>

<?}?>

Página Inicial

A página inicial do sistema é prática e pode ser customizada facilmente.

Até para facilitar, estamos usando recursos de “captcha” que são imagens distorcidas.

O objetivo é ter certeza de que não é uma máquina quem esta enviando a requisição.

Bem… ele deverá funcionar assim:

  1. O internauta preenche o formulário com seu comentário;
  2. O sistema lhe envia uma mensagem (com a opção de excluir ou aprovar o comentário);
  3. Você aprova o comentário e ele entra online. Exclui e ele é excluído automaticamente da base de dados.

Até para facilitar, na página “index.php” listamos abaixo do formulário os comentários cadastrados.

Ele poderá ser removido de lá e disponibilizado em uma página com um layout apropriado.

Vamos verificar o código?



<?
session_start();

include('conexao.php');

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>.:: Comentários ::.</title>
<meta name="description" content="DESCRIÇÃO">
<meta name="keywords" content="KEYWORD">

<script language="JavaScript" >
function enviardados(){

// VALIDANDO O CAMPO NOME
if(document.dados.nome.value=="" || document.dados.nome.value.length < 8){
alert( "Preencha campo NOME corretamente!" );
document.dados.nome.focus();
return false;
}

// VALIDANDO O CAMPO COMENTÁRIO
if (document.dados.comentario.value == ""){
alert ("O campo COMENTÁRIO deve conter informações!");
document.dados.comentario.focus();
return false;
}

// VALIDANDO O CAMPO CÓDIGO
if (document.dados.code.value == ""){
alert ("O campo CÓDIGO deve ser preenchido com as informações corretas!");
document.dados.code.focus();
return false;
}

}
</script>

</head>
<body>

<form method='POST' action='comentario_envia.php' name="dados" onSubmit="return enviardados()">

Nome: <input type='text' name='nome'><br>
Email: <input type='text' name='email'><br>
Comentário: <textarea name="comentario"></textarea><br>
<div style="width: 430px; float: left; height: 90px">
      <img id="siimage" align="left" style="padding-right: 5px; border: 0" src="securimage_show.php?sid=<?php echo md5(time()) ?>" />

        <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="19" height="19" id="SecurImage_as3" align="middle">
          <param name="allowScriptAccess" value="sameDomain" />
          <param name="allowFullScreen" value="false" />
          <param name="movie" value="securimage_play.swf?audio=securimage_play.php&bgColor1=#777&bgColor2=#fff&iconColor=#000&roundedCorner=5" />
          <param name="quality" value="high" />

          <param name="bgcolor" value="#ffffff" />
          <embed src="securimage_play.swf?audio=securimage_play.php&bgColor1=#777&bgColor2=#fff&iconColor=#000&roundedCorner=5" quality="high" bgcolor="#ffffff" width="19" height="19" name="SecurImage_as3" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
        </object>

        <br />

        <!-- pass a session id to the query string of the script to prevent ie caching -->
        <a tabindex="-1" style="border-style: none" href="#" title="Refresh Image" onclick="document.getElementById('siimage').src = 'securimage_show.php?sid=' + Math.random(); return false"><img src="images/refresh.gif" alt="Reload Image" border="0" onclick="this.blur()" align="bottom" /></a>
</div>
<div style="clear: both"></div>
Digite o código acima:<br />

<!-- NOTE: the "name" attribute is "code" so that $img->check($_POST['code']) will check the submitted form field -->
<input type="text" name="code" size="12" /><br /><br />

<?
  include("securimage.php");
  $img = new Securimage();
  echo $valid = $img->check($_POST['code']);
?>
<input type="hidden" name='code2' value="<?= $valid; ?>">
<input type="submit" value="Enviar" />
</form>

<br><br><br><b>MENSAGENS PUBLICADAS:</b><br>

<?

$query_depoimentos = "SELECT * FROM tbl_depoimentos where status = '1'";
$rs_depoimentos    = mysql_query($query_depoimentos);

while($campo_depoimentos = mysql_fetch_array($rs_depoimentos)){
echo $cliente_depoimento = $campo_depoimentos['cliente'];
echo ":<br>";
echo $msg_depoimento    = $campo_depoimentos['depoimento'];
echo "<br><br>";
}
?>

</body>
</html>

OBS.: Como trata-se de uma ferramenta para testes, estou lhe enviando com a validação da Captcha “apenas” com o campo em branco. Caso você queira, poderá criar outras instruções para melhorar o sistema.

Aprovando o Ficheiro

Veja no ficheiro “script_comentario.php” que após clicar em “aprovar”, haverá uma validação na base de dados de forma bem prática (conforme script abaixo descrito).



<?

include('conexao.php');

$acao = $_GET['acao'];

switch ($acao) {

case aprovar:

$id_depoimento     = $_GET['id_depoimento'];
$id_site           = $_GET['id_site'];

$query = "UPDATE tbl_depoimentos SET

        status        = '1'

             WHERE id_depoimento  = '$id_depoimento' and id_site = '$id_site'";
$resultado = mysql_query ($query);

if($resultado){
?>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> alert ("Comentário publicado com sucesso")</SCRIPT>
<SCRIPT language="JavaScript">window.close();</SCRIPT>

<?
}
else
{
?>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> alert ("Erro ao publicar o comentário")</SCRIPT>
<SCRIPT language="JavaScript">window.close();</SCRIPT>
<?
}

break;

case reprovar:

$id_depoimento = $_GET['id_depoimento'];
$id_site       = $_GET['id_site'];

$query_depoimento = "DELETE FROM tbl_depoimentos where id_depoimento ='$id_depoimento' and id_site = '$id_site'";
$rs_depoimento    = mysql_query ($query_depoimento);

if ($rs_depoimento){

?>

<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> alert ("Depoimento excluído com sucesso")</SCRIPT>
<SCRIPT language="JavaScript">window.close();</SCRIPT>
<?

}

break;

}

?>

Outros Ficheiros

Você poderá verificar no ficheiro em anexo que temos fontes, arquivos de audio, aliás, outros ficheiros que são encontrados livremente na Internet, mas que servem para complementar seu código.

Bem… não é um sistema 100% perfeito, pois você pode melhorar e muito, mas para quem precisa de algo básico, já te dá uma idéia de como trabalhar com um sistema de comentários.

Espero que esta ferramenta lhe seja útil no dia a dia.

Be Sociable, Share!

29 Comentários

  1. Angelo Márcio

    Testei o sistema aqui, porém, dá o seguinte erro quando testo:

    Warning: include(securimage.php) [function.include]: failed to open stream: No such file or directory in /home/artfestaseventos/www/comentarios/index.php on line 74

    Warning: include() [function.include]: Failed opening 'securimage.php' for inclusion (include_path='.:/usr/local/lib/php') in /home/artfestaseventos/www/comentarios/index.php on line 74

    Fatal error: Class 'Securimage' not found in /home/artfestaseventos/www/comentarios/index.php on line 75
    Pelo que entendi, está faltando o arquivo "securimage.php" . Teria como disponibilizar o script deste arquivo? Creio que só está dependendo disto para o sistema funcionar aqui. Obrigado desde já. Ah, e parabéns pelo site. Tem me sido bastante útil.

  2. Olá Márcio, Vi que você está customizando o ficheiro.
    Por favor, antes de fazer isso, verifique certinho o caminho, pois o securimage.php está incluso no script em anexo e ele só funcionará se tiver tudo certo.

    Se tiver qualquer dúvida quanto a configuração, entre em contato comigo no MSN grupoqsa@hotmail.com e estarei lhe ajudando a configurar o ficheiro.

  3. Bom fiz do jeito como mostra no tutorial acima mais aparece o seguinte erro:

    Warning: include(securimage.php) [function.include]: failed to open stream: No such file or directory in /home/th49221/public_html/index.php on line 74
    Warning: include(securimage.php) [function.include]: failed to open stream: No such file or directory in /home/th49221/public_html/index.php on line 74
    Warning: include() [function.include]: Failed opening 'securimage.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/th49221/public_html/index.php on line 74
    Fatal error: Class 'Securimage' not found in /home/th49221/public_html/index.php on line 75

    Eu acho que está faltando algumas imagens e outras coisas…

  4. Everton

    Tem alguma coisa faltando nesse tutorial !

  5. Ricardo

    Tenho q colocar um no meu site

  6. Nobaia

    Num funcionou

  7. tja0788

    Excelente material, nunca tinha visto um tutorial tão completo assim na internet.

  8. nathan

    cara, cade o anexo? sem ele creio que não vai funcionar

  9. srweeb

    parabéns cara, esse tuto está muito bom

  10. Fernando

    Poderia disponibilizar os arquivos fonte?

  11. Everton

    Poderia disponibilizar os arquivos do seu tutorial, estou aprendendo agora a linguagem php e estou tendo dificuldades em colocar esse sistema em prática. Desde já agradeço pela sua compreensão. 

  12. georgelima11

    Excelente tutorial, vou testar agora,vamos ver no que dá!

  13. Aguilar - Brasil

    Para que pedir os arquivos prontos para baixar, se os códigos já estão todos aí na página?!
    Virei um Fã do site "webmaster.pt", já tem até um atalho na Área do Trabalho!!!

  14. Cezar

    Muito bom o tutorial, só não achei os anexos, poderia disponibilizá-los.

    Obrigado!!

  15. Excelente, ja vou utilizar em um site aqui!

  16. Ualace Moura

    Onde está os arquivos para eu baixar

  17. Soro

    ta faltando arquivos….. cadê? o captcha?

  18. Hilton Marcos

    Boa noite.

    Desculpe-me a pergunta. É só copiar e colar na página, além de mudar o nome do site? Feito isso, já funciona?
    Obrigado por sua disponibilidade. abraços

  19. Bom galera realmente é um ótimo post esse, mais este erro que todos estão reclamando consegui resolver era a falta do securimage.php vou botar o link de um site que vocês podem baixar, depois só upar todos os arquivos que estão la pra dentro da pasta que esta seu sistema de comentarios, pronto sem problemas tudo funciona, "http://www.phpcaptcha.org/download/&quot; qualquer coisa só falar comigo no email ou facebook gring0-revolt@hotmail.com

  20. Hyzuky

    Otima explicação e uma excelente artigo, mas gostaria do anexo, nao conseguir ver..

  21. Erivaldo Moreira

    dar tudo certinho mas quando clico em aprovar 
    abre uma mensagem dizendo que o google não conseguiu achar o endereço do meu site
    será  por que é um site grátis?

  22. Hmm man otimo sistema vlw por compartilhar, irei ultiliza-lo no meu proximo site .

  23. Muito bom! é um ótimo recurso para ser utilizando nos sites. Estou em formação em PHP e mysql no curso adv http://www.cursoadv.com.br. a proposito o código funcionou aqui.

  24. Mari

    Cara, você me ajudou muito, era exatamente o que eu precisava para o código de uma empresa que estou terminando, não é  fácil achar posts de aprovação na internet e ainda mais em português! Parabéns!!!

  25. Filipe

    Boas. Onde poderei fazer o download dos ficheiros? Parece-me que deve ser esse codigo que eu pretendo. Eu ando há dois dias à procura de um sistema de comentários com: 1) captcha 2) Dia Mês Ano Horas 3) O comentário só poderá ser inserido na mesma pagina logo abaixo do formulário depois da aprovação. Como ainda não percebo mto de php e mysql, estou-me a ver grego… alguém me consegue safar?

  26. Vlw msm cara,achei exatamente o que procurava 

Participa! Comenta...