Sistema De Newsletter Em PHP e MySQL

Todo e qualquer dono de site quer ter algum retorno com seu investimento!

Um dos recursos que ele terá no dia a dia será um contato mais próximo com quem visualiza seu site!

Para isto serve o Sistema de Newsletter!

Abaixo você terá uma descrição completa sobre como elaborar este tipo de aplicação e em anexo (como de costume), enviaremos o sistema completo para que você possa testar e claro: Utilizar no seu site.

Passo 1: Estrutura de pastas

Como alguns já sabem, gosto de focar os sistemas que desenvolvo de forma limpa, prática e organizada.

Por este motivo, apresentamos abaixo a estrutura utilizada nas pastas deste Sistema:

SITE
ADMIN
CONFIG (arquivos de acesso à base de dados)
IMAGENS (imagens do menu gerencial)
INC (arquivo de validação de formulário)

Passo 2: Criando as Tabelas na Base de Dados:

Antes de partirmos para a programação, abra o arquivo script-sql.txt (disponível no arquivo 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 você queira utilizar este programa, clique em SQL Editor e cole o conteúdo do script (conforme imagem abaixo).

Criar Tabela MySQL

Passo 3: Script De Conexão

Tendo as pastas já criadas e as tabelas na base de dados geradas, você já pode dar início à Programação!

Crie o arquivo CONFIG.PHP e coloque dentro da pasta CONFIG.

Neste arquivo, você deverá disponibilizar o texto abaixo:


-----CONFIG.PHP -----
<?  
$database="localhost:3307"; // SERVIDOR E PORTA UTILIZADA  
$dbname="tutorial"; // BASE DE DADOS
$usuario="root"; // USUÁRIO DO MYSQL
$dbsenha=""; // SENHA DO MYSQL

$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"; }
?>
-----

Passo 4: Menu Gerencial – Formulário (index.php):

A página index.php apesar de ter uma aparência simples, é de fundamental importância para este sistema.

Através dela temos acesso ao menu gerencial!

OBS.: Para facilitar seus acessos, criamos o usuário abaixo:

Login: teste@teste.com – Senha: 123456

Login No Sistema

Passo 5: Menu Gerencial – Autenticação (autenticacao.rotinas.php):

Esta será a página onde faremos todo o gerenciamento de usuários, isto é: Diremos ao Sistema quem deve ou não ter acesso à Área Gerencial.

Bem… estamos disponibilizando um script simples de acesso, porém, caso seja de seu interesse, você poderá melhorar este código.


-----Linha 02 e 03 -----
session_start();
include ("../config/conexao.php");

-----

Talvez esta seja a parte mais importante do código, pois se você não tiver este conteúdo em seu código, ele simplesmente não vai registrar a sessão, nem permitir a conexão à base de dados.


-----Linha 06 à Linha 08 -----
$cliente_username = $_POST["usuario"];
$cliente_password = $_POST["senha"];
$enviado          = $_POST["enviado"];

-----

Através das linhas acima você receberá as variáveis com o nome do usuário, senha de acesso e o status (neste caso, utilizaremos a condição enviado para reforçar na segurança).


-----Linha 10 à Linha 29 -----

if ($enviado == "posted"){    

if (!isset($cliente_username) or !isset($cliente_password)) { echo "Erro!"; exit; }  
if (empty($cliente_username) or empty($cliente_password)) { echo "Dados inválidos!"; exit; }

$query = "select * from tbl_usuarios where email = '$cliente_username' and senha = '$cliente_password'";
$result = mysql_query($query);
$number = mysql_num_rows($result);

if ($number==0) { ?>
<script>alert('Autorização inexistente/Senha inválida ou expirada.');history.back();</script>
<?
exit;
} else {
$_SESSION['usuario_id'] = mysql_result($result,0,'id');
$_SESSION['usuario_nome'] = mysql_result($result,0,'nome');
?><script>document.location = '../principal.php'</script><?
}
mysql_close($conexao);

}
-----

Nas linhas acima o script fará uma validação completa, verificando se o usuário e a senha informado existem.

Antes disso, ele só fará a leitura se a variável $enviado (exemplo da linha 6 à linha 8) tiver o valor posted.

Caso este valor (que será passado através do método POST) não seja o informado, ele sequer fará a leitura no demais.

Nas linhas a seguir (após ele validar a variável $enviado) o script fará uma série de verificações, finalizando ao registrar as sessões para o ID e NOME do Usuário selecionado. Além disso ele fará seu direcionamento à página principal.php.

Passo 6: Menu Gerencial – Página Principal (principal.php):

Esta será a página principal do sistema, onde teremos acesso às demais a serem gerenciadas (conforme você pode ver na imagem abaixo).

Página Principal

OBS.: Apesar de também estar disponível no Sistema (no arquivo em anexo), para não tomar muito seu tempo, falaremos nesta matéria apenas dos itens Cadastrar Newsletter e Listar Newsletter.

Certamente os comentários diversos disponíveis nesta matéria sanarão qualquer dúvida que você tenha quanto aos demais arquivos.


-----Linha 02 à Linha 11 -----
session_start();
if (empty($_SESSION['usuario_id'])){
echo "Acesso negado!";
exit;
}else{
include('config/conexao.php');

$usuario_id   = $_SESSION['usuario_id'];
$usuario_nome = $_SESSION['usuario_nome'];
}
-----

Neste trecho do script faremos uma validação!

Se o ID e NOME do usuário tiver em uso nsta sessão, ele deverá lhe dar acesso, caso não esteja em uso ele deverá restringir o acesso.

Fará acesso também ao script conexao.php (responsável pela conexão ao banco de dados).

Após isto, o sistema fará algumas verificações simples neste script, só atentando para o botão excluir (onde ele deverá direcionar seu acesso ao script logout.php (responsável pela exclusão da sessão).

Passo 7: Menu Gerencial – Cadastrar Email (newsletter_cadastrar.php):

Esta é a página responsável pelo cadastro do email (conforme você pode ver na imagem disponível abaixo).

Seu código corresponde ao de um formulário simples. Posteriormente, você pode inserir uma validação em JavaScript.

Registar Email

Passo 8: Menu Gerencial – Script Newsletter (script_newsletter.php):

Trata-se de um script exclusivo que deverá receber as variáveis e tratá-las, antes de enviar cada registro ao banco de dados.

OBS.: Para saber mais sobre este script, sugerimos verificá-lo na íntegra, dentro da pasta ADMIN.


-----Linha 25 à Linha 29 -----

$acao = $_GET['acao'];

switch ($acao) {

case cadastrar:
-----

Assim como os demais scripts, o script_newsletter.php também tem o conteúdo padrão para manter sua segurança; porém, até para facilitar seu gerenciamento, recebe por método GET o motivo da entrada (exemplo: alterar, cadastrar ou excluir) e por método POST receberá os valores a serem manipulados.

OBS.: Após a inserção, edição ou exclusão, seja qual for o comando utilizado, o script fará o redirecionamento para uma outra página.

Passo 9: Menu Gerencial – Listar Emails (newsletter_listar.php):

Através desta página você poderá de forma prática e simples listar todos os emails cadastrados no sistema, podendo editá-lo ou efetuar sua exclusão a qualquer momento.

Listar Emails

Passo 10: Menu Gerencial – Editar Email (newsletter_editar.php):

Esta é uma página objetiva, onde de forma prática você conseguirá alterar o email cadastrado (conforme você pode ver na imagem abaixo).

Editar Email

Passo 11: Página Externa – Adesão à Newsletter (index.php):

Através desta página você terá a possibilidade de incluir o visitante do web site.

Adesão Newsletter

OBS.: Veja que o conteúdo está bem objetivo! Feito em HTML, você poderá disponibilizar em qualquer parte de seu site.

Você poderá implementar este script inserindo validação em JavaScript (a que você mais gostar).

Ficamos por aqui em mais uma matéria! Esperamos tê-lo ajudado em algo…

Caso você tenha alguma dúvida ou dificuldade, entre em contato conosco, onde terei o maior prazer em lhe auxiliar!

DOWNLOAD: Descarregue o código utilizado neste tutorial: Sistema De Newsletter Em PHP e MySQL, em formato .zip.

Be Sociable, Share!

43 Comentários

  1. Reynaldo Santos

    Boa noite,

    estou com problema.

    fiz tudo certo, porem quando as pessoas se cadastram na newslatter, o campo “e-mail” na index.php do admin (../admin/index.php) fica vazio, e no sql tbm fica vazio o campo e-mail.

     como conserto?

  2. Olá Pessoal,

    Desde já agradeço pela atenção e confiança prestada a nossas matérias!
    Há algumas semanas, estamos encontrando algumas incompatibilidades em alguns sistemas; Aliás, se você ler nossa matéria sobre configurações do Apache + PHP + MySQL, entenderá que algumas versões utilizam versões "beta" (que estão em fase de teste) para configurar seus Sistemas, causando no final tal tipo de falha.
    Bem… como você pode ver em nossas matérias, nossa intenção é levar qualidade e praticidade aos Internautas, por esse motivo, estarei "adaptando" o script de forma que funcione tanto com versões estáveis, quanto em versões instaveis do PHP ou Apache.
    O correto sería você configurar o PHP.INI para o ficheiro funcionar perfeitamente, mas… deixarei este assunto para matéria futura e de imediato, estarei adaptando este conteúdo.
    Visite esta matéria novamente nos próximos dias! Em caso de dúvidas ou maiores informações, esteja a vontade em me escrever ou chamar através do MSN e estarei dando total apoio. Abraço, Quemuel Aquino

  3. Gabriel

    Parabêns!
    Aqui está tudo funcionando corretamente, muito obrigado!

    • Quemuel Aquino

      Olá Gabriel,

      Fico feliz que gostou do script.

      Continue acompanhando nossas matérias, pois vem muita coisa boa por aí…

      Abraço,

      Quemuel

  4. Luis

    Muito bom!
    Apenas uma dúvida: como faço para ver o e-mail antes de enviar? apertando em confirmar ele envia direto, sem exibir a página prewiew.

    • Quemuel Aquino

      Olá Luis,

      Me chama no MSN comandosusa@gmail.com e te ajudo a resolver esse problema!

      Trabelhe dentro da estrutura LAMP… é um bom caminho para se evitar os bugs.

      Abraço,

      Quemuel

      • Robson

        Estou com mesmo problema, ele envia o e-mail mas não exibe o preview.

        no wamp ele da o seguinte erro. 

        ",$mensagem); // session_register('msg'); // session_register('de'); // session_register('email'); // session_register('assunto'); ?> 

  5. Steffan

    Está aparecendo um erro ao enviar: PHP Fatal error: Maximum execution time of 60 seconds exceeded in admin
    ewsletter_preview.php on line 302 o que faço? ele envia para parte da lista e para. Obrigado.

    • Olá Steffan! Está num servidor de hospedagem? Se tiver acesso ao php.ini, altere o max_execution_time = 60 para um valor maior. Experimente 120. Se não tiver acesso ao php.ini, coloque um ficheiro phpinfo.php com o código phpinfo(); dentro das tags php e chame o ficheiro no browser. Veja se o SERVER API é Apache ou CGI. Se for apache, coloque este código num ficheiro .htaccess na pasta onde tem os ficheiros php da newsletter: php_value max_execution_time 120 Se for CGI, coloque um ficheiro php.ini na pasta onde colocou os ficheiros php da newsletter e coloque o código max_execution_time = 120 (sem tags php). Funcionou? Um Abraço! Rui Soares

  6. Jorge S

    Olá,
    Estou a ter alguns problemas com o envio de emails uma vez que os emails são enviados pelo nobody, e o servidor onde se encontra a meu site não permite isso, ou seja, só emails com autenticação. Seria possível postar um solução para este problema? Seria possível colocar no script um espaço para colocar-mos o email e a respectiva password para efetuar a autenticação do mesmo?
    Cumprimentos a todos,

    • Olá Jorge,

      Bem observado… realmente, por vários Servidores trabalharem com Newsletter, envio de email em massa, eles estão cortando este recurso. Não são todos, mas os que conhecem de gerenciamento estão fazendo isso.

      Usarei sua dúvida e postarei no mês de Setembro algo exclusivo para que possamos sanar este tipo de problema. ok?

      Caso tenha alguma outra sugestão ou dúvida, entre em contato conosco…

      Para facilitar os contatos, add meu EMail: quemuel@qsasolucoescorporativas.com.br.

      Abraço,

      Quemuel Aquino

  7. Ademir

    Ola….Bom dia!!!
    estou querendo colocar uma Newsletter no meu site, mas estou tendo dificuldades com o banco de dados! meu site é feito em PHP, e nunca mechi com banco de dados.

    Passo 2: Criando as não entendi muito bem esta parte –>passo 2ª Tabelas na Base de Dados: tem algum outro programa q eu faço isso?, qual é o nome do banco de dados?se puder me mandar o mesmo banco de dados deste tutoria para meu e-mail ..se puder me ajudar, agadeço desde já..Att;Ademir

  8. Angelo Márcio

    Cara, o melhor tutorial sobre newslleters que encontrei na web. Funcionou perfeitamente aqui. Parabéns! Era o que eu estava precisando.

  9. edilson

    Uma correção (acredito eu) na linha:

    Crie o arquivo CONFIG.PHP e coloque dentro da pasta CONFIG.

    Não seria "crie o arquivo conexao.php e coloque dentro da pasta config?

    Grato

  10. clistenis

    Boa tarde amigos, o script é 100% funcional porém achei um item e resolvi compartilhar com vocês, este script não aceita SMTP autenticado ? Porque eu não consegui receber os e-mails enviados pela newsletter.

  11. Matthew

    #1067 – Invalid default value for 'email' 

    no meu deu essa Mensagem :s

  12. Olá,
    muito bom esse script, funcionou perfeitamente em meu servidor. Excelente trabalho amigo.

  13. Parabens a toda a equipe é dificil vc achar um codigo q vale na net eu tenho uma dúvida..
    nao testei esse codigo aqui pq to sem o phpmyadmin e sem outras coisas pra ver mas essa parte do codigo
    " $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"; }?>"

    isso se conecta ao banco de dados msmo pq eu usava assim e nao estava indo tive q mandar buscar na marra..

  14. Este site é o melhor funciona perfeitamente, nunca vi um conteúdo tão objetivo quanto esse parabéns!

  15. http://www.mxstudio.com.br/dreamweaver/sistema_de

    este tem autenticação porém não tem a parte final!

  16. Katiani

    Preciso enviar 50.000 emails por semana. Esse sistema funciona?

  17. Peter

    Muito Bom! Parabéns

  18. Lucaks Quinto

    Olá o sistema instalei bem direitinh, mais ele vai para caixa de spam tem como alterar para ir para caixa de entrada?

  19. robson

    Vlw cara fiz um sistema aqui dei uma implementadas apenas, iria levear horas pra fazer isso agora fiz em menos de 1 hora, vlw mesmo

  20. roger

    não ta rolando baixar os arquivos, e na primeira imagem falta um trecho do código!

    Consegue verificar por favor, é bem disso q preciso!
    parece bem completinho!

  21. ronaldo

    O download não esta funcionando 
    Teria como consertar 

  22. Jaylton

    Boa noite mano,
    Por favor se tivesse como atualizar o php de seu sistema de noticias, seria muito bom, poia a amaioria dos codigos estam ultrapassados

  23. almir

    quando em clico em cadastrar o nome e o email, ele só cadastra na primeira da primeira vez só que o email não esta aparecendo no painel de controle, porém se eu cadastrar o email no painel de controle o mesmo aparece na lista de email, como faço para resolver esse problema? tem que alterar
    —–Linha 06 à Linha 08 —–
    $cliente_username = $_POST["usuario"];
    $cliente_password = $_POST["senha"];
    $enviado = $_POST["enviado"];

    —– ?

  24. João Pavani

    Resolveu meu problema de forma super fácil! Valeu cara!

  25. Iris

    Filé, sensacional mesmo. Só uns errinhos, mais pra quem sabe / saca de php / sql isso não é nada. Tinha até umas informações q estava a muito tempo procurando achei no meio da bagunça, Parabéns mesmo e continue sempre assim, disposto a ajudar a galera.

  26. Erick Batista

    Boa noite,

    estou com problema.

    fiz tudo certo, porem quando as pessoas se cadastram na newslatter, o campo "e-mail" na index.php do admin (../admin/index.php) fica vazio, e no sql tbm fica vazio o campo e-mail.

    como conserto?

Participa! Comenta... para Quemuel Aquino