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 :

Envoi de formulaire sur 2 adresses mail à partir de boutons radios


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut Envoi de formulaire sur 2 adresses mail à partir de boutons radios
    Bonjour,

    Je souhaite ajouter à un formulaire basique 2 boutons radios.

    La particularité est qu'à chaque bouton radio soit associée une adresse mail différente.

    (a) je clique sur le bouton radio 1 ou le bouton radio 2

    (b) je remplis le formulaire

    (c) je clique sur envoyer

    --> bouton radio 1 envoie à l'adresse mail 1

    --> bouton radio 2 envoie à l'adresse mail 2

    Pouvez-vous m'indiquer une piste.

    Merci d'avance

    codepen
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <form method="post" action="contact.php">
       <p>
           Veuillez indiquer l'objet de votre demande :<br />
           <input type="radio" name="demande" value="formation" id="formation" /> <label for="formation">Formation</label>
           <input type="radio" name="demande" value="scolarite" id="scolarite" /> <label for="scolarite">Scolarité</label><br />
      </p>
     </form>
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tout simplement quelque chose de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $to = '';
    switch($_POST['demande']) {
        case 'formation' :
            $to = 'formation@lesite.com';
            break;
        case 'scolarite' :
            $to = 'scolmail@lesite.com';
            break;
        default:
            echo 'non géré !!!!';
            break;
    }
     
    // et on envoie le mail à $to
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut
    Merci Celira pour la réponse. Je teste ça dès demain.
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

  4. #4
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut
    Ca fonctionne bien !!
    J'ai un soucis de traitement du formulaire avec les boutons radios car je voudrais que le formulaire ne soit pas envoyé si ils ne sont pas cochés.
    Les lignes du code Php dont je ne suis pas sûr : 1 à 4 et 38 (default du swicth : $demande)
    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
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    <?php
    if($_POST['demande'] == "false"){
    		$valid = false;
    		$erreurdemande = "Vous n'avez donné l'objet de votre demande.";
    	}
    if(!empty($_POST)){
    	extract($_POST);
    	$valid = true;
    	if($adress != ""){
    	}
    	else{
    		if(empty($name)){
    		$valid = false;
    		$erreurnom = "vous n'avez pas saisi votre nom.";
    	}
    	if(!preg_match('/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,3})+$/', $email)){
    		$valid = false;
    		$erreuremail = "Votre e-mail n'est pas valide.";
    	}
    	if(empty($email)){
    		$valid = false;
    		$erreuremail = "Vous n'avez pas donné votre e-mail.";
    	}
    	if(empty($message)){
    		$valid = false;
    		$erreurmessage = "Vous n'avez pas donné de message.";
    	}
    	if ($valid){
    		$to = '';
        switch($_POST['demande']) {
        case 'formation' :
            $to = 'formation.montessori33@gmail.com';
            break;
        case 'scolarite' :
            $to = 'education.montessori33@gmail.com';
            break;
        default:
            $demande= $erreurdemande;
            break;
    }
    		$sujet = $name. " a posté une question depuis le site de l'école";
    		$header = "From: $name <$email> \n";
    		$message = stripslashes($message);
    		$name = stripslashes($name);
    		$copie = 'oui';
    		if ($copie == 'oui')
    		{
    			$cible = $to.','.$email;
    		}
    		else
    		{
    			$cible = $to;
    		};
    		if(mail($cible,$sujet,$message,$header)){
    			$erreur = "Votre message a bien été envoyé et nous traiterons votre demande dans les plus brefs délais.";
    			unset($name);
    			unset($email);
    			unset($message);
    		}
    		else{
    		$erreur = "Une erreur est survenue et votre mail n'est pas parti.";
    		}
    	}
    	}
    }
    ?>
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <p> Objet de votre demande :
       <input type="radio" name="demande" value="formation" id="formation" />
          <label for="formation">Formation</label>
       <input type="radio" name="demande" value="scolarite" id="scolarite" />
         <label for="scolarite">Scolarité</label>
     </p>
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Les boutons radio sont comme les checkboxes : si rien n'est coché, rien n'est envoyé. Utilise la fonction isset :if(!isset($_POST['demande'])) {.

    Pour la valeur par défaut du switch, le but est de traiter le cas où un utilisateur aurait envoyé une valeur non prévue (1) Donc le mieux est d'utiliser le même système du booléen $valid que tu as utilisé avant et de le restester avant l'envoi de mail
    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
    if ($valid) {
        $to = '';
        switch ($_POST['demande']) {
        case 'formation':
            $to = 'formation.montessori33@gmail.com';
            break;
        case 'scolarite':
            $to = 'education.montessori33@gmail.com';
            break;
        default:
            $valid = false;
            $erreurmessage = "Objet de la demande incorrecte.";
            break;
        }
    }
    if ($valid) {
        // envoyer le mail
    L'autre possibilité est de gérer une catégorie "Autres" qui serait envoyée à une adresse mail générale.

    Au passage : utiliser extract sur des données reçues de l'extérieur peut être dangereux (1).
    N'utilisez pas extract() sur des données inconnues, comme les données utilisateurs (i.e. $_GET, $_FILES, etc.). Si vous le faites, par exemple, pour rendre compatible un vieux code avec register_globals à Off de façon temporaire, assurez-vous d'utiliser l'une des constantes flags qui n'écrasent pas les valeurs, comme EXTR_SKIP. Sachez aussi que vous devez maintenant extraire dans le même ordre que celui défini dans variables_order du php.ini.
    http://php.net/manual/fr/function.extract.php
    Je te conseille d'utiliser directement $_POST['xxxx'] ou de configurer extract pour utiliser un préfixe avec le flag EXTR_PREFIX_ALL, de façon à bien différencier les variables importées.


    (1) Selon le grand principe "Never Trust User Input" et ses trois corollaires : "L'utilisateur est bête", "l'utilisateur est maladroit" et "l'utilisateur est méchant"
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut
    Merci encore Celira. J'essaie ta réponse demain.
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

  7. #7
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut
    Bon j'ai cherché dans la mauvaise direction pendant... longtemps.

    J'ai fait les changements, en espérant avoir compris.

    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
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <?php
    if(!isset($_POST['demande'])) {
    		$valid = false;
    		//$erreurdemande = "Vous n'avez donné l'objet de votre demande.";
    	}
    if(!empty($_POST)){
    	  extract($_POST);
    	$valid = true;
    	if($adress != ""){
    	}
    	else{
    		if(empty($name)){
    		$valid = false;
    		$erreurnom = "vous n'avez pas saisi votre nom.";
    	}
    	if(!preg_match('/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,3})+$/', $email)){
    		$valid = false;
    		$erreuremail = "Votre e-mail n'est pas valide.";
    	}
    	if(empty($email)){
    		$valid = false;
    		$erreuremail = "Vous n'avez pas donné votre e-mail.";
    	}
    	if(empty($message)){
    		$valid = false;
    		$erreurmessage = "Vous n'avez pas donné de message.";
    	}
     
    	if ($valid){
    		$to = '';
        switch($_POST['demande']) {
        case 'formation' :
            $to = 'formation.montessori33@gmail.com';
            break;
        case 'scolarite' :
            $to = 'education.montessori33@gmail.com';
            break;
        default:
    		$valid = false;
            $erreurdemande = "Objet de la demande incorrect.";
            break;
    	}
     
    		$sujet = $name. " a posté une question depuis le site de l'école";
    		$header = "From: $name <$email> \n";
    		$message = stripslashes($message);
    		$name = stripslashes($name);
    		// copie ? (envoie une copie au visiteur)
    		$copie = 'oui';
    		// envoyer une copie au visiteur ?
    		if ($copie == 'oui')
    		{
    			$cible = $to.','.$email;
    		}
    		else
    		{
    			$cible = $to;
    		};
    		if(mail($cible,$sujet,$message,$header)){
    			$erreur = "Votre message a bien été envoyé et nous traiterons votre demande dans les plus brefs délais.";
    			unset($name);
    			unset($email);
    			unset($message);
    		}
    		else{
    		$erreur = "Une erreur est survenue et votre mail n'est pas parti.";
    		}
    	}
    	}
    }
    Le code Html concerné :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <p> Objet de votre demande :
      <input type="radio" name="demande" value="formation" id="formation"/>
       <label for="formation"><strong>Formation</strong></label>
      <input type="radio" name="demande" value="scolarite" id="scolarite" class="ml2em" />
        <label for="scolarite"><strong>Scolarité</strong></label>
     <span class="error-message">
           <?php if(isset($erreurdemande)) echo $erreurdemande; ?>
     </span>
     </p>
    Le lien de la page : http://education-montessori.fr/html/...es/contact.php

    Actuellement le message $erreur = "Votre message a bien été envoyé et nous traiterons votre demande dans les plus brefs délais." reste apparent lorsque les boutons n'ont pas été cochés. Le mail garde un comportement attendu et ne part pas.
    J'ai essayé d'agir sur les lignes suivantes sans succès (je ne parviens à créer une variable $demande qui soit prise en compte lors de l'envoi du mail) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(mail($cible,$sujet,$message,$header)){
    			$erreur = "Votre message a bien été envoyé et nous traiterons votre demande dans les plus brefs délais.";
    			unset($name);
    			unset($email);
    			unset($message);
    		}

    Pour Extract
    Je te conseille d'utiliser directement $_POST['xxxx'] ou de configurer extract pour utiliser un préfixe avec le flag EXTR_PREFIX_ALL, de façon à bien différencier les variables importées.
    Tu remplaces Extract comment ? J'avoue avoir parfois du mal avec le manuel PHP.

    Merci pour tous tes conseils.
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

Discussions similaires

  1. Envoi de formulaire sur 2 adresses email
    Par stero11 dans le forum Langage
    Réponses: 4
    Dernier message: 09/06/2015, 17h29
  2. envoi les infos de mon formulaire sur ma boite mail
    Par hakoukou dans le forum Langage
    Réponses: 4
    Dernier message: 03/01/2014, 17h02
  3. [Web Service] PHP - envoi de photo sur Facebook par mail()
    Par lesideesnet dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/10/2010, 15h34
  4. Envoi de formulaire sur boite e-mail
    Par pixette dans le forum Langage
    Réponses: 4
    Dernier message: 19/09/2008, 11h28
  5. Réponses: 1
    Dernier message: 30/04/2008, 16h25

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