IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Formulaire qui envoi un mail à chaque réactualisation de page ! [Fait]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 42
    Points : 22
    Points
    22
    Par défaut Formulaire qui envoi un mail à chaque réactualisation de page !
    Bonjour (ou bonsoir, comme vous préférez ),
    je suis confronté à un petit souci ennuyeux : j'ai inséré sur l'une de mes pages web un formulaire de contact permettant de m'envoyer un mail. Il fonctionne. Un peu trop bien même, car si je réactualise la page, je reçoit un mail vide Imaginez que quelqu'un actualise la page 50 fois...
    Bref, voici le code PHP (inséré dans ma page avec include) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $TO = "fiil@orange.fr";
     
    $h  = "From: " . $TO;
     
    $message = "";
     
    while (list($key, $val) = each($HTTP_POST_VARS)) {
      $message .= "$key : $val\n";
    }
     
    mail($TO, $subject, $message, $h);
     
    ?>
    Et le code HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <form method=POST action=contact.php >
    <input type=hidden name=subject value=formmail>
     
    <p class="contact_formtxt">Votre nom :</p>
    <input type=text name=Nom size=30>
    <p class="contact_formtxt">Votre adresse e-mail :</p>
    <input type=text name=Mail size=30>
    <p class="contact_formtxt">Sujet :</p>
    <input type=text name=Sujet size=30>
    <p class="contact_formtxt">Message :</p>
    <textarea COLS=50 ROWS=6 name=Message></textarea>
    <br /> 
    <input type=submit value=Envoyer> -
    <input type=reset value=Annuler>
    </form>
    Voilà, je précise qu'il s'agit d'un script trouvé sur le net ( http://www.salemioche.net/script-php-1.php ), ne m'y connaissant pas encore suffisamment en PHP.

    J'ai également supprimé la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Header("Location: http://<URL de la page de remerciement>")
    car elle me renvoyait une erreur.

    Merci par avance pour votre aide

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    il te manque une condition pour la premiere partie : tu ne test pas si ton formulaire à été envoyé

    Le plus simple est de rajouter un champ dans ton formulaire :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="hidden" name="action" value="envoyer" />

    et ensuite, la premiere partie devient :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <?php
    if( isset($_POST['action']) && $_POST['action'] == "envoyer" ) {
         $TO = "fiil@orange.fr";
     
         $h  = "From: " . $TO;
     
         $message = "";
     
         while (list($key, $val) = each($HTTP_POST_VARS)) {
              $message .= "$key : $val\n";
         }
     
         mail($TO, $subject, $message, $h);
    } 
    ?>

    PS : normalement on test aussi les autres champs apres avoir tester qu'on a bien envoyé le formulaire

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    Bonjour,

    Ton soucis ressemble étrangement à celui présenté ici :

    http://www.developpez.net/forums/d69...on-formulaire/

    Personnellement j'utilise une redirection :

    echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=mail_alerte.php\">";

    Ainsi une fois que le formulaire est considéré comme valide suite à la validation des champs, je redirige la page vers une page indiquant à l'utilisateur que tout c correctement déroulé.

    d'ailleur

    Header("Location: http://<URL de la page de remerciement>")
    Cette commande que tu as enlevé remplit ce rôle.

    voilà voilà

    ++

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Merci beaucoup pour vos réponses respectives !
    Je vais essayer ça

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Avec header, la page me renvoi une erreur :
    Warning: Cannot modify header information - headers already sent by (output started at /var/www/fil.open-web.fr/www/contact.php:10) in /var/www/fil.open-web.fr/www/formulaire_contact/form_mail.php on line 15.


    Sinon connaissez-vous un moyen ou un tuto pour que le sujet et l'expéditeur du message s'affichent directement quand on regarde dans notre boîte, au lieu d'être reportés dans le mail ?
    Avoir quelque chose du style :

    Monsieur X Sujet 25/02/2009 15:20 1.2 ko

    Voilà merci beaucoup encore une fois

  6. #6
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Citation Envoyé par Kazy15 Voir le message
    Avec header, la page me renvoi une erreur :
    Warning: Cannot modify header information - headers already sent by (output started at /var/www/fil.open-web.fr/www/contact.php:10) in /var/www/fil.open-web.fr/www/formulaire_contact/form_mail.php on line 15.


    Sinon connaissez-vous un moyen ou un tuto pour que le sujet et l'expéditeur du message s'affichent directement quand on regarde dans notre boîte, au lieu d'être reportés dans le mail ?
    Avoir quelque chose du style :

    Monsieur X Sujet 25/02/2009 15:20 1.2 ko

    Voilà merci beaucoup encore une fois
    1] pour utiliser header() il ne faut pas qu'il y ai d'affichage effectué
    donc tu ne peux par exemple par écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <html>
    <head></head>
    <body>
    <?php
    header("Location : $url");
    ?>
    </body>
    </html>

    2] il suffit de mettre ce que tu veux dans $subject

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Merci ._.
    J'ai un dernier souci, je n'arrive pas à afficher de message de confirmation sur la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    $TO = "fiil@orange.fr";
     
    $Nom  = "From: " . $TO;
     
    $Sujet = "FI:L - Nouveau message";
     
    $Message = "";
     
    while (list($key, $val) = each($HTTP_POST_VARS)) {
      $Message .= "$key : $val\n";
    }
     
    mail($TO, $Sujet, $Message, $Nom);
     
    header("Location: http://fiil.open-web.fr/contact.php");
     
    echo "Votre mail a bien été envoyé.";
     
    ?>
    La page s'affiche mais on ne vois pas le message.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Points : 77
    Points
    77
    Par défaut mon code
    bonjour
    ha j'ai ce code pour chaque formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    /* En-têtes obligatoires du message envoi 1er parent */
    		$message=$Quand1;
    		echo $message;
    		$message="Avis de retenue de votre enfant, il sera en retenue le '.$Quand1. 'de: '.$Heures1. 'A: '.$Heures1bis.
    		'Raison:' .$Cause
    		'Adulte qui a mis la retenue :' .$Qui ";
    	$headers = "From: xxxxxxxxxxxxxxx>\n";
    	//$headers .= "To: $idmel1\n";
    	$headers .= "MIME-Version: 1.0\n";
    	$headers .= "Content-type: text/plain; charset=iso-8859-15\n";
    	$subject='Avis de retenue de votre enfant';
    	/*  Appel a la fonction mail */
    	if (!mail($idmel1, $subject, $message, $headers)){
    		echo "Erreur: Impossible d'envoyer le mail";
    	} else {
    		echo "Envoi réussi, le premier parent a un émail";
    	}
     
    		  /* En-têtes obligatoires du message envoi 2ème parent */
    		$message=$Quand1;
    		echo $message;
    		$message="Avis de retenue de votre enfant, il sera en retenue le '.$Quand1. 'de: '.$Heures1. 'A: '.$Heures1bis.
    		'Raison:' .$Cause
    		'Adulte qui a mis la retenue :' .$Qui ";
    	echo '<br>';
    	echo $idmel1;	
    	echo '<br>';
    	echo $idmel2;
    	$headers = "From: xxxxxxxxxxxxxxx>\n";
    	//$headers .= "To: $idmel1\n";
    	$headers .= "MIME-Version: 1.0\n";
    	$headers .= "Content-type: text/plain; charset=iso-8859-15\n";
    	$subject='Avis de retenue de votre enfant';
    	/*  Appel a la fonction mail */
    	if (!mail($idmel2, $subject, $message, $headers)){
    		echo "<br> Erreur: Impossible d'envoyer le mail au 2ème parent<br>";
    	} else {
    		echo "<br> Envoi réussi, le deuxième parent a un émail<br>";
    	}
     
    echo "<br><a href=eleve_editeretenue.php?id=$elenoet> RETENUE VALIDEE, REVENIR A LA PAGE ELEVE</a>"; 	
    //header("location: http://xxxxxxxxxxxxxxx.php?id=$elenoet");/eleve_editeretenue.php?id=5785
    //mysql_close($db);  // on ferme la connexion  
     ?>

  9. #9
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Citation Envoyé par Kazy15 Voir le message
    je n'arrive pas à afficher de message de confirmation sur la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    $TO = "fiil@orange.fr";
     
    $Nom  = "From: " . $TO;
     
    $Sujet = "FI:L - Nouveau message";
     
    $Message = "";
     
    while (list($key, $val) = each($HTTP_POST_VARS)) {
      $Message .= "$key : $val\n";
    }
     
    mail($TO, $Sujet, $Message, $Nom);
     
    header("Location: http://fiil.open-web.fr/contact.php");
     
    echo "Votre mail a bien été envoyé.";
     
    ?>
    La page s'affiche mais on ne vois pas le message.

    c'est normal, regarde ton code : le message se trouve APRES le header('Location:')

    Il faut savoir que tout ce qui se trouve apres ne sera pas affiché. Si tu veux que ton message s'affiche, il faudrait le mettre sur la page "contact.php" et donc peut-être appeller la page comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Location: http://fiil.open-web.fr/contact.php?sending=ok");
    ensuite sur la page contact :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if( isset($_GET['sending']) && $_GET['sending'] == "ok" ) {
         echo "Votre mail a bien été envoyé.";
    }

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Merci beaucoup

Discussions similaires

  1. [OL-2003] Formulaire qui envoi automatiquement un mail
    Par tometoc dans le forum Outlook
    Réponses: 1
    Dernier message: 13/06/2009, 22h38
  2. Réponses: 3
    Dernier message: 12/11/2008, 18h38
  3. Réponses: 11
    Dernier message: 10/07/2006, 16h17
  4. Réponses: 2
    Dernier message: 03/05/2006, 00h12
  5. [Debutant]Formulaire d'envoie de mail
    Par Wyatt dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 31/01/2005, 21h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo