Code newletters

gametime
Invité n'ayant pas de compte PHPfrance

18 sept. 2014, 16:44

bonjour ,

J'essaie d'installer sur mon site un système d'inscription à une newsletter.

J'ai crée ce code dans mon fichier html
<form action="envoi.php" method="post" enctype="application/x-www-form-urlencoded" name="formulaire">
			  <input type="text" name="mail" placeholder="votremail.com" class="cform-text" size="40" title="votre email">
              <input type="submit" value="Je commence" class="cform-submit">
			  </form>
Puis celui-ci dans une page envoi.php
<?php 
$nom=$HTTP_POST_VARS['nom']; 
$mail=$HTTP_POST_VARS['mail']; 
$objet=$HTTP_POST_VARS['objet']; 
$message=$HTTP_POST_VARS['message']; 

/////voici la version Mine 
$headers = "MIME-Version: 1.0\r\n"; 

//////ici on détermine le mail en format text 
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n"; 

////ici on détermine l'expediteur et l'adresse de réponse 
$headers .= "From: $nom <$mail>\r\nReply-to : $nom <$mail>\nX-Mailer:PHP"; 

$subject="$objet"; 
$destinataire="[email protected]"; //remplacez "[email protected]" par votre adresse e-mail
$body="$message"; 
if (mail($destinataire,$subject,$body,$headers)) { 
echo "Votre mail a ete envoye<br>"; 
} else { 
echo "Une erreur s'est produite"; 
} 
?></p>
<p align="center">Vous allez bientot etre redirige vers la page d'acceuil<br>
Si vous n'etes pas redirige au bout de 5 secondes cliquez <a href="http://www.xxx.fr">ici 
</a></p>
Je reçois bien les mails mais ils sont vide , je n'ai pas l'adresse.. il doit y avoir des choses inutiles dans mon code et manquer quelques trucs...

Merci à vous tous
Modifié en dernier par moogli le 18 sept. 2014, 21:04, modifié 1 fois.
Raison : suppression email / url site

Nestecha
Invité n'ayant pas de compte PHPfrance

18 sept. 2014, 17:24

D'une, utilise $_POST, pas $HTTP_POST_VARS.

De deux, tes variables $nom, $objet, $message n'existent absolument pas. Elles viennent d'où ? Je veux dire, y'a pas d'input name = 'message', donc forcément ta page ne reçoit rien à part $_POST['mail'].

Petit nouveau ! | 6 Messages

18 sept. 2014, 19:02

D'une, utilise $_POST, pas $HTTP_POST_VARS.
J'ai modifié , pour les variables c'est un code que j'ai récupérer sur le net , je voulais l'adapter sur mon site.

En fait je viens de voir que je récupérer bien les mails...

maintenant j'ai juste un soucis au moment de l'envoi , il ne me redirige pas sur ma page d'accueil.
Merci

Nestecha
Invité n'ayant pas de compte PHPfrance

18 sept. 2014, 19:34

Ajoute :
<?php
header('Location: index.html');
?>
Après ton dernière paragraphe.
Et enlève ta balise </p> après ton echo "Une erreur s'est produite", elle ne ferme rien ;)

Petit nouveau ! | 6 Messages

18 sept. 2014, 20:48

Merci :D

J'ai ajouté le header mais j'ai cette erreur maintenant :
Warning: Cannot modify header information - headers already sent by (output started at /mnt/153/sda/7/0/benpi/envoi.php:20) in /mnt/153/sda/7/0/benpi/envoi.php on line 26

Nestecha
Invité n'ayant pas de compte PHPfrance

18 sept. 2014, 21:00

Mets plutôt cette ligne : header('Location: index.html');

Après ton echo "Votre mail a été envoyé", dans le if, comme ça :
if (mail($destinataire,$subject,$body,$headers)) {
    echo "Votre mail a ete envoye<br>";
    header('Location: index.html');
} else {
    echo "Une erreur s'est produite";
}

Petit nouveau ! | 6 Messages

18 sept. 2014, 21:07

nouvelle erreur :
Warning: Cannot modify header information - headers already sent by (output started at /mnt/153/sda/7/0/benpi/envoi.php:20) in /mnt/153/sda/7/0/benpi/envoi.php on line 21

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 sept. 2014, 21:08

salut,
Mets plutôt cette ligne : header('Location: index.html');

Après ton echo "Votre mail a été envoyé", dans le if, comme ça :
if (mail($destinataire,$subject,$body,$headers)) {
    echo "Votre mail a ete envoye<br>";
    header('Location: index.html');
} else {
    echo "Une erreur s'est produite";
}
non c'est justement ce qu'indique le message d'erreur
Warning: Cannot modify header information - headers already sent by (output started at /xxx/envoi.php:20) in /xxx/envoi.php on line 26
la documentation de la fonction header indique bien qu'il ne faut aucun affichage avant sont utilisation.

c'est d'ailleurs logique de ne envoyer quelque chose au navigateur tant que l'entête n'est pas envoyée (on envoie pas une lettre sans mettre la lettre dans l'enveloppe ;) ).

@+
Il en faut peu pour être heureux ......

Nestecha
Invité n'ayant pas de compte PHPfrance

18 sept. 2014, 21:16

Bon, histoire d'en finir une bonne fois pour toute ! Moogli a raison !

Tu peux faire ça en javascript !
<p align="center">Vous allez bientot etre redirige vers la page d'acceuil<br>
    Si vous n'etes pas redirige au bout de 5 secondes cliquez <a href="http://www.benpi.free.fr">ici
    </a></p>
<script>window.location = "index.html";</script>
Là au moins, t'es sûr d'être redirigé !

Moogli, comment on fait du coup quand on veut quand même utiliser header() ? Ou est-ce que c'est juste stupide comme idée ?

Petit nouveau ! | 6 Messages

18 sept. 2014, 21:18

Super , merci beaucoup :wink:

c'est ultra rapide , du coup on a même pas le temps de voir qu'il a été envoyé :) , il y a possibilité de le laisser 4 sec à l'écran par exemple ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 sept. 2014, 21:32

@gametime : oui avec un timer (ce qui est fait sur ce forum) setTimeOut

@Nestecha : c'est une bonne idée d'utilisée header mais à bonne escient :)
par exemple si tu veux afficher un message c'est pas possible.

si tu veux envoyer des infos comme le type mime, le charset ou une redirection alors oui c'est utile mais avant tout envois.

La redirection JS est liée au navigateur donc pas forcément faite (oui je sais il y a peux de gens qui désactive le js mais on ne sais jamais) et suivant l'utilisation certain navigateur ne réagisse pas pareil (par exemple dans l'event unload de la page).


@+
Il en faut peu pour être heureux ......

Nestecha
Invité n'ayant pas de compte PHPfrance

18 sept. 2014, 21:34

<p align="center">Vous allez bientot etre redirige vers la page d'acceuil<br>
    Si vous n'etes pas redirige au bout de 5 secondes cliquez <a href="http://www.benpi.free.fr">ici
    </a></p>
<script>setTimeout(function() { 
window.location = "index.html"
}, 3000);</script>
Voilà !

Petit nouveau ! | 6 Messages

18 sept. 2014, 21:43

Merci encore =D>

Eléphant du PHP | 151 Messages

18 sept. 2014, 21:52

Salut,

je viens de regarder ton site.
En fait, ce header est pas top du tout ! Il fait assez tâche.

Déjà, dans l'en-tête de ta page web, tu vas changer <html lang="en"> par <html lang="fr"> et vu que tu inclus du jquery, je ferais plutôt une inscription via ajax comme suit :
1/ test que c'est bien un email en javascript
2/ si ok, tu envoies l'email en ajax
3/ tu testes dans le script cible que tu as bien un nouveau mail, que c'est bien un mail
4/ tu envoies par retour en json un ok ou false.
5/ si ok, tu effaces le formulaire (methode hide() de jquery) et mets un beau message "on vous écrit à l'ouverture" ou "mail déjà inscrit" ou "erreur"... etc.

C'est une critique gratuite, profites en :mrgreen: :mrgreen: :lol:
Développeur d'applications pour intranets industriels (IHM), DBA Oracle, auto entrepreneur. Je fuis les frameworks car je pense comme Rasmus Lerdorf : "all PHP frameworks suck"...
Je me suis lancé dans la reprise du projet PhpMyNewsletter (GNU GPL), que je vous invite à essayer.

echo ($user=='enregistré?"je t'aide":"je t'aide pas !");

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 sept. 2014, 22:04

C'est une critique gratuite, profites en
effectivement autant laisser faire php qui fait la chose plutôt que d'ajouter un tas de merdier javascript histoire de faire "beau" et in ^^


@+
Il en faut peu pour être heureux ......