Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2509 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Newsletter PHP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Newsletter PHP

n°1944387
fab1105
Posté le 25-11-2009 à 12:58:27  profilanswer
 

Bonjour,
 
J'ai un formulaire d'inscription dans lequel j'ai un champ de type checkbox nommé "newsletter" à cocher pour recevoir une newsletter.
Seulement l'inscription ne fonctionne que si le champ checkbox est coché, dans le cas contraire l'inscription ne fonctionne pas.
 
Voici mon code :
 
                                               $pseudo=strip_tags(trim($_POST['pseudo']));
      $mail=strip_tags(trim($_POST['mail']));
      $pass=strip_tags(trim($_POST['pass']));
      $newsletter=$_POST['newsletter'];
      if($newsletter!=NULL) {
       $newsletter=1;
      }
       
      mysql_connect("localhost", "root", "" ) or die ("erreur de connexion" );
                     mysql_select_db("espace_membre" );
       
      $pseudo=mysql_real_escape_string($pseudo);
      $mail=mysql_real_escape_string($mail);
      $pass=mysql_real_escape_string($pass);
 
$pass=sha1($pass);                                                                                               mysql_query("SET NAMES UTF8" );
       mysql_query("INSERT INTO membres VALUES ('','$pseudo', '$mail','$pass', '$newsletter')" );
       
       mysql_close();
 
Quelqu'un aurait-il une idée pour que l'inscription fonctionne lorsque le champ newsletter du formulaire n'est pas coché?
Merci pour vos réponses.

mood
Publicité
Posté le 25-11-2009 à 12:58:27  profilanswer
 

n°1944400
d@kn1ko
Posté le 25-11-2009 à 13:33:55  profilanswer
 


 
ya rien qui empêche d'exécuter la requête dans ton code.
 
if($newsletter==1){
mysql_query("INSERT INTO membres VALUES ('','$pseudo', '$mail','$pass', '$newsletter')" );  
}else{
echo "pas d'inscription";  
}

n°1944411
fab1105
Posté le 25-11-2009 à 13:44:24  profilanswer
 

Bonjour darknico, merci pour ta réponse,  
En fait ce que je souhaite c'est que l'inscription puisse se faire dans les deux cas, coché ou pas coché, et le code que tu me donnes sauf erreur de ma part, ne permet l'inscription que dans le cas ou la case est cochée.
Ce que je n'arrive pas à comprendre c'est ce qui ne va pas dans mon code qui empêche l'inscription quand la case n'est pas cochée.

n°1944415
stealth35
Posté le 25-11-2009 à 13:49:16  profilanswer
 

if($newsletter!=NULL) {
       $newsletter=1;
      }else{
$newletter = 0;
}
 
mais ca devrai te generer une erreur ton $_POST['newletter']

n°1944420
fab1105
Posté le 25-11-2009 à 13:53:32  profilanswer
 

Bonjour stealth35, j'avais déjà essayé ce code mais ça ne marche toujours pas, impossible de s'inscrire sans avoir coché la case newsletter.

n°1944423
Tirkyth
Posté le 25-11-2009 à 13:57:51  profilanswer
 

Quand la case n'est pas cochée, ton $_POST['newsletter'] n'existe pas il me semble, donc ta variable $newsletter doit valoir null et donc le test d'inscription ne passe pas.
 
Si tu veux que l'inscription se fasse dans tous les cas, tu n'as qu'à faire directement $newsletter = 1, sans t'occuper de $_POST.
 
Maintenant moi ce que je me demande :
Quel est l'intérêt de la case à cocher si dans tous les cas l'inscription est effectuée ?
 
De plus, il me semble que c'est contraire aux lois de nombreux pays, tu risque de t'attirer des ennuis à mon avis.

n°1944432
fab1105
Posté le 25-11-2009 à 14:02:53  profilanswer
 

Bonjour Tirkyth, pourquoi cela serait contraire aux lois de nombreux pays?  
L'utilisateur a le choix lors de son inscription de s'abonner à la newsletter du site ou non, cela se fait sur la plupart des sites internet comme sur celui ci d'ailleurs.... Je ne comprends pas ce que tu veux dire.

n°1944448
fab1105
Posté le 25-11-2009 à 14:11:15  profilanswer
 

