8797 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Dans mon formulaire je voudrais que le client puisse choisir à qui il souhaite envoyer sont mail. j'ai donc fait ceci :


<label for="destinataire"> Choisisez un destinaire :</label>

        <select name="destinataire" size="6" id="destinataire" multiple="multiple">
            <optgroup label="Siège">
                <option value="cstq">Centre Social des trois Quartiers</option>
                <option value="media">Multimédia</option>
                <option value="alsh">Accueil des loisirs</option>
                <option value="mediateur">Médiateur</option>
                <option value="jeunesse">Jeunesse</option>
                <option value="parent">Parentalités</option>
                <option value="loisir_adlt">Loisir adulte</option>
                <option value="perm">Permanences</option>
            </optgroup>
            
            <optgroup label="Partenaires">
                <option value="coffre">Le coffre d'arlequin</option>
                <option value="mairie">Ville de tourcoing</option>
            </optgroup>
        </select>


Mais voila en PHP je suis bloqué. J'ai commencé par indiquer les adresse mail de chacun dans un tableau associatif :


<?php
		$destinataire= array (
			'cstq' => 'toto@gmail.com',
			'jeunesse' => 'toto@gmail.com',
			'mediateur' => 'toto@gmail.com',
			'perm' => 'toto@gmail.com',
			'media' => 'titi@hotmail.fr',
			'alsh' => 'titi@hotmail.fr',
			'parent' => 'titi@hotmail.fr',
			'loisir_adlt' => 'titi@hotmail.fr',
			'coffre' => 'titi@hotmail.fr',
			'mairie' => 'titi@hotmail.fr');
			

		$unique= array_unique($destinataire);
		$result= implode (",", $unique);
?>


Donc la variable
<?php $to= $result; ?>


Et sa ne marche pas, l'email s'envoie au deux adresse. je suppose que c'est a cause de :
<?php  $result= implode (",", $unique); ?>


Je ne c'est pas comment y remédié, il manque surment une partie, mais quoi ...

Merci beaucoup d'y jeter un oeil Smiley cligne
D'accord, mais donc que dois-je faire ? En la supprimant sa ne résous pas mon problème.
Je m'y prend peu être mal pour avoir le choix du destinataire.

Une autre solution à me soumettre ?
Pas exactement, plutôt comment dire à la variable $to qu'elle envoie le mail à tel ou tel adresse suivant le destinataire que l'on à sélectionné.

La page est en cour, mais visuel pourrait être plus simple : raphael-maddelein.fr/form/
Ce qui revient exactement à sélectionner un élément du tableau "destinataire"...


<?php $to = $destinataire[$_GET['destinataire']]; ?>

Modifié par jb_gfx (11 Sep 2012 - 16:50)
Je ressort toujours avec une erreur. Je me demande si l'erreur ne viens pas de plus haut, je transmet la partie php :


