Problème email en php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème email en php

par Invité » 27 mars 2006, 09:54

oups en te donnant un nouveau code, je n'ai pas tout retapé, mais tu peux reprendre exactement ce que tu avais fait initialement, à savoir, switch, case que tu avais préparé au tout début à savoir:
$subject = $_POST['Sujet']; 
switch($subject) 
   { 
   case 'Infos': 
$to = "[email protected]"; 
       break; 
   case 'Support': 
$to = "[email protected]"; 
       break; 
   case 'Webdesign': 
$to = "[email protected]"; 
       break; 
   case 'Autre': 
$to = "[email protected]"; 
       break; 
   } 
// contenu du mail = message 
$content=stripslashes(htmlentities('de : '.$_POST['Nom'].' 
Email : '.$_POST['Email'].' 
Site : '.$_POST['Site'].' 
Sujet : '.$_POST['Sujet'].' 
Message : '.$_POST['commentaires'])); // contenu du message 
//envoi du mail 
        mail($to, $subject, $content, $from); 

?> 
Bon courage

par Cyrano » 27 mars 2006, 09:44

La structure switch teste la valeur d'une variable et permet de choisir une instruction selon cette valeur, exemple :
/* Créons une variable de test */
$var = "xyz";
/* On va exécuter une commande selon la valeur de la variable */
switch($var)
{
    /* Si elle vaut "abc" */
    case "abc" :
        /* Alors on exécute un instruction correspondante */
        echo("<p>La variable vaut ". $var ."</p>\n");
        /* On sort de la structure de contrôle */
        break;
    /* Si elle vaut "123" */
    case "123" :
        /* Alors on exécute un instruction correspondante */
        echo("<p>La variable vaut ". $var * 2 ."</p>\n");
        /* On sort de la structure de contrôle */
        break;
    /* Si elle vaut "xyz" */
    case "xyz" :
        /* Alors on exécute un instruction correspondante */
        echo("<p>La variable vaut ". $var ."</p>\n");
        /* On sort de la structure de contrôle */
        break;
    /* Si la variable ne vaut aucune des valeurs proposées */
    default :
        /* Alors on exécute un instruction correspondante */
        echo("<p>La variable ne vaut aucune des valeurs valides</p>\n");
}
En clair, on teste la valeur en la comparant à une autre valeur prédéfinie : si il y a correspondance, on exécute l'instruction correspondante et on sort de la structurede contrôle avec "break" : si on ne rencontre aucune de ces valeurs, alors l'instruction qui suit le "default" sera exécutée. Le "break" dans ce dernier cas est facultatif.

Le break est impératif pour les autres sinon le test suivant sera effectué.

Est-ce que c'est plus clair comme ça ?

par Éric » 27 mars 2006, 03:52

Je crois que je suis vraiment pas prèt pour le php, je ne comprends absolument rien de ce que vous avez posté et je peux dire que j'essaye de comprendre. :oops:

Tout simplement me dire quoi mettre ici:

Code : Tout sélectionner

switch($subject) //ton switch {.../...}
Dans le lien que vous avez donné j'ai pas vu de switch faite comme celui-ci.

Je suis un peu confus, mais bon faut m'excuser je suis vraiment pas doué.

-Éric

par Cyrano » 26 mars 2006, 23:33

À première vue, tu as un problème avec le fonctionnement du "switch" : un petit tour dans la doc appropriée devrait t'éclairer

par Éric » 26 mars 2006, 23:10

Dans le fond je mets rien puisque je ne peux pas savoir de qui vient le mail et il doit être envoyer entre 3 personnes différentes.

Le switch quesque je dois faire? Un exemple serait apprécié. :P

Merci encore de ne pas le lâcher. :D

-Éric

par Ryle » 26 mars 2006, 19:30

Il faut surtout que tu adaptes avec tes infos la partie laissée en pointillés :)
$from="................ "; 
$to="...................";
$subject = $_POST['Sujet']; 
switch($subject) //ton switch 
{.../...} 

par Éric » 26 mars 2006, 02:06

J'ai uploadé le fichier envoi.php et j'obtien une erreur:
http://quebec-host.com/envoi.php

Sinon je crois que c'étais ce que je devais faire, es-ce que je dois aussi mettre la fonction }else{ dans le fichier contact.php ?

-Éric

par coxine » 25 mars 2006, 12:11

ben pour cela, dans ce cas, il faudrait envisager de créer une page de traitement de ton formulaire.
if (la condition) = OK {
.../... on envoie le mail et on met n message de félicitations
Sinon
}else{
../.. on indique les messages d'erreurs (champs vides par exemple ou une adresse email invalide).
Tu gardes ta page contact.php avec juste ton formulaire de départ. tu changes l'action du formulaire par "envoi.php" par exemple.
Donc le champ action="envoi.php" par exemple
La page envoi.php ressemblerait à à ça :
<?php 
$success=false; // init des variables
$message="";
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!"; // vérif de l'email
if(!isset($_POST['Nom'])) $Nom=""; else $Nom=htmlentities(addslashes($_POST['Nom'])); // on initialise la variable 'nom' 
if(!isset($_POST['Email'])) $Email=""; else $Email=htmlentities(addslashes($_POST['Email'])); //variable email pour faire la vérif 
if(!isset($_POST['Site'])) $Site=""; else $Site=htmlentities(addslashes($_POST['Site'])); 
if(!isset($_POST['commentaires'])) $commentaires=""; else $commentaires=htmlentities(addslashes($_POST['commentaires'])); 
if(!isset($_POST['Sujet'])) $subject=""; else $subject=htmlentities(addslashes($_POST['Sujet']));
	if(($Email) && (preg_match($verif, $Email))) { // si le mail est bon
		if (trim($commentaires)!=="") { //s'il y a un commentaire
		// préparation du mail 
		$from=................
		$to=...................		
        $subject = $_POST['Sujet']; 
		switch($subject) //ton switch
		 {.../...} 
		// contenu du mail = message 
		$content=stripslashes(htmlentities('de : '.$Nom.' 
		Email : '.$Email.' 
		Site : '.$Site.' 
		Sujet : '.$subject.' 
		Message : '.$commentaires)); // contenu du message 
		mail($to, $subject, $content, $from); //on envoie le mail
        $success=true; //le mail est correctement rempli on indique un message de succes
		$message =  "Votre question $Nom a &eacute;t&eacute; post&eacute;e avec succ&egrave;s ! <br /> 
		Elle sera trait&eacute;e dans les meilleurs d&eacute;lais.<br /> 
		Nous vous remercions de votre visite !<br /> 
		<a href='index.php'>Revenir &agrave; l\'acceuil</a>";
		}else{ 
		$success = false; //pas de commentaire
		$message = "Votre commentaire est vide, merci de reformuler votre question";
		}
	}else{
	$verif=false; // email non valide
	$message= "Cette adresse Email n'est pas valide";
	}
?> 
<html> 
<head></head> 
<body> 
 <?php if($success) 
    echo "$message"; // écriture message de succès
else 
    echo "$message"; // ecriture message d'Echec
?> 
<h2>Contactez-Nous</h2>
<div class="bloc">Pour nous rejoindre veuillez répondre au formulaire ci-dessous :<br><br> 
<form method="post" action="envoi.php"> 
<table> 
   <tr> 
      <td><strong>Votre Nom/Prénom:</strong></td> 
      <td><input name=Nom type=text value="<?php echo $Nom;?>" size=30></td> 

.....................etc.................
</form> 
<br> 
</div> 
<div class="contenu_bas"></div> 
</body> 
</html>
Tu peux rajouter autant de condition que tu veux faire de vérifications....

par Éric » 25 mars 2006, 01:47

Classe, elle fonctionne, je viens tout juste de la tester.

Y aurait-il moyen d'ajouter une page de confirmation pendant 5 seconde ensuite elle revient sur la page d'accueil. Comme dans les forums IPB dans le fond.

-Éric

par coxine » 24 mars 2006, 17:34

Voici ce que je te propose.
Encore une fois, c'est une idée....
Fais la vérifer par quelqu'un de plus expérimenté que moi.
Mais j'ai bâti mes pages de cnotact sur la base de tutos pour débutants.

voilà voilà en espérant te sortir de là :wink:
<?php 
// INIT DES VARIABLES
if(!isset ($_POST['Nom'])) $Nom=""; else $Nom=htmlentities(addslashes($_POST['Nom'])); // on initialise la variable 'nom' pour personnaliser le message de confirmation d'envoi du mail - pour éviter aussi qu'il ne retape son nom si erreur
if(!isset ($_POST['Email'])) $Email=""; else $Email=htmlentities(addslashes($_POST['Email'])); //variable email pour faire la vérif
if(!isset ($_POST['Site'])) $Site=""; else $Site=htmlentities(addslashes($_POST['Site']));
if(!isset ($_POST['commentaires'])) $commentaires=""; else $commentaires=htmlentities(addslashes($_POST['commentaires']));
// préparation du mail
$from=htmlentities("From: ".$Email);
$to=htmlentities('webmail[ - @ - ]qc-graphix.net'); //Adresse où l'on envoie les mails - j'imagine que tu as écris comme cela [ - @ - ] pour éviter le spam
$subject = $_POST['Sujet']; 
switch($subject) 
   { 
   case 'Infos': 
$to = "[email protected]"; 
       break; 
   case 'Support': 
$to = "[email protected]"; 
       break; 
   case 'Webdesign': 
$to = "[email protected]"; 
       break; 
   case 'Autre': 
$to = "[email protected]"; 
       break; 
   }
// contenu du mail = message
$content=stripslashes(htmlentities('de : '.$_POST['Nom'].' 
Email : '.$_POST['Email'].'
Site : '.$_POST['Site'].'
Sujet : '.$_POST['Sujet'].'
Message : '.$_POST['commentaires'])); // contenu du message
//envoi du mail
        mail($to, $subject, $content, $from);

?>

Code : Tout sélectionner

<html> <head></head> <body> <h2>Contactez-Nous</h2> <div class="bloc">Pour nous rejoindre veuillez répondre au formulaire ci-dessous :<br><br> <form method="post" action="contact.php"> <table> <tr> <td><strong>Votre Nom/Prénom:</strong></td> <td><input name=Nom type=text value="<?php echo $Nom;?>" size=30></td> </tr> <tr> <td><strong>Votre Email:</strong></td> <td><input name=Email type=text value="<?php echo $Email;?>" size=30></td> </tr> <tr> <td><strong>Adresse de votre site:</strong></td> <td><input name=Site type=text value="<?php echo $Site ;?>" size=50></td> </tr> <tr> <td><strong>Sujet du message:</strong></td> <td><select name="Sujet"> <option value="Infos">Informations <option value="Support">Support <option value="Webdesign">Webdesign <option value="Autre">Autre </select></td> </tr> <tr> <td colspan=2><div align="center"><br><strong>Votre message:</strong><br><br> <textarea COLS=50 ROWS=6 name=commentaires><?php echo $commentaires;?></textarea> </div> </td> </table> <br><input type=submit value=Envoyer> - <input type=reset value=Annuler> </form> <br> </div> <div class="contenu_bas"></div> </body> </html>
Le tout est sur la même page. le code PHP en haut et ensuite les balises body.
voilà, normalement ça fonctionne...teste-le

par Éric » 24 mars 2006, 02:06

Merci beaucoup de votre aide, vous me dépannez vraiment:

Code : Tout sélectionner

<h2>Contactez-Nous</h2> <div class="bloc"> Pour nous rejoindre veuillez répondre au formulaire ci-dessous :<br> <br> <form method=POST action=contact.php > <table> <tr><td><strong>Votre Nom/Prénom:</strong></td> <td><input type=text name=Nom size=30></td></tr> <tr><td><strong>Votre Email:</strong></td> <td><input type=text name=Email size=30></td></tr> <tr><td><strong>Adresse de votre site:</strong></td> <td><input type=text name=Site size=50></td></tr> <tr> <td><strong>Sujet du message:</strong></td> <td><select name="Sujet"> <option value="Infos">Informations <option value="Support">Support <option value="Webdesign">Webdesign <option value="Autre">Autre </select> </td></tr> <tr><td colspan=2><div align="center"><br> <strong>Votre message:</strong><br> <br> <textarea COLS=50 ROWS=6 name=commentaires></textarea> </div></table> <br> <input type=submit value=Envoyer> - <input type=reset value=Annuler> </form> <br> </div> <div class="contenu_bas"></div>

-Éric

par coxine » 22 mars 2006, 11:39

non le code de ton formulaire qui est sur la page contact
qui commence par
<form action="..." ...>
et qui se termine par </form>
Pour les envois de mail, tu peux rajouter les mails que tu souhaites...ce n'était qu'un exemple.
Pour mieux t'aider, il faudrait le code complet de la page.

Re: il faut essayer

par Éric » 22 mars 2006, 00:34

//....début de ton code ton formulaire ???? tu peux le montrer ?
Euh, il est juste en haut, je devrais avoir plus de code que ça?

Sinon je ne comprend plus tout à fait le code, l'autre j'avais plusieurs email pour différents sujets. Celui si semble envoyer le courriel à une seul personne non?

-Eric

il faut essayer

par coxine » 21 mars 2006, 10:42

et surtout ne pas oublier de mettre les principes de sécurité nécessaires :
pour chaque variable : par exemple :
//....début de ton code ton formulaire ???? tu peux le montrer ?
//..................
if (isset($_POST["nom"])) $login=trim($_POST["nom"]); 
else $nom=""; 
$nom= stripslashes($nom); 
$nom=trim(htmlentities($nom); 

if (isset($_POST["commentaire"])) $commentaire=trim($_POST["commentaire"]); 
else $commentaire=""; 
$commentaire= stripslashes($commentaire); 
$commentaire=trim(htmlentities($commentaire); 

if(!get_magic_quotes_gpc() ) 
{ 
$nom= addslashes($nom); 
$commentaire= addslashes($commentaire); 
} 
else 
{ 
$nom =str_replace("'","''",$nom); 
$commentaire =str_replace("'","''",$commentaire); 
} 
// de ce genre, mais encore une fois, je débute aussi, donc à faire confirmer ici, avant de valider ton formulaire !!!
// puis ajouter la fonction mail : 
mail ($to, $nom, $commentaire, $...., $.....);
?>
bon courage

par Éric » 21 mars 2006, 06:28

Oulala, je suis étourdi à lire ça, si je prend le dernier code que vous avez donné je devrais être correcte si j'ai bien compris?

-Éric