J'en ai oublié de répondre à ta proposition, le problème est que si je fais directement :  
$newsletter=1; le champ newsletter de ma base de données prendra pour valeur 1, et donc quand j'enverrai la newsletter aux membres du site, elle sera envoyée à tous les membres même à ceux qui ne désiraient pas la recevoir.
Il y' a surement plusieurs façon de procéder pour envoyer une newsletter à ses membres et surement meilleures que la mienne, mais dans la mienne il faut que le champs de la base de donnée ait pour valeur 1 pour la recevoir et 0 si l'utilisateur ne le souhaite pas.

n°1944456
Tirkyth
Posté le 25-11-2009 à 14:16:30  profilanswer
 

fab1105 a écrit :

En fait ce que je souhaite c'est que l'inscription puisse se faire dans les deux cas, coché ou pas coché, et le code que tu me donnes sauf erreur de ma part, ne permet l'inscription que dans le cas ou la case est cochée.
Ce que je n'arrive pas à comprendre c'est ce qui ne va pas dans mon code qui empêche l'inscription quand la case n'est pas cochée.


Citation :

Quelqu'un aurait-il une idée pour que l'inscription fonctionne lorsque le champ newsletter du formulaire n'est pas coché?


Quand je lis ça, moi je vois que tu souhaites que l'inscription se fasse peu importe si la case est cochée ou non.

n°1944458
Tirkyth
Posté le 25-11-2009 à 14:19:27  profilanswer
 

Bon en fait je crois que j'ai compris ce que tu veux dire:
 
C'est l'inscription du membre entier qui ne se fait pas si il ne coche pas la case newsletter c'est ça ?

mood
Publicité
Posté le 25-11-2009 à 14:19:27  profilanswer
 

n°1944473
fab1105
Posté le 25-11-2009 à 14:32:40  profilanswer
 

Oui c'est bien ce que je veux, que l'inscription se fasse que la case soit cochée ou non. Et oui c'est l'inscription du membre qui ne se fait pas s'il ne coche pas la case, car le script s'arrête avant.
T'as une idée?
 
Ah oui j'oubliais, le plus bizarre c'est que le script fonctionnait bien hier soir, et ce matin ça ne marchait plus. Pourtant je n'y ai pas retouché, ça me rend dingue...

n°1944487
Tirkyth
Posté le 25-11-2009 à 14:39:58  profilanswer
 

J'ai bien une idée oui, c'est sensiblement la même que stealth35 cela dit :

 
Code :
  1. $pseudo=strip_tags(trim($_POST['pseudo']));
  2. $mail=strip_tags(trim($_POST['mail']));
  3. $pass=strip_tags(trim($_POST['pass']));
  4.  
  5. $newsletter= isset($_POST['newsletter']) ? 1 : 0;
  6.  
  7. mysql_connect("localhost", "root", "" ) or die ("erreur de connexion" );
  8. mysql_select_db("espace_membre" );
  9.  
  10. $pseudo=mysql_real_escape_string($pseudo);
  11.  
  12. $pass=sha1($pass);
  13. mysql_query("SET NAMES UTF8" );
  14. mysql_query("INSERT INTO membres VALUES ('','$pseudo', '$mail','$pass', '$newsletter')" ) or die(mysql_error());
  15.  
 

J'ai rajouté un affichage d'erreur MySQL au cas où il y en ait une qui survienne, copie colle la et donne la nous ici ça aidera.


Message édité par Tirkyth le 25-11-2009 à 14:41:10
n°1944491
fab1105
Posté le 25-11-2009 à 14:42:08  profilanswer
 

Merci je vais essayer, mais je débute un peu et je ne comprends pas cette ligne :
$newsletter= isset($_POST['newsletter']) ? 1 : 0;  
enfin le ? 1 : 0;
Peux tu m'expliquer ce que ça veux dire ?

n°1944493
fab1105
Posté le 25-11-2009 à 14:44:34  profilanswer
 

J'ai essayé mais cela donne toujours le même résultat, lorsque l'on ne coche pas la case, l'inscription ne se fait pas.

n°1944496
Tirkyth
Posté le 25-11-2009 à 14:48:24  profilanswer
 

le "?" est l'opérateur ternaire. Ce n'est ni plus ni moins un "if".
 
Ca s'utilise très simplement: Devant le "?", c'est un test à vérifier. Dans notre cas, c'est isset($_POST['newsletter']). Après le "?" c'est la valeur ou l'expression que l'on souhaite utiliser. Et le ":" sert à donner une autre valeur dans le cas où le test n'est pas vérifié.
 
