FORMULAIRE DE CHOIX MULTI-CONTACT VALIDE XHTML 1.0 TRANSITIONAL

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 - 4 janv. 2011 à 21:01
 olivy - 23 oct. 2014 à 17:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52679-formulaire-de-choix-multi-contact-valide-xhtml-1-0-transitional

les adresses mails sont en clair dans le code source de la page...
Bonjour aventurier 19

J'ai résolu le problème pour les champs,en ajoutant du code ($msg) et tant que j'y étais j'en ai rajouté quelques uns (des champs) URL ci- dessous

http://colleges.ac-rouen.fr/louisphilippe/Formulairesecur/Formulairetcmeu.php

Merci pour ton travail.
aventurier19 Messages postés 102 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 23 juillet 2013
15 mai 2013 à 09:24
Bonjour philifour,
Quel(s) champs n'avez-vous pas ?
Vers quel service de messagerie vous avez envoyé un mail (hotmail, orange, laposte, sfr, bouygues, free, ...)
Bonjour,

Le formulaire fonctionne, mais dans le mail de réception, je n'ai pas tous les champs, je n'ai que le message.

Cordialement

Philippe FOURDRINIER
aventurier19 Messages postés 102 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 23 juillet 2013
12 déc. 2012 à 20:31
Pour Ninja83:
Dans le fichier reponse.php, remplace

session_destroy;
par
unset($destinataire, $nom, $prenom, $email, $sujet, $message);

ainsi seules les variables utilisées dans le formulaire seront effacées.
Attention cependant car si suite à ton login, tu définis une/les variable(s) $destinataire, $nom, $prenom, $email, $sujet et/ou $message ; elles seront aussi effacées. Si c'est le cas personnalise le unset(); ci-dessus avec tes contraintes.

@+ et merci d'utiliser mon script.
Bonjour

Je trouve se script très bien fait par contre je rencontre juste un petit
soucis en faite l'envoie des mails se passe très bien

sauf pour la parti résultat en faite des que j'ai la page résultat
cela me déconnecte au niveau login obliger de me reconnecter

comment faire pour rester connecter ?
aventurier19 Messages postés 102 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 23 juillet 2013
26 sept. 2012 à 11:09
Oui c'est possible, j'avais l'intention de le faire rapidement après les dernières modif mais faute de temps ; c'est pas encore fait.
Je vais essayer de me pencher dessus prochainement
Bonjour,
Y aurait il un moyen de pouvoir le securiser un peu plus
notament rendre invisible les emails des destinataires (evite le spam)

et justement de ne pas voir la liste des destinataire si on affiche la source

Cdt Jean

Bravo pour ce script en tout cas
cs_oliver26 Messages postés 4 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 5 juin 2012
5 juin 2012 à 22:03
formulaire pas mal je trouve
nickg Messages postés 9 Date d'inscription mercredi 16 octobre 2002 Statut Membre Dernière intervention 31 août 2017
27 mars 2011 à 16:03
Ce script se démarque des autres . Avoir la possibilité envoyer un mel en sélectionnant un destinataire est super .
Ca donne l'air d'avoir un carnet d'adresse en permanence avec le formulaire.
Pour avoir cherché des heures sur le web , les formulaires de ce type sont extrêmement rares.
Super idée et encore merci pour ce travail
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
5 janv. 2011 à 13:55
bonjour

oui le code je l'ai changé pour plus avoir les erreurs de variables non definies ... (en php5 strict) c'est pour ça que je le reposte. Bon je te poste un exemple essaie le.
tu evites le repostage ainsi

a++

<?php
/* cod57 pour phpcs 2011*/
/* change $destinataire */

