Forum ZitePLUS

La communauté des utilisateurs du CMS ZitePLUS

Vous n'êtes pas identifié(e).

#1 10/01/2013 18:23:38

diane
Membre
Inscription : 03/01/2012
Messages : 8

Module contact : ajout de champs

Bonjour

Je souhaite ajouter des champs au formulaire de contact, notemmant un numéro de téléphone

J'ai donc ajouter une variable

$telephone   = Rec('telephone');

puis une vérification du contenu du champ

$err_telephone = empty($telephone);

puis un champ dans mon formulaire

$out .= '        <p>'."\n";
      $out .= '            <label for="telephone">'.$this->get_message('telephone').'</label>'."\n";
			$out .= '            <input type="text" id="telephone" name="telephone" value="'.$telephone.'" tabindex="6" />'."\n";
			$out .= '        </p>'."\n";

Donc le champ s'affiche dans mon formulaire MAIS le contenu (n° de téléphone) n'est pas dans le mail reçu !!!
Ça doit être normal car je n'ai précisé nul part que cette variable devait être envoyée !!!

Je ne sais pas comment faire (merci de ne pas éclater de rire)...
S'il vous plait, une piste, un indice

MERCI

Dernière modification par diane (10/01/2013 18:24:12)

Hors ligne

#2 11/01/2013 10:40:25

snypi
Moderateurs
Inscription : 11/03/2008
Messages : 1 235
Site Web

Re : Module contact : ajout de champs

salut
je suis pas trop sur de moi mais ligne 84

[== php ==]
       	// les 4 variables sont remplies, on génère puis envoie le mail
        $headers = 'From: '.$civilite.' '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n";  /// Logiquement, une génération par défaut est faite + ATTENTION: faire: noreply@hhhhh pour la copie utilisateur
				$cible = $this->getOption('destinataire');
					// envoyer une copie au visiteur ?

test un truc comme cela

[== php ==]
        $headers = 'From: '.$civilite.' '.$prenom.' '.$nom.' <'.$email. $telephone'>' . "\r\n";  /// Logiquement, une génération par défaut est faite + ATTENTION: faire: noreply@hhhhh pour la copie utilisateur

mais vraiment pas sur de l'endroit et de la synthaxe smile


un zite+ associatif http://asso.gard.a.toi.free.fr
création de site internet dans le Gard et Ardèche http://www.creation-site-internet-gard.com/

Hors ligne

#3 11/01/2013 10:54:00

diane
Membre
Inscription : 03/01/2012
Messages : 8

Re : Module contact : ajout de champs

Il faut rajouter un point après $telephone

[== php ==]
        $headers = 'From: '.$civilite.' '.$prenom.' '.$nom.' <'.$email. $telephone.'>' . "\r\n";  /// Logiquement, une génération par défaut est faite + ATTENTION: faire: noreply@hhhhh pour la copie utilisateur

Sinon, la page est blanche.

Le numéro de téléphone est collé à l'adresse mail dans l'expéditeur du message que je reçois.
madame Sdfgh MZER <sdfgh.mzer@domaine.fr1234555>
1234555 étant mon téléphone.

Je ne trouve pas où est géré le corps du message ?
Quelle ligne indique que la variable $message doit être insérer dans le mail ?

Dernière modification par diane (11/01/2013 10:54:18)

Hors ligne

#4 11/01/2013 12:31:11

snypi
Moderateurs
Inscription : 11/03/2008
Messages : 1 235
Site Web

Re : Module contact : ajout de champs

ligne 105

