Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Mural de recados + Captcha

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Tutorial Mural de recados + Captcha

    Bom pessoal após um tempo sem programar em php decidi criar um mini-tuto meio que mastigado para o pessoal.

    Se trata de um simples mural de recados em PHP e graça ao spammer do Acunetix adicionei um captcha para verificação e mais algumas outras coisinhas.

    Go!

    1° Criando banco de dados

    Crie um banco de dados com nome qualquer, no meu caso 'mural_areax'
    Logo, crie uma tabela com um nome qualquer, no meu caso 'mural_recados' com 5 aquivos.

    No 1° campo
    Nome: class
    Tipo: int

    No 2° campo
    Nome: hora
    Tipo: time

    No 3° campo
    Nome: data
    Tipo: data

    No 4° campo
    Nome: mensagem
    Tipo: text

    No 5° campo
    Nome: nome
    Tipo: text

    2° Criando conexao.pxp

    Crie um arquivo php chamado conexao.php com o seguinte conteúdo:

    Código PHP:
    <?php
        $host 
    ="localhost"// local do DB, geralmente localhost
        
    $usuario ="root"//usuario padrão root
        
    $senha ="****"//sua senha mysql
        
    $dbname ="mural_areax"//nome do banco de dados
        
    mysql_connect($host,$usuario,$senha) or die(mysql_error()); // realiza a conexão
        
    mysql_select_db($dbname) or die(mysql_error()); // seleciona o banco de dados
    ?>
    Edite as partes necessárias e vamos para a próxima etapa.

    3° Criando o arquivos index.php

    Aqui é aonde todos os valores de db serão exibidos e inseridos, vamos lá.
    Crie um arquivo php chamado index.php com o seginte conteúdo:

    Código PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Formul&aacute;rio de recados</title>
    <style>
    #content {
        width:600px;
        border:#66b6fc 2px solid;
        margin:0 auto;
        padding:0;
    }
    .estilo1{
        width:590px;
        background-color:#F7F7F7;
        padding:5px;
        border:#66b6fc 2px solid;
        
    }
    .estilo2{
        width:590px;
        background-color:#e5e5e5;
        padding:5px;
        border:#66b6fc 2px solid;
        
    }

    .header_mensa{
        width:300px;
        background: #e5e5e5; /* Old browsers */
    background: -moz-linear-gradient(top, #e5e5e5 8%, #ffffff 94%); /* FF3.6+ */
    background: -webkit-gradient(linear, left top, left bottom, color-stop(8%,#e5e5e5), color-stop(94%,#ffffff)); /* Chrome,Safari4+ */
    background: -webkit-linear-gradient(top, #e5e5e5 8%,#ffffff 94%); /* Chrome10+,Safari5.1+ */
    background: -o-linear-gradient(top, #e5e5e5 8%,#ffffff 94%); /* Opera11.10+ */
    background: -ms-linear-gradient(top, #e5e5e5 8%,#ffffff 94%); /* IE10+ */
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e5e5e5', endColorstr='#ffffff',GradientType=0 ); /* IE6-9 */
    background: linear-gradient(top, #e5e5e5 8%,#ffffff 94%); /* W3C */
        padding:5px;
        border:#66b6fc 2px solid;
        
        
    }

    #ap { text-align:center;}
    a, a:visited{color:#06C;text-decoration:none;}
    a:hover,a:active {color:#034180;text-decoration:underline;}
    </style>
    </head>

            <script type="text/javascript">
            
            <!-- Função para abrir o Popup -->
            function abrirPagina(link)
            {
            var site = link;
                window.open(site,"_blank","toolbar=no, location=yes, directories=no, status=no, scrollbars=yes, resizable=yes, width=620, height=200, top=30, left=30");
            }
            </script>
            
            <script>
            
            <!-- Função para quantidades de caracteres Máx 150. -->
            function conta() {
            var quant = document.form1.mensagem.value.length;
            var mensagem = document.form1.mensagem.value;
            var maximo = 150;
            var decrescente = maximo-quant;
            document.getElementById('valor').innerHTML = decrescente;
            if(quant > maximo-1) {
            var reduzido = document.form1.mensagem.value.length-1;
            var novo_valor = mensagem.substring(0, reduzido);
            document.form1.mensagem.value=novo_valor;
            return false;
            }
            }
            </script>

    <body>

    <center><b>Deixe seu comentário!</b></center>
    <form id="form1" name="form1" method="post" action="inserindo.php"> <!-- Aqui fica o arquivo inserindo.php-->
      <table width="600" border="0" align="center">
        <tr>
          <th width="86" scope="row">&nbsp;</th>
          <td width="498">&nbsp;</td>
        </tr>
        <tr>
          <th scope="row">Nome</th>
          <td><input name="nome" type="text" id="nome" /></td>
        </tr>
        <tr>
          <th height="56" scope="row">Mensagem</th>
          <td><label>
            <textarea  onKeyup="conta()" name="mensagem" cols="61" rows="7" id="mensagem"></textarea>
          </label></td>
        </tr>
        <tr>
             <th height="56" scope="row">Verificação</th>
          <td><label>
            <img title = "Veirificação AntiSpam!" src="captcha.php"> <!-- Aqui fica o arquivo captcha -->
          </label><div id="valor" style = "float:right;">150</div> <td>
        </tr>
        <tr>
        <td> </td>    
        <td> <input type="text" size = "22" name="palavra"  /></td>    
        
        </tr>
        
        <tr>
          <th scope="row">&nbsp;</th>
          <td><input name="enviar" type="submit" id="enviar" value="Enviar" />
          <input name="limpar" type="reset" id="limpar" value="Limpar" /></td>
        </tr>
        <tr>
          <th scope="row">&nbsp;</th>
          <td>&nbsp;</td>
        </tr>
      </table>
    </form>

    <div id="content">

    <?php
    session_start
    ();//Inicia a sessão - Usado para o captcha
    include_once("conexao.php");// Abre a conexão com bando de dados

    $limit mysql_query("select * from mural_recados ORDER BY class DESC");//Busca resultados dentro do db de baixo para cima.
    $estilo 1;// Estilo css 'estilo1'

    if(!mysql_fetch_array(mysql_query("select * from mural_recados ORDER BY class DESC"))) //Verificação de conteúdo no db
    {
    echo 
    "
    <p><center>Nenhum comentário!</center></p>"
    ;//Sem conteúdo.
    }
    else
    {
    while(
    $sql mysql_fetch_array($limit))//Cria um laço com os arrays dos resultados do db.
    {

    // Estilo css
    if($estilo == 1
    {
    $estilo++;
    }
    elseif(
    $estilo == 2)
    {
    $estilo--;
    }
    //Estilo css

    $nome        $sql['nome']; //Recebe nome do db
    $mensagem    $sql['mensagem']; // Recebe mensagem do db
    $data        $sql['data']; //Recebe data do db
    $hora        $sql['hora']; //Recebe hora do db
    $class         $sql['class']; //Recebe class do db

    echo "
    <div class = content>
    <table>
    <tr>
    <td class = estilo
    $estilo>
    <a style=\"float:right;font-size:25px;cursor:pointer;\" onclick=\"abrirPagina('http://127.0.0.1/mural/popup.php?nome=
    $nome&mensagem=$mensagem&data=$data&hora=$hora&class=$class&estilo=$estilo');\" title = \"Postado no dia $data às $hora\" href = \"#\" >#{$class}</a>
    <b>Nome:</b> 
    {$nome}<br>
    <b>Data:</b> 
    {$data}<br>
    <b>Hora:</b> 
    {$hora}<br>
    </td> 
    </tr>
    <tr>
    <td class = estilo
    $estilo>
    <p>
    {$mensagem}</p>
    </td> 
    </tr>
    <table>
    </div>"
    // Exibe os valores
    }
    }
    ?>

    </div>
    </body>
    </html>
    Repare que o textarea tem um número máximo de caracteres com um simples JS para melhor vizualização do usuário, junto com o popup para cada comentário, vamos ver melhor isso mais à frente.

    Nota: Onde está escrito 'mural_recados' você terá que modificar com o nome da sua tabela.

    Vamos para o próximo passo.

    4° Criando o arquivo inserindo.php

    Crie um arquivo php com o nome inserindo.php, neste coloque o seguinte conteúdo:

    Código PHP:
    <?php
    session_start
    ();//inicia a sessão
    include("conexao.php"); //conexão com o banco de dados

    //capturando as variaveis do form no arquivo index.php
    $nome =& $_POST['nome'];
    $mensagem =& $_POST['mensagem'];

    if (!(
    $_POST["palavra"] == $_SESSION["palavra"]))://Verificação do captcha
    ?>
    <script language="JavaScript">alert('Erro na verificação AntiSpam!');
    location.href='http://127.0.0.1/mural/';
    </script>
    <?
    exit;
    endif;

    //Filtro antixss
    $nome_vetor str_split($nome);//Quebra a string criando uma array com cada letra
    $mensagem_vetor str_split($mensagem);//Quebra a string criando uma array com cada letra

    for($i=0;$i strlen($nome);$i++)// Verificação letra por letra na variável $nome
    {
        if((
    $nome_vetor[$i] == "<") || ($nome_vetor[$i] == ">") || ($nome_vetor[$i] == ";") || ($nome_vetor[$i] == "/") || ($nome_vetor[$i] == "'"))//Verificação de caractere indesejado
        
    {
        
    $nome str_replace("$nome_vetor[$i]",'',$nome);//Caso encontre, substitui por um espaço vazio.
        
    }
    }
    for(
    $i=0;$i strlen($mensagem);$i++)// Verificação letra por letra na variável $mensagem
    {
        if((
    $mensagem_vetor[$i] == "<") || ($mensagem_vetor[$i] == ">") || ($mensagem_vetor[$i] == ";") || ($mensagem_vetor[$i] == "/")  || ($nome_vetor[$i] == "'"))//Verificação de caractere indesejado
        
    {
        
    $mensagem str_replace("$mensagem_vetor[$i]",'',$mensagem);//Caso encontre, substitui por um espaço vazio.
        
    }
    }
    //fim filtro antixss

    if(strlen($nome) > 30)://Verificação de caractere na variável $nome, Max 30.
    ?>
    <script language="JavaScript">alert('Nome muito extenso!');
    location.href='http://127.0.0.1/mural/';
    </script>
    <?
    exit;
    endif;

    if((empty(
    $nome) || empty($mensagem)) || ((strlen($mensagem)) > 150))://Verificação de campo vazio ou quantidade de caracteres.
    ?>
    <script language="JavaScript">alert('Erro no envio!!');
    location.href='http://127.0.0.1/mural/';
    </script>
    <?
    exit;
    endif;

    //comando sql
    $insert "INSERT INTO mural_recados (nome, mensagem, data, hora) VALUES ('{$nome}', '{$mensagem}', CURDATE(), CURTIME())";

    //comando sql para inserir o conteúdo no db
    mysql_query($insert) or die ('Não foi possivel inserir os dados, <a href="javascript:history.back()">Voltar</a>');

    header("location: index.php"//Retorna a index.php
    ?>
    Nota: Onde está escrito 'mural_recados' você terá que modificar com o nome da sua tabela.

    5° Criando arquivo captcha.php

    Crie um arquivo php com o nome captcha.php, neste coloque o seguinte conteúdo:

    Código PHP:
    <?php
       session_start
    (); // inicia a sessao
       
    header("Content-type: image/jpeg"); // define o tipo do arquivo
       
       //Váriáveis iniciais
        
    $largura "150"// largura
        
    $altura "50"// altura
        
    $tamanho_fonte "25"// tamanho da fonte
        
    $quantidade_letras "5"// Quantidade de letras
          
        
    function captcha($largura,$altura,$tamanho_fonte,$quantidade_letras)//Declaração da função
        
    {
            
    $imagem imagecreate($largura,$altura); // define a largura e a altura da imagem
            
    $fonte "font.ttf"//Este é o arquivo fonte, deverá está na mesma pasta do arquivo captcha.php
            
    $preto  imagecolorallocate($imagem,0,0,0); // define a cor preta
            
    $branco imagecolorallocate($imagem,255,255,255); // define a cor branca
           
            // Forma a palavra conforme o parâmetro $quantidade_letras
            
    $palavra substr(str_shuffle("abcdefghijklmnpqrstuvyxwz23456789"),0,($quantidade_letras));//tipos de caracteres
            
            
    $_SESSION["palavra"] = $palavra// atribui para a sessao a palavra gerada
            
            
    for($i 1$i <= $quantidade_letras$i++){
                
    imagettftext($imagem,$tamanho_fonte,rand(-25,25),($tamanho_fonte*$i),($tamanho_fonte 10),$branco,$fonte,substr($palavra,($i-1),1)); // atribui as letras a imagem
            
    }
            
    imagejpeg($imagem); // gera a imagem
            
    imagedestroy($imagem); // limpa a imagem da memoria
        
    }
        
        
    captcha($largura,$altura,$tamanho_fonte,$quantidade_letras); // executa a funcao captcha passando os parametros recebidos
    ?>
    Para criação do captcha, você precisa de um arquivo fonte, no meu caso eu usei uma que chamei de 'font.ttf', caso queira usar outra existe várias na pastas C:\WINDOWS\Fonts. Ecolha uma de sua preferência copie e jogue na pasta junto com o arquivo captcha.php

    Depois disso, vamos para o passo final.

    6° Criando o arquivo popup.php

    Crien um arquivo php chamado popup.php, neste coloque o seguinte conteúdo:

    Código PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

    <style>
    .estilo1{
        width:590px;
        background-color:#f0f9ff;
        padding:5px;
        border:black 1px solid;
    }
    .estilo2{
        width:590px;
        background-color:#ccebff;
        padding:5px;
        border:black 1px solid;
    }
    </style>

    </head>

    <body>

    <?php
    //Captura toas as variáveis pelo método GET
    $nome        =& $_GET['nome'];
    $mensagem    =& $_GET['mensagem'];
    $data        =& $_GET['data'];
    $hora        =& $_GET['hora']; 
    $class         =& $_GET['class'];
    $estilo     =& $_GET['estilo'];

    //Filtro antixss
    function filtro()
    {
    global 
    $nome,$mensagem,$data,$hora,$class,$estilo//Declaração das variáveis globais

        
    if(preg_match('([<_>_;_/])',$nome.$mensagem.$data.$hora.$class) or (!is_numeric($estilo)) or (!is_numeric($class)))//Verificação de caracteres indesejados.
        
    {
        return 
    true//Atribui verdadeiro a função
        
    }
    }
    //fim filtro antixss

    //Verificação das variáveis
    if((isset($nome)) and (isset($mensagem)) and (isset($data)) and (isset($hora)) and (isset($class)) and !(filtro() == true))
    {
    print 
    "<title>$nome ($data - $hora) #$class</title>";

    print 
    "
    <div class = \"estilo
    $estilo\">
    <table>
    <tr>
    <td width = \"8%\"><b>Nome:<b></td> <td>
    $nome</td>
    </tr>
    <tr>
    <td><b>Data:</b></td> <td>
    $data</td>
    </tr>
    <tr>
    <td><b>Hora:</b></td><td>
    $hora</td>
    </tr>
    <tr>
    <td><b>Número:</b></td> <td>
    $class</td>
    </tr>
    <tr>
    <td colspan = \"2\"><b>Mensagem:</b><br><br>
    $mensagem</td>
    </tr>
    </table></div>"

    }
    else
    {
    print 
    "<h2>Hello ;)</h2>";
    }

    ?>

    </div>
    </body>
    </html>
    Bom pessoal basicamente é isso, espero que todos tenham entendido, e para finalizar deixo os arquivos organizadinhos para download.

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Senha: ar3ax

    att, ar3ax



    areax@hotmail.com



    Similar Threads

  • Font Size
    #2
    estou com erro no captcha ele nao mostra a imagem

    Comment

    X
    Working...
    X