[Tuto PHP] Apprendre à créer une Newsletter

TrecKo

TrecKo Le 3 août 2016 à 10:39 (Édité le 25 janvier 2019 à 17:52)

Salut tout le monde !

Alors aujourd'hui, je vais vous apprendre à créer une newsletter. Vous allez me dire

Il y a déjà beaucoup de tuto à ce propos.
Certe, il y a beaucoup de tuto mais d'une personne à une autre, le code change car soit nous avons pas la même façon de développer ou soit le système n'est pas assez approfondi.

Alors, pour commencer nous aller créer une table dans notre base de donnée.
CREATE TABLE `newsletter` (
  `id` int(11) NOT NULL,
  `email` varchar(255) NOT NULL,
  `ip` text NOT NULL,
  `dates` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Ensuite, créer deux fichiers, un qui se nommera "newsletter.php" et un autre qui se nommera "newsletter.view.php", une fois c'est deux fichiers créer, nous allons créer le formulaire qui va nous permettre de sauvegarder notre adresse e-mail dans notre base de donnée. Ce formulaire ce met dans la page newsletter.view.php
<form method="POST">
   <label>Adresse e-mail</label><br />
   <input type="email" name="newsletter" /><br /><br />
   <input type="submit" name="newsletterform" value="Envoyer" />
</form>
Maintenant, nous allons faire l'envoi de l'e-mail dans la base de donnée en faisant plusieurs vérifications. Ce code se met dans la page newsletter.php
if(isset($_POST['newsletterform'])){
   if(isset($_POST['newsletter'])){
      if(!empty($_POST['newsletter'])){
         $newsletter = htmlspecialchars($_POST['newsletter']);
         if(filter_var($newsletter, FILTER_VALIDATE_EMAIL)) {
               $reqip = $bdd->prepare("SELECT * FROM newsletter WHERE ip = ?");
               $reqip->execute(array($_SERVER['REMOTE_ADDR']));
               $ipexist = $reqip->rowCount();
                  if($ipexist == 0) {
                     $reqmail = $bdd->prepare("SELECT * FROM newsletter WHERE email = ?");
                     $reqmail->execute(array($newsletter));
                     $mailexist = $reqmail->rowCount();
                     if($mailexist == 0){
                        $sql = $bdd->prepare('INSERT INTO newsletter(email,ip,dates) VALUES (?,?,NOW())');
                     $sql->execute(array($newsletter,$_SERVER['REMOTE_ADDR']));
                        header("Location: newsletter.php");
                     } else {
                        $erreur = "Vous êtes déjà inscrit à la Newsletter..";
                     }
                  } else {
                     $erreur = "Vous êtes déjà inscrit à la Newsletter..";
                  }
         } else {
            $erreur = "Vous devez indiquer une adresse e-mail..";
         }
      } else {
         $erreur = "Vous devez remplir tout les champs vides..";
      }
   }
}
Dans le code que nous venons de faire, nous avons vérifié si nous étions déjà inscrit ou non, si nous avons indiquer une adresse e-mail valide et si nous avons rien rempli dans le champ. Pour ce système, nous allons faire une adresse e-mail par IP après à vous de modifier à votre guise.

Maintenant, c'est bien nous sommes inscrit, mais vous en avez marre de recevoir des e-mails ? Vous désirez vous désinscrire de la Newsletter ? Alors faisons le système de désinscription 😀

On va créer une requête et faire une condition pour savoir si nous sommes inscrit, alors sa nous affiche le bouton désinscrire et si nous sommes pas inscrit sa nous affiche le formulaire d'inscription à la Newsletter. Ce code est à insérer dans la page newsletter.php
$reqnewsletter = $bdd->prepare("SELECT * FROM newsletter WHERE ip = ?");
$reqnewsletter->execute(array($_SERVER['REMOTE_ADDR']));
$newsletterexist = $reqnewsletter->rowCount();
Maintenant, sur la page où vous afficher le bouton.
<?php if($newsletterexist == 0) { ?>
<form method="POST">
   <label>Adresse e-mail</label><br />
   <input type="email" name="newsletter" /><br /><br />
   <input type="submit" name="newsletterform" value="Envoyer"/>
</form>
<?php } else { ?>
   <label>Adresse e-mail</label><br />
   <input type="email" name="newsletter" disabled/><br /><br />
<?php while($news = $reqnewsletter->fetch()) { ?>
<a href="?deinscription=<?= $news['id'] ?>">Me déinscrire de la Newsletter</a>
<?php } ?>
<?php } ?>
Donc voici le code au final pour la page newsletter.view.php . Maintenant nous allons passer au dernier code PHP du tuto, la désinscription.

if(isset($_GET['deinscription'])){
   if(!empty($_GET['deinscription'])){
      $deinscription = htmlspecialchars($_GET['deinscription']);
      $reqip = $bdd->prepare("SELECT * FROM newsletter WHERE ip = ?");
       $reqip->execute(array($_SERVER['REMOTE_ADDR']));
       $ipexist = $reqip->rowCount();
       if($ipexist == 1){
          $info = $bdd->prepare('SELECT * FROM newsletter WHERE id = ?');
         $info->execute(array($deinscription));
         $info = $info->fetch();
         if($info['ip'] == $_SERVER['REMOTE_ADDR']){
            $sql = $bdd->prepare('DELETE FROM newsletter WHERE id = ?');
            $sql->execute(array($deinscription));
            header("Location: newsletter.php");
         } else {
            $erreur = "Cette inscription ne vous appartient pas..";
         }
      } else {
         $erreur = "Vous n'êtes pas inscrit à la Newsletter..";
      }
   } else {
      $erreur = "L' ID de l'inscription n'est pas présente..";
   }
}
Et voilà, nous avons un système de newsletter fonctionnel, je vous donne le code des deux pages entières plus bas, la seul chose que je vous laisse faire, c'est la connexion à la base de donnée 😀

newsletter.php
<?php
$reqnewsletter = $bdd->prepare("SELECT * FROM newsletter WHERE ip = ?");
$reqnewsletter->execute(array($_SERVER['REMOTE_ADDR']));
$newsletterexist = $reqnewsletter->rowCount();
if(isset($_POST['newsletterform'])){
   if(isset($_POST['newsletter'])){
      if(!empty($_POST['newsletter'])){
         $newsletter = htmlspecialchars($_POST['newsletter']);
         if(filter_var($newsletter, FILTER_VALIDATE_EMAIL)) {
               $reqip = $bdd->prepare("SELECT * FROM newsletter WHERE ip = ?");
               $reqip->execute(array($_SERVER['REMOTE_ADDR']));
               $ipexist = $reqip->rowCount();
                  if($ipexist == 0) {
                     $reqmail = $bdd->prepare("SELECT * FROM newsletter WHERE email = ?");
                     $reqmail->execute(array($newsletter));
                     $mailexist = $reqmail->rowCount();
                     if($mailexist == 0){
                        $sql = $bdd->prepare('INSERT INTO newsletter(email,ip,dates) VALUES (?,?,NOW())');
                  $sql->execute(array($newsletter,$_SERVER['REMOTE_ADDR']));
                        header("Location: newsletter.php");
                     } else {
                        $erreur = "Vous êtes déjà inscrit à la Newsletter..";
                     }
                  } else {
                     $erreur = "Vous êtes déjà inscrit à la Newsletter..";
                  }
         } else {
            $erreur = "Vous devez indiquer une adresse e-mail..";
         }
      } else {
         $erreur = "Vous devez remplir tout les champs vides..";
      }
   }
}
if(isset($_GET['deinscription'])){
   if(!empty($_GET['deinscription'])){
      $deinscription = htmlspecialchars($_GET['deinscription']);
      $reqip = $bdd->prepare("SELECT * FROM newsletter WHERE ip = ?");
       $reqip->execute(array($_SERVER['REMOTE_ADDR']));
         $ipexist = $reqip->rowCount();
       if($ipexist == 1){
          $info = $bdd->prepare('SELECT * FROM newsletter WHERE id = ?');
         $info->execute(array($deinscription));
         $info = $info->fetch();
         if($info['ip'] == $_SERVER['REMOTE_ADDR']){
            $sql = $bdd->prepare('DELETE FROM newsletter WHERE id = ?');
            $sql->execute(array($deinscription));
            header("Location: newsletter.php");
         } else {
            $erreur = "Cette inscription ne vous appartient pas..";
         }
      } else {
         $erreur = "Vous n'êtes pas inscrit à la Newsletter..";
      }
   } else {
      $erreur = "L' ID de l'inscription n'est pas présente..";
   }
}
require('faq.view.php');
?>
newsletter.view.php
<!DOCTYPE html>
<html>
<head>
   <title>Tuto PHP - Création d'une Newsletter</title>
</head>
<body>
<?php if($newsletterexist == 0) { ?>
<form method="POST">
<label>Adresse e-mail</label><br />
<input type="email" name="newsletter" /><br /><br />
<input type="submit" name="newsletterform" value="Envoyer"/>
</form>
<?php } else { ?>
<label>Adresse e-mail</label><br />
<input type="email" name="newsletter" disabled/><br /><br />
<?php while($news = $reqnewsletter->fetch()) { ?>
<a href="?deinscription=<?= $news['id'] ?>">Me déinscrire de la Newsletter</a>
<?php } ?>
<?php } ?>
</body>
</html>
Et voilà, vous savez maintenant comment créer un système de newsletter, vous pouvez également faire un système pour envoyer les e-mails vous même depuis votre administration ou autre page dont seul vous ou les membres de votre équipe puisse y accéder.

Si vous avez des questions à propos de ce système, je vous invite à laisser un commentaire, si j'ai oublié des choses dans mon code, prévenez-moi 😋

Bonne journée à tous !
lecteursdb

lecteursdb Le 3 août 2016 à 11:00

Salut c'est Cool je le regarderais plus en profondeur dès que possible...merci c'est vraiment important ;)
TrecKo