Pour être plus claire, j'aurais pu très bien écrire, à la place de cette ligne :

Code :
  1. if (isset($_POST['newsletter']))
  2. {
  3.    $newsletter = 1;
  4. }
  5. else
  6. {
  7.    $newsletter = 0;
  8. }


 
N'hésite pas si tu ne comprends toujours pas. Je te mets le lien vers la documentation au cas où : http://php.net/manual/fr/language. [...] arison.php (fais une recherche sur le mot "ternaire" dans la page, sans les guillemets)

n°1944498
Tirkyth
Posté le 25-11-2009 à 14:49:26  profilanswer
 

fab1105 a écrit :

J'ai essayé mais cela donne toujours le même résultat, lorsque l'on ne coche pas la case, l'inscription ne se fait pas.


As-tu un message d'erreur qui est affiché ?
 
Sinon peux-tu ajouter tout en haut de ton script

Code :
  1. var_dump($_POST);

n°1944506
fab1105
Posté le 25-11-2009 à 14:57:37  profilanswer
 

Merci pour l'explication, j'ai bien compris c'est assez clair.
Sinon non je n'ai pas de message d'erreur, c'est juste que lorsque la page inscription.php se recharge elle même après avoir cliqué sur envoyer, le script s'arrête avant d'insérer les données dans la base, avant d'envoyer le mail de confirmation et bien sûr avant la redirection en fin de script.
Alors que quand la case est cochée, tout le script s'exécute entièrement, j'ai bien un mail de confirmation, les données sont insérées dans ma table et la redirection est bien effectuée.

n°1944507
fab1105
Posté le 25-11-2009 à 14:59:04  profilanswer
 

Mais avec    1.
      var_dump($_POST);
   2.
      die;
là il y'a une erreur de parse

n°1944509
fab1105
Posté le 25-11-2009 à 15:00:02  profilanswer
 

Non c'est moi qui ai fait n'importe quoi j'ai :
array(0) { }

n°1944511
Tirkyth
Posté le 25-11-2009 à 15:01:29  profilanswer
 

Est-ce que tu peux afficher ton formulaire, ajouter le petit bout de code que j'ai mis dans ma réponse précédente tout au début de ton traitement en PHP et poster le résultat ?

 

Et sinon, est-ce que tu pourrais donner l'intégralité du code de ta page d'inscription ? (PHP + HTML)

 

Edit : Oui il faut que tu ajoutes ce petit bout de code juste avant d'envoyer le formulaire, il faut que tu le mettes en commentaire le temps d'afficher le formulaire.


Message édité par Tirkyth le 25-11-2009 à 15:03:00
n°1944528
fab1105
Posté le 25-11-2009 à 15:13:40  profilanswer
 

Oui je vais te donner le code mais il y'a 3 fichiers et c'est un peu long

Citation :


inscription.php :
 
<?php
 
session_start();
 