<?php 
if(!empty($_POST)){
	extract($_POST);
	$valid = true;
	if($adresse != ""){
		
	}
	else{	
	
	if(empty($nom)){
		$valid=false;
		$erreurnom="Vous n'avez pas remplie votre nom";	
	}
	
	if(empty($prenom)){
		$valid=false;
		$erreurprenom="Vous n'avez pas remplie votre prenom";	
	}
	
	if(!preg_match("/^$[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$mail)){}
	if(empty($mail)){
		$valid=false;
		$erreurmail="Vous n'avez pas remplie votre email";
	}
	
	if(empty($secteur)){
		$valid=false;
		$erreursecteur="Vous n'avez pas précisez dans quel secteur vous êtes";	
	}	
	
	if(empty($message)){
		$valid=false;
		$erreurmessage="Vous n'avez pas remplie votre message";	
	}
	
	//if(empty($dest)){
		//$valid=false;
		//$erreurdest="Vous n'avez pas de destinataire";	
	//}	
	
	if($valid){
		//---if(!empty($mail)){$mail="toto@gmail.com";}
		$destinataire= array (
			'cstq' => 'toto@gmail.com',
			'jeunesse' => 'toto@gmail.com',
			'mediateur' => 'toto@gmail.com',
			'perm' => 'toto@gmail.com',
			'media' => 'titi@hotmail.fr',
			'alsh' => 'titi@hotmail.fr',
			'parent' => 'titi@hotmail.fr',
			'loisir_adlt' => 'titi@hotmail.fr',
			'coffre' => 'titi@hotmail.fr',
			'mairie' => 'titi@hotmail.fr');

		//$unique= array_unique($destinataire);
		//print_r ($unique);
		//$result= implode (",", $destinataire);

		//if(!in_array($dest, array("cstq","jeunesse","mediateur","perm"))) {$dest="toto@gmail.com";}
		//if(!in_array($dest, array("media","alsh","parent","loisir_adlt","coffre","mairie"))) {$dest="titi@hotmail.fr";}
		$to = $destinataire[$_GET['destinataie']];
		$sujet = $nom.'  '.$prenom. " vous contact. Secteur : " .$secteur;
		$header = "From: contact@cs3q.com \n";
		$header = "Reply-To: $mail";
		$message = stripcslashes($message);
		$nom = stripcslashes($nom);
		$prenom = stripcslashes($prenom);
		$secteur = stripcslashes($secteur);
		if(mail($to,$sujet,$message,$header)){
			$erreur = "Votre message a été transmis";	
			unset($nom);
			unset($prenom);
			unset($mail);
			unset($message);
			unset($secteur);
		}
		else{
			$erreur= "Une erreur est survenue lors de l'envoie";	
		}
	}
	}
}
?>
Au premier coup d'œil je constate que tu valides des données transmises en POST puis tu sélectionnes ton adresse avec une donnée en GET. Ces donnes ne sont-elles pas renvoyées de la même façon ?
Si, bien sur... j'ai fait quelque modification, et sa ne marche toujours pas, cette fois ci aucun mail ne s'envoie. j'avoue être totalement perdu


<?php 
if(!empty($_POST)){
	extract($_POST);
	$valid = true;
	if($adresse != ""){
		
	}
	else{	
	
	if(empty($nom)){
		$valid=false;
		$erreurnom="Vous n'avez pas remplie votre nom";	
	}
	
	if(empty($prenom)){
		$valid=false;
		$erreurprenom="Vous n'avez pas remplie votre prenom";	
	}
	
	if(!preg_match("/^$[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$mail)){}
	if(empty($mail)){
		$valid=false;
		$erreurmail="Vous n'avez pas remplie votre email";
	}
	
	if(empty($secteur)){
		$valid=false;
		$erreursecteur="Vous n'avez pas précisez dans quel secteur vous êtes";	
	}	
	
	if(empty($message)){
		$valid=false;
		$erreurmessage="Vous n'avez pas remplie votre message";	
	}
	
	//if(empty($dest)){
		//$valid=false;
		//$erreurdest="Vous n'avez pas de destinataire";	
	//}	

		$destinataire= array (
			'cstq' => 'toto@gmail.com',
			'jeunesse' => 'toto@gmail.com',
			'mediateur' => 'toto@gmail.com',
			'perm' => 'toto@gmail.com',
			'media' => 'titi@hotmail.fr',
			'alsh' => 'titi@hotmail.fr',
			'parent' => 'titi@hotmail.fr',
			'loisir_adlt' => 'titi@hotmail.fr',
			'coffre' => 'titi@hotmail.fr',
			'mairie' => 'titi@hotmail.fr');
	
	if($valid){
		//---if(!empty($mail)){$mail="toto@gmail.com";}


		//$unique= array_unique($destinataire);
		//print_r ($unique);
		//$result= implode (",", $destinataire);

		//if(!in_array($dest, array("cstq","jeunesse","mediateur","perm"))) {$dest="toto@gmail.com";}
		//if(!in_array($dest, array("media","alsh","parent","loisir_adlt","coffre","mairie"))) {$dest="titi@hotmail.fr";}
		$to = $destinataire['destinataie'];
		$sujet = $nom.'  '.$prenom. " vous contact. Secteur : " .$secteur;
		$header = "From: contact@cs3q.com \n";
		$header = "Reply-To: $mail";
		$message = stripcslashes($message);
		$nom = stripcslashes($nom);
		$prenom = stripcslashes($prenom);
		$secteur = stripcslashes($secteur);
		if(mail($to,$sujet,$message,$header)){
			$erreur = "Votre message a été transmis";	
			unset($nom);
			unset($prenom);
			unset($mail);
			unset($message);
			unset($secteur);
		}
		else{
			$erreur= "Une erreur est survenue lors de l'envoie";	
		}
	}
	}
}
?>
Salut,

$to = $destinataire['destinataie']

En tout cas, il manque un 'r' à destinataie...

Sinon, j'ai vu que ton <select> était multiple.
Pour récupérer plusieurs valeurs, tu peux utiliser name="destinataire[]" qui te renverra automatiquement un tableau à l'intérieur de $_POST avec les adresses sélectionnées...

tm
Oui effectivement je me suis planté, il faut utiliser POST et pas GET. Smiley langue


$to = $destinataire[$_POST['destinataire']];

Modifié par jb_gfx (12 Sep 2012 - 15:22)
c'était une chance sur deux Smiley langue !
Il me ressort une erreur à la ligne 63 qui correspond a la variable $to.
J'ai mis le tableau au dessus du if(valid) en espérant que sa aille mieux mais non..
Lorsque j'avais laisser
<?php $unique= array_unique($destinataire)
$result= implode (",", $destinataire);
$to=$result; ?>
je recevais bien les mail mais au deux adresses (toto@gmail.com et titi@hotmail.fr) esque c'est possible de les séparer?
Vu qu'il ne veut pas sectionner directement une adresse avec
<?php $to = $destinataire[$_POST['destinataire']]; ?>


Pour l'instant voici mon code :

<?php 
		$destinataire= array (
			'cstq' => 'toto@gmail.com',
			'jeunesse' => 'toto@gmail.com',
			'mediateur' => 'toto@gmail.com',
			'perm' => 'toto@gmail.com',
			'media' => 'titi@hotmail.fr',
			'alsh' => 'titi@hotmail.fr',
			'parent' => 'titi@hotmail.fr',
			'loisir_adlt' => 'titi@hotmail.fr',
			'coffre' => 'titi@hotmail.fr',
			'mairie' => 'titi@hotmail.fr');

	if($valid){

		$to = $destinataire[$_POST['destinataire']];
		$sujet = $nom.'  '.$prenom. " vous contact. Secteur : " .$secteur;
		$header = "From: contact@cs3q.com \n";
		$header = "Reply-To: $mail";
		$message = stripcslashes($message);
		$nom = stripcslashes($nom);
		$prenom = stripcslashes($prenom);
		$secteur = stripcslashes($secteur);
		if(mail($to,$sujet,$message,$header)){
			$erreur = "Votre message a été transmis";	
			unset($nom);
			unset($prenom);
			unset($mail);
			unset($message);
			unset($secteur);
		}
		else{
			$erreur= "Une erreur est survenue lors de l'envoie";	
		}
	}
?>

Modifié par medusox (12 Sep 2012 - 17:26)