Newsletter PHP - PHP - Programmation
Marsh Posté le 25-11-2009 à 13:33:55
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";
}
Marsh Posté le 25-11-2009 à 13:44:24
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.
Marsh Posté le 25-11-2009 à 13:49:16
if($newsletter!=NULL) {
$newsletter=1;
}else{
$newletter = 0;
}
mais ca devrai te generer une erreur ton $_POST['newletter']
Marsh Posté le 25-11-2009 à 13:53:32
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.
Marsh Posté le 25-11-2009 à 13:57:51
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.
Marsh Posté le 25-11-2009 à 14:02:53
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.
Marsh Posté le 25-11-2009 à 14:11:15
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.
Marsh Posté le 25-11-2009 à 14:16:30
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. |
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.
Marsh Posté le 25-11-2009 à 14:19:27
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 ?
Marsh Posté le 25-11-2009 à 14:32:40
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...
Marsh Posté le 25-11-2009 à 14:39:58
J'ai bien une idée oui, c'est sensiblement la même que stealth35 cela dit :
Code :
|
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.
Marsh Posté le 25-11-2009 à 14:42:08
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 ?
Marsh Posté le 25-11-2009 à 14:44:34
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.
Marsh Posté le 25-11-2009 à 14:48:24
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 :
|
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)
Marsh Posté le 25-11-2009 à 14:49:26
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 :
|
Marsh Posté le 25-11-2009 à 14:57:37
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.
Marsh Posté le 25-11-2009 à 14:59:04
Mais avec 1.
var_dump($_POST);
2.
die;
là il y'a une erreur de parse
Marsh Posté le 25-11-2009 à 15:00:02
Non c'est moi qui ai fait n'importe quoi j'ai :
array(0) { }
Marsh Posté le 25-11-2009 à 15:01:29
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.
Marsh Posté le 25-11-2009 à 15:13:40
Oui je vais te donner le code mais il y'a 3 fichiers et c'est un peu long
Citation : |
Marsh Posté le 25-11-2009 à 15:22:10
Le problème se situe je pense au début de valid_inscription.php
Tu as mis le test suivant :
Code : |
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 : |
Marsh Posté le 25-11-2009 à 15:31:01
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.
Marsh Posté le 25-11-2009 à 15:34:22
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.
Marsh Posté le 25-11-2009 à 12:58:27
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.