require_once("fonctions/valid_inscription.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=utf-8" />
<link rel="stylesheet" type="text/css" href="style.css" media="screen" />
<title>Page d'inscription</title>
</head>
 
<body>
 
 
<?php
 
if(isset($_SESSION['membre'])) {
       
       echo'Vous êtes déja connecté en tant que '.$_SESSION['membre'].'<br />';
       echo'<a href="deconnexion.php">Déconnectez vous</a> pour ouvrir une nouvelle session';
       }
       else {
         
        echo '<h2>Inscription</h2>';
        echo 'Inscrivez vous ou <a href="connexion.php">connectez vous<a/><br /><br />';
       
 
require("fonctions/invalide_form.php" );
 
?>
 
 
<form name="inscription" method="post" action="inscription.php">
<label for="pseudo">Pseudo : </label><input type="text" name="pseudo" id="pseudo" value="<?php if(isset($_POST['pseudo']))echo $_POST['pseudo'] ?>" /><br />
<label for="mail"> E-mail : </label><input type="text" name="mail" id="mail" value="<?php if(isset($_POST['mail']))echo $_POST['mail'] ?>" /><br />
<label for="mail2">Confirmez votre e-mail : </label><input type="text" name="mail2" id="mail2" value="<?php if(isset($_POST['mail2']))echo $_POST['mail2'] ?>" /><br />
<label for="pass">Choisissez un mot de passe : </label><input type="password" name="pass" id="pass" <?php if(isset($_POST['pass']))echo $_POST['pass'] ?> /><br />
<label for="pass2">Confirmez votre mot de passe : </label><input type="password" name="pass2" id="pass2" <?php if(isset($_POST['pass2']))echo $_POST['pass2'] ?> /><br />
<label for="newsletter">Recevoir par mail les nouvelles recettes(1 mail/semaine)</label><input type="checkbox" name="newsletter" id="newsletter" /><br />
<input type="submit" name="envoyer" value="Inscription" />
</form>
<?php
       }
       ?>
</body>
</html>
 
ensuite valid_inscription.php :
 
<?php
   
 
if(isset($_POST['pseudo']) and isset($_POST['mail']) and isset($_POST['mail2']) and isset($_POST['pass']) and isset($_POST['pass2']) and isset($_POST['newsletter'])) {
 
 if($_POST['pseudo'] != NULL and $_POST['mail'] != NULL and $_POST['mail2'] != NULL and $_POST['pass'] != NULL and $_POST['pass2'] != NULL) {
   
   if(preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail'])) {
     
            if($_POST['mail'] == $_POST['mail2']) {
     
            if($_POST['pass'] == $_POST['pass2']) {
           
           
          if ($_SERVER['HTTP_REFERER'] == 'http://localhost/code/espace_membre/inscription.php') {
           
           
       
      $pseudo=strip_tags(trim($_POST['pseudo']));
      $mail=strip_tags(trim($_POST['mail']));
      $pass=strip_tags(trim($_POST['pass']));
      $newsletter= isset($_POST['newsletter']) ? 1 : 0;  
       
       
     
       
      mysql_connect("localhost", "root", "" ) or die ("erreur de connexion" );
                     mysql_select_db("espace_membre" );
       
      $pseudo=mysql_real_escape_string($pseudo);
      $mail=mysql_real_escape_string($mail);
      $pass=mysql_real_escape_string($pass);
       
      $sql="SELECT id FROM membres WHERE pseudo='$pseudo'";
      $req = mysql_query($sql) or die(mysql_error());
      if(mysql_num_rows($req)==0) {
       
       $sql2="SELECT id FROM membres WHERE mail='$mail'";
          $req2 = mysql_query($sql2) or die(mysql_error());
          if(mysql_num_rows($req2)==0) {
       
       
       
        $to = $mail;
                 $sujet = 'Inscription !';
       
        $msg = '<html>
           <head>
        <title></title>
           </head>
     
           <body>
        <div style="background-color:#f3e7d1;">
        <h2 style="color:#274E9C; text-decoration:underline">Inscription</h2>
        <p>Bonjour,<br />
        Vous êtes maintenant membre de monsite.com</p>
        <p>Voici vos identifiants : <br />
        Pseudo : &nbsp; <strong>'.$pseudo.'</strong> <br />
        Mot de passe : <strong>'.$pass.'</strong>.<br/>
        Vous pouvez maintenant vous connecter à l\'espace membre du site.<br/><br/>
         
        <p>Cliquez sur le lien suivant pour vous connecter à votre espace membre.</p>
        <a href="#">Connexion à votre espace membre</a><br />
       
       
        En vous remerciant.<br/><br/>
        Wembaster de monsite.com
          </body>
             </html>';
       
       
       $headers  = 'MIME-Version: 1.0' . "\r\n";
                         $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
                         $headers .= 'From: "Mon site" <fabiloute@gmail.com>' . "\r\n";
                         $headers .= 'Reply-To: "Webmaster" <fabiloute@gmail.com>' . "\r\n";
 
 
                                                                                          mail($to, $sujet, $msg, $headers);
                                                                                     
                                                                                     
       $pass=sha1($pass);                                                                                                         mysql_query("SET NAMES UTF8" );
       mysql_query("INSERT INTO membres VALUES ('','$pseudo', '$mail','$pass', '$newsletter')" );
       
       mysql_close();
       
       header("Location: inscription_reussie.php" );
       
       
       
       }
      }
          }
         }
      }
   }
 }
}
 
       
       
 
                                                                               
 
?>
 
invalid_form.php :
 
<?php
 
if(isset($_POST['pseudo']) && isset($_POST['mail']) && isset($_POST['mail2']) && isset($_POST['pass']) && isset($_POST['pass2'])) {
 extract($_POST);
 
 if($pseudo == NULL) {
  echo 'Vous devez choisir un pseudo<br />';
 }
   
  if($pseudo != NULL && strlen($pseudo)<3) {
   echo 'Le pseudo est trop court<br />';
  }
   
  if($mail != NUll && !preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $mail)) {
   echo 'Cette adresse e-mail n\'est pas valide<br />';
  }
   
  if($mail == NULL) {
   echo 'Vous devez choisir un adresse e-mail<br />';
  }
   
  if( $mail != NULL && $mail != $mail2) {
   echo 'Les adresses e-mail sont différentes<br />';
  }
   
  if($mail != NULL && $mail2 == NULL) {
   echo'Vous devez confirmer votre adresse e-mail<br />';
  }
   
  if($pass != NULL && strlen($pass)<5) {
   echo 'Mot de passe trop court<br />';
  }
   
  if($pass == NULL) {
   echo 'Vous devez choisir un mot de passe<br />';
  }
   
  if($pass != NULL && $pass2 == NULL) {
   echo 'Vous devez confirmez votre mot de passe<br />';
  }
   
  if($pass != NULL && $pass != $pass2) {
   echo 'Les mots de passe sont différents<br />';
  }
   
  mysql_connect("localhost", "root", "" ) or die ("erreur de connexion" );
  mysql_select_db("espace_membre" );
   
  $pseudo=mysql_real_escape_string($pseudo);
     $mail=mysql_real_escape_string($mail);
  $passo=mysql_real_escape_string($pass);
   
  $sql="SELECT id FROM membres WHERE pseudo='$pseudo'";
     $req = mysql_query($sql) or die(mysql_error());
  if(mysql_num_rows($req)>0) {
   echo'Ce pseudo est déjà utilisé<br />';
  }
   
  $sql2="SELECT id FROM membres WHERE mail='$mail'";
     $req2 = mysql_query($sql2) or die(mysql_error());
     if(mysql_num_rows($req2)>0) {
   echo'Cette adresse e-mail est déja utilisée<br />';
  }
}
   
     
?>