if(isset($_GET['confirmation']) && $_GET['confirmation']=='ok'){
echo 'Message envoyé !

Un autre message cliquer ["? ici]

<hr />';
$_GET['confirmation']="";
exit;
}else{
echo 'Merci de nous écrire
<hr />';
}

$form='<form method="post" action="'.$_SERVER['PHP_SELF'].'">


Votre nom :,
,

----

Votre e-mail :,
,

----

Votre sujet :,
,

----

Vos commentaires :

<textarea cols="50" rows="6" name="message"></textarea>




-
</form>';

if(isset($_POST['sub']) && $_POST['sub']=="Envoyer"){
$destinataire="???@free.fr";
$header="From: ".$destinataire;
$hidden_sujet=$_POST['subject'];
unset($_POST['sub']);
unset($_POST['subject']);
$message="";

while (list($key,$val) = each($_POST)){
$message .= "$key :\n$val\n\n";
}

if(mail($destinataire,$hidden_sujet,$message,$header)){
//echo '<script>alert("E-mail envoyé")</script>';
Header('Location:'.$_SERVER['PHP_SELF'].'?confirmation=ok');exit;
}else{
echo 'Problème avec la fonction mail sur le serveur !';exit;
}

}else{
echo $form;exit;
}
?>
aventurier19 Messages postés 102 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 23 juillet 2013
5 janv. 2011 à 12:17
Merci COD57 d'avoir jeter un oeil sur le code.

Commme tu as pu le voir la 1ère fois les variables ne sont pas initialisées, pourquoi.
Si je les initialise au début en faisant $nom=''; :
- en cliquant sur envoyer le script efface les variables entrées par l'expéditeur et de ce fait ne veut pas m'envoyer le mail et mets que les champs sont vide
Si je les initialise au début en faisant $nom=(isset($nom)); :
- en cliqant sur envoyer le script ne peut plus voir si des variable sont vide.

Je suis débutant, si tu sais comment, peux-tu m'aider.

PS : Tu as recopier le code ; avait-tu fais une modif ?

Pour l'anti F5 j'aimerai qu'il soit dans le fichier, donc je cherche et prog.
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
4 janv. 2011 à 21:01
bonsoir

je te reposte ton script
plusieurs variables non definies
il faut utiliser isset
le script fonctionne
mais je pense que tu peux l'ameliorer

as tu pensé à une technique anti double postage (f5 et c'est reparti ...) tu devrais rediriger vers une page de remerciement
et mettre une variable de controle a false apres l'envoi ...
pense aux sessions

si tu appuies sur f5 apres l'envoi ton mail est renvoyé et renvoyé ...

bne prog

a++


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Envoyer un mail</title>
</head>


Envoyer un mail


<?php
/*
********************************************************************************************
CONFIGURATION
********************************************************************************************

*/
$err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin

// destinataire est l'adresse mail de destination. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
// $destinataire = 'destinataire';

// copie ? (envoie une copie au visiteur)
$copie = 'oui';

// Action du formulaire (si votre page a des paramètres dans l'URL)
// si cette page est index.php?page=contact alors mettez index.php?page=contact
// sinon, laissez vide
$form_action = '';

// Messages de confirmation du mail
$message_envoye = "Votre message nous est bien parvenu !

Vous allez recevoir une copie de votre message dans la boîte email que vous avez écrit.";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer ultérieurement SVP.";

// Liste des messages d'erreur
$error_msg=array(); // intialisation du tableau

if (isset($nom) && $nom=="") // Test si la chaïne de texte est vide
$error_msg[]="Entrez votre nom svp!";
if (isset($prenom) && $prenom=="") // Test si la chaïne de texte est vide
$error_msg[]="Entrez votre prénom svp!"; // Ajouter à la liste
if (isset($email) && $email=="") // Test si la chaïne de texte est vide
$error_msg[]="Entrez votre email svp! S'il n'est pas valide, il sera effacé."; // Ajouter à la liste

/* Vérifier le destinataire (permet la non-acceptation d'envoi avec le choix 'Faites votre choix...') */
if(isset($_POST['destinataire'])) {$destinataire = stripslashes(htmlentities($_POST['destinataire']));} else {$destinataire="";}
if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',str_replace('&','&',$destinataire)))
$err_formulaire = false;
else
{
$error_msg[]="Choisissez un destinataire svp!"; // Ajouter à la liste
$err_formulaire = true;
}

if (isset($sujet) && $sujet=="") // Test si la chaine de texte est vide
$error_msg[]="Entrez le sujet de votre message svp!"; // Ajouter à la liste
if (isset($message) && $message=="") // Test si la chaine de texte est vide
$error_msg[]="N'oubliez pas d'écrire votre message!"; // Ajouter à la liste

// Message d'erreur du formulaire
// $message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis"."
";

/*
********************************************************************************************
FIN DE LA CONFIGURATION
********************************************************************************************
*/
/* cette fonction sert à nettoyer et enregistrer un texte */
function Rec($text)
{
$text = trim($text); // delete white spaces after & before text
if (1 === get_magic_quotes_gpc())
{
$stripslashes = create_function('$txt', 'return stripslashes($txt);');
}
else
{
$stripslashes = create_function('$txt', 'return $txt;');
}

// Citation magiques ?
$text = $stripslashes($text);
$text = htmlspecialchars($text, ENT_QUOTES); // convertion en chaîne avec " et ' aussi
$text = nl2br($text);
return $text;
};

/* Cette fonction sert à vérifier la syntaxe d'un email saisi */
function IsEmail($email)
{
$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
return (eregi($pattern,$email)) ? true : false;
};

$err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin

// si formulaire envoyé, on récupère tous les champs. Sinon, on initialise les variables.
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
$sujet = (isset($_POST['sujet'])) ? Rec($_POST['sujet']) : '';
$message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';

if (isset($_POST['envoi']))
{
// On va vérifier les variables et l'email ...
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vidé si erroné, soit il vaut l'email entré
if (IsEmail($email))
$err_formulaire = false;
else
$err_formulaire = true;

// affichage des éventuels erreurs à cause de champs vide
if ($error_msg) {
echo "
\n"; // Ouvre la liste
foreach ($error_msg as $err) { //Ecrit chaque erreur de la liste
echo " * ".$err."
\n";
}
echo "
"; // Ferme la liste
}

if (($nom != '') && ($email != '') && ($sujet != '') && ($message != ''))

{
// les 4 variables sont remplies, on génère puis envoie le mail

$headers = 'De: '.$nom.'_'.$prenom.' <'.$email.'>' . "\r\n";

// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};

// Remplacement de certains caractères spéciaux
$message = html_entity_decode($message);
$message = str_replace("'","'",$message);
$message = str_replace("’","'",$message);
$message = str_replace(""",'"',$message);
$message = str_replace('
','',$message);
$message = str_replace('
','',$message);
$message = str_replace("<","<",$message);
$message = str_replace(">",">",$message);
$message = str_replace("&","&",$message);

// Envoi du mail
if (mail($cible, $sujet, $message, $headers))
{
echo ''.$message_envoye.'

'."\n";
}
else
{
echo ''.$message_non_envoye.'

'."\n";
};
}
else
{

$message_formulaire_invalide="ton message";
// une des 3 variables (ou plus) est vide ...
echo ''.$message_formulaire_invalide."\n";
$err_formulaire = true;
};
}; // fin du if (!isset($_POST['envoi']))

if (($err_formulaire) || (!isset($_POST['envoi'])))
{

// afficher le formulaire
echo '<form id="contact" method="post" action="'.$form_action.'">'."\n";
echo ' <fieldset><legend>Vos coordonnées</legend>'."\n";
echo ' <table border="0">';
echo ' ----
';
echo ', ';
echo ' <label for=\"nom\">Nom :</label>'.\"\n\";
echo ' </td>';
echo ' ';
echo ' '."\n";
echo '
'."\n";
echo '
'."\n";
echo ', ';
echo ' ';
echo ' ----
';
echo ' ';
echo ' <label for="prenom">Prénom :</label>'."\n";
echo ', ';
echo ' ';
echo ' '."\n";
echo '
'."\n";
echo '
'."\n";
echo ', ';
echo ' ';
echo ' ----
';
echo ' ';
echo ' <label for="email">Email :</label>'."\n";
echo ', ';
echo ' ';
echo ' '."\n";
echo '
'."\n";
echo ', ';
echo ' ';
echo '
';
echo ' </fieldset>'."\n";
echo '
';


// ne pas modifier les lignes <option selected="choix" ... et <option value="" ...
// Ecrire les choix suivant cette syntaxe <option value="pseudo@domaine.fr">Personne</option> où pseudo@domaine.fr est une adresse mail de destination
// et Personne ce qui sera affiché dans la liste déroulante
// Possibilité de mettre autant de <option value="pseudo@domaine.fr">Personne</option> que souhaité

?>

<label for="destinataire"> Votre message est adressé à :</label>
<select id="destinataire" name="destinataire">
<option selected="selected">Faites votre choix...</option>
<option value=""></option>
<option value="abyz@free.fr">Personne1</option>
<option value="mail2@domaine.fr">Personne2</option>
<option value="mail3@domaine.fr">Personne3</option>
<option value="mail4@domaine.fr">Personne4</option>
</select>

<?php
echo '
';
echo '
'."\n";
echo ' <fieldset><legend>Votre message :</legend>'."\n";
echo ' ';
echo ' ----
';
echo ' ';
echo ' <label for="sujet">Sujet du message :</label>'."\n";
echo ', ';
echo ' ';
echo ' '."\n";
echo '
'."\n";
echo '
'."\n";
echo ', ';
echo ' ';
echo ' ----
';
echo ' ';
echo ' <label for="message">Message :</label>'."\n";
echo ', ';
echo ' ';
echo ' <textarea id="message" name="message" tabindex="4" cols="69" rows="9">'.stripslashes($message).'</textarea>'."\n";
echo '
'."\n";
echo ', ';
echo ' ';
echo '
';
echo ' </fieldset>'."\n";
echo '
'."\n";
echo '


'."\n";
echo '</form>'."\n";
};
?>

</td>
</tr>
</table>



</html>
Rejoignez-nous