8792 sujets

Développement web côté serveur, CMS

Salut à tous!

Pour un site professionnel, je développe un formulaire de contact, avec des champs texte et des cases à cocher. Une fois ce formulaire rempli, le destinataire reçoit un courriel au format HTML qui reprend les données du formulaire.

Les champs texte sont correctement restitués. En revanche, les cases cochées ne le sont plus dans le courriel que reçoit le destinataire. En outre, la feuille de style n'habille pas le courriel.

Voici le fichier contact.php.


<?php 
include ("fonctions/encodage-html.php");

// Définition des champs du formulaire (avec protection de l'adresse électronique, en remplaçant @ par *at*) et de l'état des cases à cocher
$societe=(isset($_POST['societe']))? encodage_html($_POST['societe']): '';
$nom=(isset($_POST['nom']))? strtoupper(encodage_html($_POST['nom'])): '';
$prenom=(isset($_POST['prenom']))? encodage_html($_POST['prenom']): '';
$telephone=(isset($_POST['telephone']))? $_POST['telephone']: '';
$courriel=(isset($_POST['courriel']))? str_replace('@', '*at*', $_POST['courriel']): '';
$adresse=(isset($_POST['adresse']))? encodage_html($_POST['adresse']): '';
$code_postal=(isset($_POST['code_postal']))? $_POST['code_postal']: '';
$ville=(isset($_POST['ville']))? strtoupper(encodage_html($_POST['ville'])): '';
$rendez_vous=(isset($_POST['rendez_vous']))? ' checked="checked"': '';
$devis=(isset($_POST['devis']) && !empty($devis))? ' checked="checked"': '';
$terrain_tel=(isset($_POST['terrain_tel']))? ' checked="checked"': '';
$terrain_faf=(isset($_POST['terrain_faf']))? ' checked="checked"': '';
$terrain_quali=(isset($_POST['terrain_quali']))? ' checked="checked"': '';
$terrain_web=(isset($_POST['terrain_web']))? ' checked="checked"': '';
$terrain_btob=(isset($_POST['terrain_btob']))? ' checked="checked"': '';
$terrain_btoc=(isset($_POST['terrain_btoc']))? ' checked="checked"': '';
$terrain_btor=(isset($_POST['terrain_btor']))? ' checked="checked"': '';
$volume_questionnaire=(isset($_POST['volume_questionnaire']))? encodage_html($_POST['volume_questionnaire']): '';
$observations=(isset($_POST['observations']))? encodage_html($_POST['observations']): '';
$doc_terrain_tel=(isset($_POST['doc_terrain_tel']))? ' checked="checked"': '';
$doc_terrain_faf=(isset($_POST['doc_terrain_faf']))? ' checked="checked"': '';
$doc_terrain_quali=(isset($_POST['doc_terrain_quali']))? ' checked="checked"': '';
$doc_terrain_ligne=(isset($_POST['doc_terrain_ligne']))? ' checked="checked"': '';
$doc_prestation_complementaire=(isset($_POST['doc_prestation_complementaire']))? ' checked="checked"': '';
  
// On vérifie si les champs obligatoires sont tous correctement renseignés
if ((isset($_POST['societe']) && !empty($societe)) && (isset($_POST['nom']) && !empty($nom)) && (isset($_POST['prenom']) && !empty($prenom)) && (isset($_POST['telephone']) && !empty($telephone)) && (isset($_POST['courriel']) && !empty($courriel)) && (!eregi("\n", $courriel) || !eregi("\r", $courriel))){
  include ("biblio/courriel.php");
  mail($destinataire, $objet, $message, $en_tete);
  $avertissement='Le formulaire a bien &eacute;t&eacute; envoy&eacute;. Merci de l\'avoir rempli.';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="toolbar" content="no" />
<meta name="keywords" content="" />
<title>Contact</title>
<link href="styles.css" rel="stylesheet" type="text/css" />
</head>

<body id="haut">
<div id="page">
  <div id="corps">
    <h1>Contact</h1>
    <div id="corps-cadre">
<?php 
// Affichage du formulaire
if (!isset($_POST['societe']) || empty($societe) || !isset($_POST['nom']) || empty($nom) || !isset($_POST['prenom']) || empty($prenom) || !isset($_POST['telephone']) || empty($telephone) || !isset($_POST['courriel']) || empty($courriel) || eregi("\n", $courriel) || eregi("\r", $courriel)){
?>
      <p>Vous souhaitez obtenir un rendez-vous, un devis ou tout simplement une documentation&hellip;</p>
      <p>Merci de bien vouloir remplir le formulaire ci-joint.</p>
      <form id="contact" method="post" action="contact.php">
        <ul>
          <li><input class="champ-obligatoire" type="text" value="* Soci&eacute;t&eacute;" disabled="disabled" /><input id="societe" name="societe" type="text" value="<?php echo $societe ?>" /></li>
          <li><input class="champ-obligatoire" type="text" value="* Nom" disabled="disabled" /><input id="nom" name="nom" type="text" value="<?php echo $nom ?>" /></li>
          <li><input class="champ-obligatoire" type="text" value="* Pr&eacute;nom" disabled="disabled" /><input id="prenom" name="prenom" type="text" value="<?php echo $prenom ?>" /></li>
          <li><input class="champ-obligatoire" type="text" value="* T&eacute;l&eacute;phone" disabled="disabled" /><input id="telephone" name="telephone" type="text" value="<?php echo $telephone ?>" /></li>
          <li><input class="champ-obligatoire" type="text" value="* E-mail" disabled="disabled" /><input id="courriel" name="courriel" type="text" value="<?php echo $courriel ?>" /></li>
          <li><input class="champ-facultatif" type="text" value="Adresse" disabled="disabled" /><input id="adresse" name="adresse" type="text" value="<?php echo $adresse ?>" /></li>
          <li><input class="champ-facultatif" type="text" value="Code postal" disabled="disabled" /><input id="code_postal" name="code_postal" type="text" value="<?php echo $code_postal ?>" /></li>
          <li><input class="champ-facultatif" type="text" value="Ville" disabled="disabled" /><input id="ville" name="ville" type="text" value="<?php echo $ville ?>" /></li>
          <li class="champ-divers">Je souhaite obtenir un rendez-vous de pr&eacute;sentation <input id="rendez_vous" name="rendez_vous" type="checkbox"<?php echo $rendez_vous ?> /></li>
          <li class="champ-divers">Je souhaite obtenir un devis <input id="devis" name="devis" type="checkbox"<?php echo $devis ?> /></li>
          <li class="champ-divers">Terrain&nbsp;: t&eacute;l&eacute;phone&nbsp;<input id="terrain_tel" name="terrain_tel" type="checkbox"<?php echo $terrain_tel ?> /> face &agrave; face <input id="terrain_faf" name="terrain_faf" type="checkbox"<?php echo $terrain_faf ?> /> recrutement quali <input id="terrain_quali" name="terrain_quali" type="checkbox"<?php echo $terrain_quali ?> /> Web <input id="terrain_web" name="terrain_web" type="checkbox"<?php echo $terrain_web ?> /> B to B <input id="terrain_btob" name="terrain_btob" type="checkbox"<?php echo $terrain_btob ?> /> B to C <input id="terrain_btoc" name="terrain_btoc" type="checkbox"<?php echo $terrain_btoc ?> /> B to R <input id="terrain_btor" name="terrain_btor" type="checkbox"<?php echo $terrain_btor ?> /></li>
          <li class="champ-divers">Volume de questionnaires <input id="volume_questionnaire" name="volume_questionnaire" type="text" value="<?php echo $volume_questionnaire ?>" /></li>
          <li class="champ-divers">Observations <textarea id="observations" name="observations" cols="30" rows="6"><?php echo $observations ?></textarea></li>
          <li class="champ-divers">Je souhaite une documentation commerciale&nbsp;: terrain t&eacute;l&eacute;phone <input id="doc_terrain_tel" name="doc_terrain_tel" type="checkbox"<?php echo $doc_terrain_tel ?> /> terrain face &agrave; face <input id="doc_terrain_faf" name="doc_terrain_faf" type="checkbox"<?php echo $doc_terrain_faf ?> /> terrain quali <input id="doc_terrain_quali" name="doc_terrain_quali" type="checkbox"<?php echo $doc_terrain_quali ?> /> terrain en ligne <input id="doc_terrain_ligne" name="doc_terrain_ligne" type="checkbox"<?php echo $doc_terrain_ligne ?> /> prestations compl&eacute;mentaires <input id="doc_prestation_complementaire" name="doc_prestation_complementaire" type="checkbox"<?php echo $doc_prestation_complementaire ?> /></li>
          <li id="validation"><input id="envoi" type="submit" value="Envoyer" /></li>
        </ul>
      </form>
<?php 
}
else{
?>
      <p id="avertissement"><?php echo $avertissement ?></p>
      <ul id="retour">
        <li><a href="index.php" title="Retour &agrave; l'accueil">Retour &agrave; l'accueil</a></li>
      </ul>
<?php 
}
?>
    </div>
  </div>
</div>
</body>
</html>


Et voici le fichier courriel.php en question.


<?php 
// Paramètres du courriel
$destinataire='mail@domaine.com';
$objet='Contact';
$message='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Contact</title>
<link href="<!-- Lien absolu vers le fichier styles.css -->" rel="stylesheet" type="text/css" />
</head>

<body id="haut">
<div id="corps">
  <form id="contact" method="post" action="contact.php">
    <ul>
      <li>Soci&eacute;t&eacute;&nbsp;: '.$societe.'</li>
      <li>Nom"&nbsp;: '.$nom.'</li>
      <li>Pr&eacute;nom&nbsp;: '.$prenom.'</li>
      <li>T&eacute;l&eacute;phone&nbsp;: '.$telephone.'</li>
      <li>E-mail&nbsp;: '.$courriel.'</li>
      <li>Adresse&nbsp;: '.$adresse.'</li>
      <li>Code postal&nbsp;: '.$code_postal.'</li>
      <li>Ville&nbsp;: '.$ville.'</li>
      <li class="champ-divers">Je souhaite obtenir un rendez-vous de pr&eacute;sentation <input id="rendez_vous" name="rendez_vous" type="checkbox"'.$rendez_vous.' disabled="disabled" /></li>
      <li class="champ-divers">Je souhaite obtenir un devis <input id="devis" name="devis" type="checkbox"'.$devis.' disabled="disabled" /></li>
      <li class="champ-divers">Terrain&nbsp;: t&eacute;l&eacute;phone&nbsp;<input id="terrain_tel" name="terrain_tel" type="checkbox"'.$terrain_tel.' /> face &agrave; face <input id="terrain_faf" name="terrain_faf" type="checkbox"'.$terrain_faf.' /> recrutement quali <input id="terrain_quali" name="terrain_quali" type="checkbox"'.$terrain_quali.' /> Web <input id="terrain_web" name="terrain_web" type="checkbox"'.$terrain_web.' /> B to B <input id="terrain_btob" name="terrain_btob" type="checkbox"'.$terrain_btob.' /> B to C <input id="terrain_btoc" name="terrain_btoc" type="checkbox"'.$terrain_btoc.' /> B to R <input id="terrain_btor" name="terrain_btor" type="checkbox"'.$terrain_btor.' /></li>
      <li class="champ-divers">Volume de questionnaires&nbsp;: '.$volume_questionnaire.'</li>
      <li class="champ-divers">Observations&nbsp;:'.$observations.'</li>
      <li class="champ-divers">Je souhaite une documentation commerciale&nbsp;: terrain t&eacute;l&eacute;phone <input id="doc_terrain_tel" name="doc_terrain_tel" type="checkbox"'.$doc_terrain_tel.' /> terrain face &agrave; face <input id="doc_terrain_faf" name="doc_terrain_faf" type="checkbox"'.$doc_terrain_faf.' /> terrain quali <input id="doc_terrain_quali" name="doc_terrain_quali" type="checkbox"'.$doc_terrain_quali.' /> terrain en ligne <input id="doc_terrain_ligne" name="doc_terrain_ligne" type="checkbox"'.$doc_terrain_ligne.' /> prestations compl&eacute;mentaires <input id="doc_prestation_complementaire" name="doc_prestation_complementaire" type="checkbox"'.$doc_prestation_complementaire.' /></li>
    </ul>
  </form>
</div>
</body>
</html>
';
$en_tete="Content-Type: text/html; charset=iso-8859-1\r\nMIME-Version: 1.0\r\nFrom: $courriel\r\n";
?>


Quant au fichier encodage-html.php, le voici:


<?php 
function encodage_html($chaine){
  $chaine=stripslashes($chaine);
  $chaine=htmlentities($chaine, ENT_COMPAT);
  $caracteres_non_codes=array('Œ', 'œ', 'Ÿ', '–', '—', '‘', '’', '‚', '“', '”', '„', '†', '‡', '•', '…', '‰', '‹', '›', '€', '™');
  $caracteres_codes=array('&OElig;', '&oelig;', '&Yuml;', '&ndash;', '&mdash;', '&lsquo;', '&rsquo;', '&sbquo;', '&ldquo;', '&rdquo;', '&bdquo;', '&dagger;', '&Dagger;', '&bull;', '&hellip;', '&permil;', '&lsaquo;', '&rsaquo;', '&euro;', '&trade;');
  $encodage_html=str_replace($caracteres_non_codes, $caracteres_codes, $chaine);
  return $encodage_html;
}
?>


Aidez-moi, je vous en prie: c'est pour un site professionnel qui doit être mis en ligne le plus tôt possible.
salut !

juste une question : tu as vu dans quel forum tu poste ta question ??

Standards web et langages serveurs !!

bon sinon je pense qu'il faut juste que t'oublie :

<link href="<!-- Lien absolu vers le fichier styles.css -->" rel="stylesheet" type="text/css" />


et met directement

<style type="text/css">
// ...
</style>
bonjour Smiley smile

ça c'est inutile:
// On vérifie si les champs obligatoires sont tous correctement renseignés
if ((isset($_POST['societe'])...
// Affichage du formulaire
if (!isset($_POST['societe']) ...
puisque:
$societe=(isset($_POST['societe']))? encodage_html($_POST['societe']): '';

bon, après relecture c'est utile mais tordue:
moi je préfère mettre dans <form action"./ma_page_denvoi.php?action=send">

if ( $_GET['action']='send' ) {. ...
  if ( si ça marche: ) ..
  header(location: /ma_page_denvoi.php?action=success);
  else ça marche pas : ..
  header(location: /ma_page_denvoi.php?action=failed);
  exit();
}
elseif( $_GET['action']='success' ) { ..
    echo 'youpi';
}
elseif( $_GET['action']='failed' ) { ..
    echo 'pas youpi';
}

ça évite aussi de se retrouver avec des mails en double parceque l'utilisateur à fait un refresh de page après l'envoie Smiley smile
note j'utilise switch ($ma_var) pour faire ce genre de chose, en général ...


pour rajouté une touche de standards web Smiley smile
il me semblerait bien que se soit checked="true" et non checked="checked"

sinon pourquoi ?
str_replace('@', '*at*', $_POST['courriel'])
si le courrier n'est pas publique ?
il faudrait plutot vérifier si l'addresse est valide Smiley smile
Modifié par desg (22 Sep 2006 - 17:26)