n°1944542
Tirkyth
Posté le 25-11-2009 à 15:22:10  profilanswer
 

Le problème se situe je pense au début de valid_inscription.php
 
Tu as mis le test suivant :

Code :
  1. if(isset($_POST['pseudo']) and isset($_POST['mail']) and isset($_POST['mail2']) and isset($_POST['pass']) and isset($_POST['pass2']) and isset($_POST['newsletter'])) {


Tu testes donc $_POST['newsletter'] afin d'exécuter la suite du code. Or dans le cas où la case n'est pas cochée, cette valeur n'existe pas, et donc le test ne passera pas. Donc pas d'inscription.
 
Il faut donc que tu remplaces par  

Code :
  1. if(isset($_POST['pseudo']) and isset($_POST['mail']) and isset($_POST['mail2']) and isset($_POST['pass']) and isset($_POST['pass2'])) {

n°1944568
fab1105
Posté le 25-11-2009 à 15:31:01  profilanswer
 

Super ça marche nickel! Merci pour ton aide précieuse Tirkyth.
En fait je croyais que $_POST['newsletter'] servait juste à tester si le formulaire avait été posté avec cette variable qu'elle ait une valeur ou non, et en fait je vois que ce n'est pas le cas... Merci encore.

n°1944573
Tirkyth
Posté le 25-11-2009 à 15:34:22  profilanswer
 

Exactement, les checkbox qui ne sont pas cochées ne sont pas du tout présentes dans les tableaux $_GET, $_POST, ou $_REQUEST :)
 
On se fait tous avoir au moins une fois au début je pense. Bonne continuation à toi.

n°1944578
fab1105
Posté le 25-11-2009 à 15:36:31  profilanswer
 

Merci, à toi aussi Tirkyth.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Newsletter PHP

 

Sujets relatifs
[PHP / HTML] Afficher une image avant l'exécution d'un long script php[PHP 5] Pages Perso Free - Passage en php 5
[PHP] Récupéré la réponce d'un <form> dans une variableSelect lié en JS+PHP : problème avec IE
PHP - authentification requise acces à un XML- htpasswdNewsletter PHP [Résolu]
Envoi d'une newsletter par PHP.[PHP] J'aimerais faire une newsletter rapidement en sachant ce que je
PHP: bon script de newsletterSockets, PHP, newsletter... comment ça marche ?
Plus de sujets relatifs à : Newsletter PHP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR