script newsletter no multi-enregistement mail

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : script newsletter no multi-enregistement mail

par daemonastre » 27 août 2008, 08:28

je viens d'essayer et ca marche inpect :D . Merci Ryle de ton aide et tu peux mettre ce message comme [résolu]!
merci encore et a++ sur PHPfrance.

par Ryle » 26 août 2008, 11:47

Oulah, pas besoin de preg_match pour controler la présence d'un doublon :)

Déjà, il faut modifier ta requête pour qu'elle ne compte pas l'ensemble des enregistrements en base, mais seulement ceux pour lesquels l'adresse mail correspond à celle que tu es en train de traiter :
$sql = "SELECT COUNT(*) AS nb FROM nletters WHERE ton_champ_en_base = '$email' ";
Tu exécute ensuite la requête et récupère le résultat :
$info = mysql_query($sql); 
$emailbis = mysql_fetch_array($info); 
Tu regardes enfin combien d'enregistrements contenant l'email cherché ont été trouvé :
if ($emailbis['nb'] > 0) // au moins un enregistrement trouvé
  return true; // l'email est un doublon
else
  return false; // email non trouvé, on va pouvoir l'insérer
Il ne te reste plus qu'à tester le résultat de ta fonction emaildoublon() : s'il est vrai, l'email est un doublon, on ne l'insère pas, s'il est faux, l'email est tout beau, tout nouveau, tout chaud et si son format est correct (confirmé par VerifierAdresseMail()) alors tu peux l'insérer :)

par daemonastre » 26 août 2008, 08:27

bonjour,
voilà j'ai écouté ryle pour ces solutions et je lui en remerci mais moi étant débutant il me trouve une erreur:Warning: preg_match() expects parameter 1 to be string, resource given in C:\Logiciels\site web\Wamp\wamp\www\Site\nlettersrecevoir.php on line 50
de plus le message envoyé et toujours email invalide et je ne peux rentrer d'email dans ma BDD.
En faite j'ai modifier et j'ai aussi utiliser le preg_match dont je ne sais à quoi il sert trop comme dans le function verifieradresseemail. Si non, j'ai essayé ça qui ne marche pas aussi mais il rentre l'email dans la BDD et pas de message d'erreur mais ca évite pas les doublons:

Code : Tout sélectionner

$info = mysql_query("SELECT count(*) FROM nletters"); $emailbis = mysql_fetch_array($info); if($_POST['email'] != $info['email']) { ...
je vous redonne mon script modifier:

Code : Tout sélectionner

<p> Insérer votre email pour s'abonner au newsletters du Site.<br /> <div class="nlettersend"> <form action="nlettersrecevoir.php" method="post"> <input type="text" style="width:125px;height:16px;" name="email" class="nlettersrec" /> <input type="image" name="img_nletters" src="img-nletters/bouton-ok.png" /> </p> </form> </div> <?php mysql_connect("localhost","root",""); mysql_select_db("coursphp"); $retour = mysql_query("SELECT COUNT(*) AS nbre_abonnes FROM nletters"); $nombre = mysql_fetch_array($retour); ?> <p class="default"><?php echo$nombre['nbre_abonnes'];?> Newbies abonnés</p> <?php if(isset($_POST['email'])) { if(!empty($_POST['email'])) { $email = mysql_real_escape_string(htmlspecialchars($_POST['email'])); function emaildoublon($email) { $info = mysql_query("SELECT count(*) FROM nletters"); $emailbis = mysql_fetch_array($info); if(preg_match($info,$email)) return true; else return false; } function VerifierAdresseMail($email) { $Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#'; if(preg_match($Syntaxe,$email)) return true; else return false; } if(VerifierAdresseMail($email) && emaildoublon($email)) { mysql_query("INSERT INTO nletters VALUES('','$email')"); ?> <p class="cadre"> <img src="img-nletters/right.png" alt="" class="rectif"/> Vous êtes bien abonné ! </p> <?php } else { ?> <p class="cadre"> <img src="img-nletters/wrong4.png" alt="" class="rectif"/> L'email rentrer n'est pas valide ! </p> <?php } } elseif(empty($_POST['email'])) { ?> <p class="cadre"> <img src="img-nletters/wrong4.png" alt="" class="rectif"/> Vous n'avez pas rempli le champ e-mail ! </p> <?php } } $titre="Newsletters The Newbie's Site.fr"; $resultat = mysql_query("SELECT email FROM nletters"); while( $donnees = mysql_fetch_array($resultat) or die(mysql_error())) { $email=$donnees['email']; $contenu="CA MARCHE OU PO?"; $from = "From: hello <[email protected]>\nMime-Version:"; $from .= " 1.0\nContent-Type: text/html; charset=ISO-8859-1\n"; mail($email,$titre,$contenu,$from); } mysql_close(); ?> merci de bien revouloir m'aider.

par @rthur » 25 août 2008, 18:42

Bonjour,

La fonction REPLACE de MySQL peut également t'être utile:
http://dev.mysql.com/replace

par Ryle » 25 août 2008, 17:58

Bah pour éviter d'avoir des doublons dans ta base, il suffit de faire un SELECT (un count(*) par exemple) pour vérifier si le mail que tu veux insérer n'existe pas déjà avant de faire le INSERT :)

C'est le même principe que pour ta fonction VerifierAdresseMail() qui contrôle le format, suffit juste de contrôler également si elle n'est pas déjà présente en base :)

script newsletter no multi-enregistement mail

par daemonastre » 25 août 2008, 17:33

boujour,
j'ai un petit probleme avec mon script newsletters en php/mysql, je n'arrive pas à ce l'enregistrement d'un email soit bloqué lorsqu'il se trouve déjà dans ma BDD. je vous donne mon script pour que vous puissiez m'aider et merci d'avance pour vos réponses.

voici le script newsletters:
<p>   
Insérer votre email pour s'abonner au newsletters du Site.<br />
 <div class="nlettersend">  
<form action="nlettersrecevoir.php" method="post">
<input type="text" style="width:125px;height:16px;" name="email" class="nlettersrec" />
<input type="image" name="img_nletters" src="img-nletters/bouton-ok.png" />
</p>
</form>
 </div>
 
 
 <?php
mysql_connect("localhost","root","");
mysql_select_db("coursphp");

$retour = mysql_query("SELECT COUNT(*) AS nbre_abonnes FROM nletters");
$nombre = mysql_fetch_array($retour);
?>
<p class="default"><?php echo$nombre['nbre_abonnes'];?> Newbies abonnés</p>
<?php
  
if(isset($_POST['email']))
{
 if(!empty($_POST['email']))
 {
 $info = mysql_query("SELECT email FROM nletters");
$emailbis = mysql_fetch_array($info);
if($_POST['email'] != $emailbis['email'])
{
  $email = mysql_real_escape_string(htmlspecialchars($_POST['email']));

  function VerifierAdresseMail($email)
 {
   $Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#';
   if(preg_match($Syntaxe,$email))
      return true;
   else
     return false;
 }
  if(VerifierAdresseMail($email))
  {
  mysql_query("INSERT INTO nletters VALUES('','$email')");
  ?>
  <p class="cadre">
    <img src="img-nletters/right.png" alt="" class="rectif"/> 
  Vous êtes bien abonné !
  </p>
  <?php
  }
  else
  {
  ?>
    <p class="cadre">
  <img src="img-nletters/wrong4.png" alt="" class="rectif"/>
 L'email rentrer n'est pas valide !
 </p>
 <?php
  }
 }
 }
 elseif(empty($_POST['email']))
 {
 ?>
  <p class="cadre">
  <img src="img-nletters/wrong4.png" alt="" class="rectif"/>
 Vous n'avez pas rempli le champ e-mail !
 </p>
 <?php
 }
}

$titre="Newsletters The Newbie's Site.fr";


$resultat = mysql_query("SELECT email FROM nletters");
while( $donnees = mysql_fetch_array($resultat) or die(mysql_error()))
{
$email=$donnees['email'];

 $contenu="CA MARCHE OU PO?";

 $from = "From: hello <[email protected]>\nMime-Version:"; 
  $from .= " 1.0\nContent-Type: text/html; charset=ISO-8859-1\n"; 
  
mail($email,$titre,$contenu,$from);
}
mysql_close();
 ?>