[== PHP ==]
      	// Envoi du mail
      	if (mail($cible, $objet, $message, $telephone, $headers)) {

essaye ici


un zite+ associatif http://asso.gard.a.toi.free.fr
création de site internet dans le Gard et Ardèche http://www.creation-site-internet-gard.com/

Hors ligne

#5 11/01/2013 15:49:16

diane
Membre
Inscription : 03/01/2012
Messages : 8

Re : Module contact : ajout de champs

Ça ne fonctionne pas. hmm

Ou plutôt si : le téléphone est bien dans le corps du mail, mais le nom et l'adresse mail disparaissent...

Mais j'ai suivi la piste et voici mon code

[== PHP ==]
// Envoi du mail
      	if (mail($cible, $objet, $telephone."\n". $message, $headers)) {

Je vais pouvoir ajouter encore de nouveaux champs. big_smile
Merci pour ton aide snypi

Hors ligne

#6 11/01/2013 16:19:04

snypi
Moderateurs
Inscription : 11/03/2008
Messages : 1 235
Site Web

Re : Module contact : ajout de champs

dis moi avec ton code si cela fonctionne ??
je pense qu'avec ceci dans le corp du message tu à le téléphone un retour à la ligne et le reste du message posté est ce bien cela??


un zite+ associatif http://asso.gard.a.toi.free.fr
création de site internet dans le Gard et Ardèche http://www.creation-site-internet-gard.com/

Hors ligne

#7 11/01/2013 17:02:47

diane
Membre
Inscription : 03/01/2012
Messages : 8

Re : Module contact : ajout de champs

oui, ça fonctionne. cool

"\n" pour un retour à la ligne
' ' pour un espace entre 2 variables

J'ai même rajouté un champ "code postal"
mon code est donc

[== PHP ==]
// Envoi du mail
      	if (mail($cible, $objet, $civilite.' '.$prenom.' '.$nom."\n". $email."\n". $code."\n".$telephone."\n \n". $message, $headers)) {

ce qui donne

madame Prémon NOM
adresse@mail
code postal
téléphone

texte du message

Au final, j'ai transformé le formulaire de contact en formulaire de demande de devis.  wink

Dernière modification par diane (11/01/2013 17:04:46)

Hors ligne

#8 11/01/2013 18:44:21

snypi
Moderateurs
Inscription : 11/03/2008
Messages : 1 235
Site Web

Re : Module contact : ajout de champs

je t'invite à copier le code de contact.php dans le forum je crois que cela peut servir d'autre utilisateur wink

(je crois que dans les options de dev de ziteplus jpg à prévue l'ajout de champ au formulaire) a suivre
++


un zite+ associatif http://asso.gard.a.toi.free.fr
création de site internet dans le Gard et Ardèche http://www.creation-site-internet-gard.com/

Hors ligne

#9 12/01/2013 00:37:35

diane
Membre
Inscription : 03/01/2012
Messages : 8

Re : Module contact : ajout de champs

Je résume :
Je souhaitais transformer mon formulaire de contact en formulaire de demande de devis et ajouter 2 champs supplémentaires " code postal" et "téléphone" dont 1 obligatoires (téléphone)

Voici donc mon fichier contact.php complet.

J'ai commenté toutes les lignes modifiées, le commentaire commence par // ----

[== PHP ==]
<?php
/*
module:	Contact - Gestion d'un formulaire de contact
Copyright Hubert ARNOUX 2011
Site : http://www.atod.fr/ziteplus/
Licence : CeCILL-B, http://www.cecill.info

Historique:
  Version et Date   version Zite+ mini    Description
  ===============		==================    ===========
  1.0 du 01/02/2011	0.9.1.b1              (Atod) Création du module
  1.1 du 17/04/2011 0.9.2.a1              (JPG) Ajout captcha de ziteplus + diverses corrections, simplifications et modifications
	1.2 du 26/11/2011 0.9.2.a7							(JPG) Petite correction bug
Le module principal se trouve dans le fichier   zplus/module/contact.php
Les données ini sont dans                       zplus/module/contact.ini
les données paramètres dans                     zplus/module/config/contact.opt

Il permet de créer un formulaire de contact :
 - vérification de la syntaxe d'email
 - possibilité d'envoyer une copie de l'email à l'expéditeur
 - configurez vos messages d'échec et de réussite d'envoi
 - configurez une action du formulaire ???????????? => voir ce que devient le traitement de base du formulaire ??????????????????????????????????????????
 - possibilité d'afficher le champ "nom" ou non
 - possibilité d'afficher le champ "prénom" ou non
 - possibilité d'afficher le champ "objet" ou non
 - possibilité d'afficher le champ "civilité" ou non
 - possibilité d'ajouter une signature à vos message pour savoir si le message provient de votre site <=================== voir user_auto <<<<<<<<<<<<<<<<<<<<<
 - conserver les données saisies dans le formulaire en cas d'echec
 - Captcha dans le formulaire de contact
PROJET :
 - possibilité d'ajouter un champ "piece jointe" ou non : En projet
*/
//==============================================================================
class Tcontact extends Tmodule {
	function dojob($opt="") {
		parent::dojob();
		$out='';
    self::$cms->content['dftcss'].= ' label {
                 width:150px;
                 float:left;
                 } ';
		require_once(self::$cms->zpath.'/outils.php');
    /*
     * cette fonction sert à nettoyer et enregistrer un texte
     */
    function Rec($postname) {
      $text ='';
      if (isset($_POST[$postname])) {    // si formulaire envoyé, on récupère le champ. Sinon, on initialise la variable
				$text = no_mq_gpc($_POST[$postname]);
	      $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
  	    $text = nl2br($text);
			}
      return $text;
    };
    /*
     * Cette fonction sert à vérifier la syntaxe d'un email
     */
    function verification_email($email) {
			$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
      return (@eregi($pattern,$email)) ? true : false;
    };
    $err_formulaire =false;
		$err_email = $err_message= $err_telephone= $err_messagesent = false;
			// Etablir valeurs des champs
		$nom = strtoupper(Rec('nom'));										//"NOM" en majuscule
		$prenom = ucwords(strtolower(Rec('prenom'))); 		//"Prénom" avec une majuscule puis en minuscules
		$civilite	= Rec('civilite');
    $code   = Rec('code');                                   // ---- ajout de la variable code postal
    $telephone   = Rec('telephone');                         // ---- ajout de la variable telephone
    $email   = Rec('email');
    $objet   = 'Demande de devis';                           // ---- valeur objet forcee
    $message = Rec('message');
		$signature = 'Message envoyé par '.$prenom.' '.$nom.' via mon site internet ';      // à voir ============> dans les options de config
    if (isset($_POST['envoi'])) {
        // On va vérifier les variables et l'email ...
      $err_email = !verification_email($email);
      $err_message = empty($message);
      $err_nom = empty($nom);
      $err_telephone = empty($telephone);              // ---- ajout de la verification de telephone
      $err_formulaire |= $err_email | $err_message | $err_telephone | $err_nom ;
     	$err_captcha = false;
			if (!$err_formulaire) {
				self::$cms->doevent(eCaptcha,eAfter,$err_captcha);
	      $err_formulaire |= $err_captcha;
			}
				// Pas d'erreur => envoyer le message
      if ($err_formulaire==false) {
        	// les 4 variables sont remplies, on génère puis envoie le mail
        $headers = 'From: '.$civilite.' '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n";  /// Logiquement, une génération par défaut est faite + ATTENTION: faire: noreply@hhhhh pour la copie utilisateur
				$cible = $this->getOption('destinataire');
					// envoyer une copie au visiteur ?
        if ($this->getOption('copie')) {
        	$cible .= ','.$email;
        };
//=> à voir
            // Remplacement de certains caractères spéciaux
				$message = html_entity_decode($message);
				$message = str_replace('&#039;',"'",$message);
				$message = str_replace('&#8217;',"'",$message);
				$message = str_replace('<br>','',$message);
				$message = str_replace('<br />','',$message);
				$message = wordwrap($message, 70);	// Dans le cas où nos lignes comportent plus de 70 caractères, nous les coupons en utilisant wordwrap()
				if ($this->getOption('signature')){		//Dans le cas ou il faut insérer une signature
					$message .= '
			
'.$signature;
			$message .= $this->getOption('endsignature');
				}
        	// Envoi du mail
      	if (mail($cible, $objet, $civilite.' '.$prenom.' '.$nom."\n". $email."\n". $code."\n".$telephone."\n \n". $message, $headers)) {
    			return '<p class="okmessage">'.$this->getOption('messagesent').'</p>'."\n";    // ---- on ajoute les noms, prenoms, mail, telephone et code postal dans le texte du mail. "\n" indique un saut de ligne,   ' ' permet de mettre en espace entre 2 variables
        } else {//Il y a un probleme
          $err_formulaire = $err_messagesent = true;
        };
      }
    }; // fin du if (!isset($_POST['envoi']))
    if (($err_formulaire) || (!isset($_POST['envoi']))) {
			if ($err_formulaire) {
        if ($err_nom)	self::$cms->msgShow($this->get_message('err_nom'),false);
        if ($err_email)	self::$cms->msgShow($this->get_message('err_email'),false);
        if ($err_message)	self::$cms->msgShow($this->get_message('err_message'),false);
        if ($err_telephone)	self::$cms->msgShow($this->get_message('err_telephone'),false);
        if ($err_messagesent) self::$cms->msgShow($this->get_message('err_messagesent'),false);
			}
        // afficher le formulaire
      $out .= '<form id="contact" method="post" '.($this->getOption('form_action')?'action="'.$this->getOption('form_action').'"':'').">\n";
      $out .= '    <fieldset><legend>'.$this->get_message('coordonnees').'</legend>'."\n";

			if ($this->getOption('showname')){	/*On affiche le champ nom*/
				$out .= '        <p>'."\n";
        $out .= '            <label for="nom">'.$this->get_message('nom').'</label>'."\n";
        $out .= '            <input type="text" id="nom" name="nom" value="'.$nom.'" tabindex="1" />'."\n";
        $out .= '        </p>'."\n";
			}
			if ($this->getOption('showfirstname')){	/*On affiche le champ prenom*/
				$out .= '        <p>'."\n";
        $out .= '            <label for="prenom">'.$this->get_message('prenom').'</label>'."\n";
        $out .= '            <input type="text" id="prenom" name="prenom" value="'.$prenom.'" tabindex="2" />'."\n";
        $out .= '        </p>'."\n";
			}
			if ($this->getOption('civility')){	/*On affiche le champ civilité*/
				$out .= '        <p>'."\n";
        $out .= '            <label for="civilite">'.$this->get_message('civilite').'</label>'."\n";
        $out .= '			   <input type="radio" id="civilite" name="civilite" value="'.stripslashes($this->get_message('monsieur')).'" '.($civilite==$this->get_message('monsieur')?'checked':'').' tabindex="3" /> '.$this->get_message('monsieur')."\n";
				$out .= '			   <input type="radio" id="civilite" name="civilite" value="'.stripslashes($this->get_message('madame')).'" '.($civilite==$this->get_message('madame')?'checked':'').' tabindex="3" /> '.$this->get_message('madamme')."\n";
	      $out .= '        </p>'."\n";
			}

      $out .= '        <p>'."\n";
      $out .= '            <label for="email">'.$this->get_message('email').'</label>'."\n";   
			$out .= '            <input type="text" id="email" name="email" value="'.$email.'" tabindex="4" />'."\n";
			$out .= '        </p>'."\n";
			
			 $out .= '        <p>'."\n";
      $out .= '            <label for="code">'.$this->get_message('code').'</label>'."\n";   // ---- on rajoute un champ code postal
			$out .= '            <input type="text" id="code" name="code" value="'.$code.'" tabindex="7" />'."\n";
			$out .= '        </p>'."\n";
						
			 $out .= '        <p>'."\n";
      $out .= '            <label for="telephone">'.$this->get_message('telephone').'</label>'."\n";   // ---- on rajoute un champ telephone
			$out .= '            <input type="text" id="telephone" name="telephone" value="'.$telephone.'" tabindex="6" />'."\n";
			$out .= '        </p>'."\n";
			
			$out .= '    </fieldset>'."\n";
      $out .= '    <fieldset><legend>' . $this->get_message('message') . '</legend>'."\n";
			if ($this->getOption('showobject')){	/*On affiche le champ objet*/
				$out .= '        <p>'."\n";
        $out .= '            <label for="objet">'.$this->get_message('objet').'</label>'."\n";
        $out .= '            <input type="text" id="objet" name="objet" value="'.$objet.'" tabindex="5" />'."\n";
        $out .= '        </p>'."\n";
			}
      $out .= '        <p>'."\n";
      $out .= '            <label for="message" style="vertical-align:top"	>'.$this->get_message('corps').'</label>'."\n";
      $out .= '            <textarea id="message" name="message" tabindex="6"'.($this->getOption('width')>0?' cols="'.$this->getOption('width'):'').'" rows="'.$this->getOption('length').'">'.$message.'</textarea>'."\n";
      $out .= '        </p>'."\n";
      $out .= '    </fieldset>'."\n";
			self::$cms->doevent(eCaptcha,eBefore,$out,true);
      $out .= '    <div style="text-align:center;"><input type="submit" name="envoi" value="'.$this->get_message('envoyer').'" /></div>'."\n";
      $out .= '</form>'."\n";
    	};
		return $out;
	}
}
?>

Ne pas oublier de modifier également le fichier contact.ini en ajoutant

[== Indéfini ==]
telephone= "N° de téléphone :"
code= "Code postal :"

Pour mon cas, je ne voulais pas que le champ Objet s'affiche mais je voulais quand même que le mail reçu en ai un : Demande de devis.
J'ai donc configuré l'affichage de l'objet dans le BO sur Non puis remplacé la déclaration de la variable par "Demande de devis"

Pour conserver le champ objet renseignable, il suffit de laisser ( ligne 70 )

[== PHP ==]
$objet   = Rec('objet');

Peut être que ce code n'est pas très propre (je suis novice) mais chez moi, il fonctionne parfaitement.
Si vous avez besoin de précisions, allez y quand même doucement  big_smile

Hors ligne

#10 12/01/2013 13:47:25

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 086
Site Web

Re : Module contact : ajout de champs

Merci pour ce partage  cool

Hors ligne

#11 13/01/2013 11:05:53

snypi
Moderateurs
Inscription : 11/03/2008
Messages : 1 235
Site Web

Re : Module contact : ajout de champs

merci wink
ps : j'ai rajouté une class okmessage dans ton script de partage

[== PHP ==]
// Envoi du mail
      	if (mail($cible, $objet, $civilite.' '.$prenom.' '.$nom."\n". $email."\n". $code."\n".$telephone."\n \n". $message, $headers)) {
    			return '<p class="okmessage">'.$this->getOption('messagesent').'</p>'."\n";    // ---- on ajoute les noms, prenoms, mail, telephone et code postal dans le texte du mail. "\n" indique

car je trouve que lorsque l'on envoie un mail le message comme quoi le mail est bien partit est morose !
avec cette petite classe on peut rajouté un encadrement, une écriture personnalisée et une petite image en plus pour dire que le message est bien partit
(c'est une classe que je rajoute à tous mes sites dans mon module contact) smile
un exemple de css

[== CSS ==]
.okmessage{
background-color: #dddddd;
background-image: url("deco/Send_Mail.png");
background-repeat: no-repeat;
background-position : 10px 50%;
height: 64px;
line-height: 70px;
padding: 10px 10px 10px 80px;
color: #000;
font-size: 18px; 
font-weight: bold;
font-family: Helvetica, Arial,sans-sherif;
}

++


un zite+ associatif http://asso.gard.a.toi.free.fr
création de site internet dans le Gard et Ardèche http://www.creation-site-internet-gard.com/

Hors ligne

Pied de page des forums