TrecKo Le 3 août 2016 à 14:32

Mais derien 😀 C'est un système qui peut toujours servir ;) 
Johan-Krn

Johan-Krn Le 3 août 2016 à 16:29

salut pas mal comme tuto merci sa ma aider
TrecKo

TrecKo Le 3 août 2016 à 23:24

Salut, je suis ravi que sa t'a aider 😀
Balatharas

Balatharas Le 20 août 2016 à 20:45

Et moi alors xD moi aussi j'en ai fait un ! Pas approfondi mais quand même un ! xD
niko974

niko974 Le 7 mars 2018 à 16:32

Salut, ton tuto est le plus simple a suivre, mais ta variable  $newsletterexist ne semble pas être definit. Est-ce normal?

yvesroland

yvesroland Le 21 mars 2018 à 02:20

J'ai aimé ce Tutorial mais je voudrais avoir quelques indications quand a la creation du système pour envoyer les e-mails a partir de l'administration. Je sais que je dois creer un page admin qui me donnera le droit d'envoyer des mail mais le hic cest comment faire le systeme d'envoie de mails. Merci
Balatharas

Balatharas Le 21 mars 2018 à 14:01

@yvesroland Dis donc c'est une blague ? Envoyer des mails en PHP c'est une question qui à été posée des millions de fois ! PrimFX en a fait une vidéo... Tu aurais pu faire une recherche
Renseigne toi sur PHPMailer
Profil introuvable

Profil introuvable Le 22 mars 2018 à 23:51

Re:

De même le topic est assez vieux, ne les déterrez pas ça ne sert à rien vu que son auteur n'y est plus dessus depuis longtemps... 😐 (En savoir plus...)
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte