Petit souci pour formulaire en php

Fermé
jimmy1120112 Messages postés 617 Date d'inscription mardi 30 novembre 2010 Statut Membre Dernière intervention 7 décembre 2014 - 30 mai 2012 à 10:48
ReDLoG Messages postés 243 Date d'inscription mardi 12 mars 2013 Statut Membre Dernière intervention 28 octobre 2021 - 15 févr. 2014 à 23:15
Bonjour CCMistes,

Je développe actuellement un site, pour le moment tout vas bien le seul problème que je rencontre ce fait avec le formulaire simple de contact qui ne veut pas réagir, voici le comportement qui fonctionne quand je test :

Les champs nom, tel, mail, message réagissent bien quand le texte est mal écrit ou manquant. (l'avertissement ce fait "Ce champs est requis" ou "Ce champs est mal remplis")

Le bouton envoyé fonctionne quand un texte est manquant ou mal écrit ou que le message est trop court. (l'avertissement ce fait "Ce champs est requis" ou "Ce champs est mal remplis" ou "Votre message est trop court")

Mais le bouton envoyer n'envoie pas le message si tout les champs sont bien remplis, rien ne ce passe au clique sur ce dernier.

Ça fait un petit moment que je cherche mais je n'arrive pas à cerner le problème.

Si vous voulez le script du fichier form.js ou mailhander.php demandez moi je les posterais.

Voici le code source dans la page contact.php :

	    <article class="grid_12">
	      <h2 class="ind1"><span id="result_box" lang="fr">Entrer en contact</span></h2>
	      <form id="contact-form">
		<div class="success">Contact du site<br>
		      <strong>Nous serons bientôt en contact.</strong>
		  </div>
		<fieldset>
		  <label class="name">
			  <input type="text" value="Nom :">
		      <span class="error">Le nom n'est pas valide</span> <span class="empty">Ce champs est requis</span>
		  </label>
		  <label class="phone">
			  <input type="text" value="Téléphone :">
		      <span class="error">Ce numéro de téléphone n'est pas valide</span> <span class="empty">Ce champs est requis</span>
		  </label>
		  <label class="email">
			  <input type="text" value="E-mail :">
		      <span class="error">Votre adresse mail n'est pas valide</span> <span class="empty">Ce champs est requis</span>
		  </label>
		  <label class="message">
			  <textarea>Message :</textarea>
		      <span class="error">Votre message est trop court</span> <span class="empty">Ce champs est requis</span>
		  </label>
		  <div class="buttons2">
		      <a href="/" data-type="submit" class="link1">Envoyer</a>
		  </div>
		</fieldset>
	      </form>
	    </article>

Merci beaucoup !

8 réponses

tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 219
30 mai 2012 à 13:11
Salut,

Il manque la "method" et "action" dans le form.
<form method="post" action="mapage.php"> 

Vous avez mis un lien en guise de bouton pour envoyer le formulaire
<input type="submit" name="envoyer" value="Envoyer" />
0
jimmy1120112 Messages postés 617 Date d'inscription mardi 30 novembre 2010 Statut Membre Dernière intervention 7 décembre 2014 54
30 mai 2012 à 16:09
Bonjour tryan44,

Merci pour la réponse rapide !

J'ai changer ce que vous m'avez dit mais rien y fait, le bouton a changer au lieu d'êtres un lien texte, c'est un bouton, mais il n'envoie toujours pas le mail ...

Voici le code du fichier mailhandler :

<?php
	$owner_email = $_POST["owner_email"];
	$headers = 'From:' . $_POST["email"];
	$subject = 'A message from your site visitor ' . $_POST["name"];
	$messageBody = "";
	
	if($_POST['name']!='nope'){
		$messageBody .= '<p>Visitor: ' . $_POST["name"] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}
	if($_POST['email']!='nope'){
		$messageBody .= '<p>Email Address: ' . $_POST['email'] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}else{
		$headers = '';
	}
	if($_POST['state']!='nope'){		
		$messageBody .= '<p>State: ' . $_POST['state'] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}
	if($_POST['phone']!='nope'){		
		$messageBody .= '<p>Phone Number: ' . $_POST['phone'] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}	
	if($_POST['fax']!='nope'){		
		$messageBody .= '<p>Fax Number: ' . $_POST['fax'] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}
	if($_POST['message']!='nope'){
		$messageBody .= '<p>Message: ' . $_POST['message'] . '</p>' . "\n";
	}
	
	if($_POST["stripHTML"] == 'true'){
		$messageBody = strip_tags($messageBody);
	}
	
	try{
		if(!mail($owner_email, $subject, $messageBody, $headers)){
			throw new Exception('mail failed');
		}else{
			echo 'mail sent';
		}
	}catch(Exception $e){
		echo $e->getMessage() ."\n";
	}
?>


Et celui du fichier forms.js :

//forms
;(function($){
	$.fn.forms=function(o){
		return this.each(function(){
			var th=$(this)
				,_=th.data('forms')||{
					errorCl:'error',
					emptyCl:'empty',
					invalidCl:'invalid',
					notRequiredCl:'notRequired',
					successCl:'success',
					successShow:'4000',
					mailHandlerURL:'bat/MailHandler.php',
					ownerEmail:'support@guardlex.com',
					stripHTML:true,
					smtpMailServer:'localhost',
					targets:'input,textarea',
					controls:'a[data-type=reset],a[data-type=submit]',
					validate:true,
					rx:{
						".name":{rx:/^[a-zA-Z'][a-zA-Z-' ]+[a-zA-Z']?$/,target:'input'},
						".state":{rx:/^[a-zA-Z'][a-zA-Z-' ]+[a-zA-Z']?$/,target:'input'},
						".email":{rx:/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i,target:'input'},
						".phone":{rx:/^\+?(\d[\d\-\+\(\) ]{5,}\d$)/,target:'input'},
						".fax":{rx:/^\+?(\d[\d\-\+\(\) ]{5,}\d$)/,target:'input'},
						".message":{rx:/.{20}/,target:'textarea'}
					},
					preFu:function(){
						_.labels.each(function(){
							var label=$(this),
								inp=$(_.targets,this),
								defVal=inp.val(),
								trueVal=(function(){
											var tmp=inp.is('input')?(tmp=label.html().match(/value=['"](.+?)['"].+/),!!tmp&&!!tmp[1]&&tmp[1]):inp.html()
											return defVal==''?defVal:tmp
										})()
							trueVal!=defVal
								&&inp.val(defVal=trueVal||defVal)
							label.data({defVal:defVal})								
							inp
								.bind('focus',function(){
									inp.val()==defVal
										&&(inp.val(''),_.hideEmptyFu(label),label.removeClass(_.invalidCl))
								})
								.bind('blur',function(){
									_.validateFu(label)
									if(_.isEmpty(label))
										inp.val(defVal)
										,_.hideErrorFu(label.removeClass(_.invalidCl))											
								})
								.bind('keyup',function(){
									label.hasClass(_.invalidCl)
										&&_.validateFu(label)
								})
							label.find('.'+_.errorCl+',.'+_.emptyCl).css({display:'block'}).hide()
						})
						_.success=$('.'+_.successCl,_.form).hide()
					},
					isRequired:function(el){							
						return !el.hasClass(_.notRequiredCl)
					},
					isValid:function(el){							
						var ret=true
						$.each(_.rx,function(k,d){
							if(el.is(k))
								ret=d.rx.test(el.find(d.target).val())										
						})
						return ret							
					},
					isEmpty:function(el){
						var tmp
						return (tmp=el.find(_.targets).val())==''||tmp==el.data('defVal')
					},
					validateFu:function(el){							
						el.each(function(){
							var th=$(this)
								,req=_.isRequired(th)
								,empty=_.isEmpty(th)
								,valid=_.isValid(th)								
							
							if(empty&&req)
								_.showEmptyFu(th.addClass(_.invalidCl))
							else
								_.hideEmptyFu(th.removeClass(_.invalidCl))
							
							if(!empty)
								if(valid)
									_.hideErrorFu(th.removeClass(_.invalidCl))
								else
									_.showErrorFu(th.addClass(_.invalidCl))								
						})
					},
					getValFromLabel:function(label){
						var val=$('input,textarea',label).val()
							,defVal=label.data('defVal')								
						return label.length?val==defVal?'nope':val:'nope'
					}
					,submitFu:function(){
						_.validateFu(_.labels)							
						if(!_.form.has('.'+_.invalidCl).length)
							$.ajax({
								type: "POST",
								url:_.mailHandlerURL,
								data:{
									name:_.getValFromLabel($('.name',_.form)),
									email:_.getValFromLabel($('.email',_.form)),
									phone:_.getValFromLabel($('.phone',_.form)),
									fax:_.getValFromLabel($('.fax',_.form)),
									state:_.getValFromLabel($('.state',_.form)),
									message:_.getValFromLabel($('.message',_.form)),
									owner_email:_.ownerEmail,
									stripHTML:_.stripHTML
								},
								success: function(){
									_.showFu()
								}
							})			
					},
					showFu:function(){
						_.success.slideDown(function(){
							setTimeout(function(){
								_.success.slideUp()
								_.form.trigger('reset')
							},_.successShow)
						})
					},
					controlsFu:function(){
						$(_.controls,_.form).each(function(){
							var th=$(this)
							th
								.bind('click',function(){
									_.form.trigger(th.data('type'))
									return false
								})
						})
					},
					showErrorFu:function(label){
						label.find('.'+_.errorCl).slideDown()
					},
					hideErrorFu:function(label){
						label.find('.'+_.errorCl).slideUp()
					},
					showEmptyFu:function(label){
						label.find('.'+_.emptyCl).slideDown()
						_.hideErrorFu(label)
					},
					hideEmptyFu:function(label){
						label.find('.'+_.emptyCl).slideUp()
					},
					init:function(){
						_.form=_.me						
						_.labels=$('label',_.form)

						_.preFu()
						
						_.controlsFu()
														
						_.form
							.bind('submit',function(){
								if(_.validate)
									_.submitFu()
								else
									_.form[0].submit()
								return false
							})
							.bind('reset',function(){
								_.labels.removeClass(_.invalidCl)									
								_.labels.each(function(){
									var th=$(this)
									_.hideErrorFu(th)
									_.hideEmptyFu(th)
								})
							})
						_.form.trigger('reset')
					}
				}
			_.me||_.init(_.me=th.data({forms:_}))
			typeof o=='object'
				&&$.extend(_,o)
		})
	}
})(jQuery)
$(window).load(function(){
	$('#contact-form').forms({
		ownerEmail:'MON MAIL ICI (mais je l'ai retirer pour le forum)'
	})
})


Je précise que c'est du code que j'ai trouver au fur et a mesure sur internet et que j'essaie de faire fonctionner t'en bien que mal ce petit chmilblique ...

Merci encore !
0
tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 219
30 mai 2012 à 16:24
if($_POST['name']!='nope')

$_POST['name'] n'existe pas dans votre formulaire
<input type="text" value="Nom :">

puisqu'il manque l'attribut name"" et il en va de même pour tout les élément de votre formulaire.


if($_POST['name']!='nope'){
		$messageBody .= '<p>Visitor: ' . $_POST["name"] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}

Là, votre code dit grosso modo que si $_POST['name'] est différent de 'nope', la variable $messageBody est égal à... comme les variables n'existent pas, il fait rien.
0
jimmy1120112 Messages postés 617 Date d'inscription mardi 30 novembre 2010 Statut Membre Dernière intervention 7 décembre 2014 54
30 mai 2012 à 16:53
J'ai bien compris le fait qu'il manque son égaux et qu'a cause de ça il ne fait rien.
Mais je ne voit pas ce que je doit ajouter dans le mailhandler (si c'est bien dans ce fichier que ce joue l'erreur) pour que la boucle ce fasse correctement ...

J'ai l'habitude de faire des formulaire autrement mais la nouvel hébergeur nouvelles méthodes ...

Merci !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lokakilo Messages postés 213 Date d'inscription dimanche 13 juillet 2008 Statut Membre Dernière intervention 20 juin 2013 14
31 mai 2012 à 00:13
Et bien ta oublié tous les "name" dans ton code html:
<input type="text" name="nom" value="Nom :" />

Dans les $_POST['nom'], le 'nom' est la valeur de la balise name, donc pour que le php comprenne ce que 'nom' est, il faut lui dire dans la balise <input /> que name='non' (ou name='mail', ... selon ce que tu veux).
0
jimmy1120112 Messages postés 617 Date d'inscription mardi 30 novembre 2010 Statut Membre Dernière intervention 7 décembre 2014 54
31 mai 2012 à 09:48
Bonjour,

D'accord, je fait ça et je vous tien au courant.

Merci !
0
donniecent Messages postés 19 Date d'inscription lundi 1 mars 2010 Statut Membre Dernière intervention 1 juin 2012 27
31 mai 2012 à 10:07
Bonjour, jimmy1120112, c'est exacte vous n'avez rajouté aucun champ name à vos input :

Vous devriez normalement avoir ce formulaire contact.php :

	    <article class="grid_12">
	      <h2 class="ind1"><span id="result_box" lang="fr">Entrer en contact</span></h2>
	      <form id="contact-form">
		<div class="success">Contact du site<br>
		      <strong>Nous serons bientôt en contact.</strong>
		  </div>
		<fieldset>
		  <label class="name">
			  <input type="text" name = "name" value="Nom :">
		      <span class="error">Le nom n'est pas valide</span> <span class="empty">Ce champs est requis</span>
		  </label>
		  <label class="phone">
			  <input type="text" name = "phone" value="Téléphone :">
		      <span class="error">Ce numéro de téléphone n'est pas valide</span> <span class="empty">Ce champs est requis</span>
		  </label>
		  <label class="email">
			  <input type="text" name = "email" value="E-mail :">
		      <span class="error">Votre adresse mail n'est pas valide</span> <span class="empty">Ce champs est requis</span>
		  </label>
		  <label class="message">
			  <textarea>Message :</textarea>
		      <span class="error">Votre message est trop court</span> <span class="empty">Ce champs est requis</span>
		  </label>
		  <div class="buttons2">
		      <a href="/" data-type="submit" class="link1">Envoyer</a>
		  </div>
		</fieldset>
	      </form>
	    </article>



0
Salut jimmy1120112,

As-tu fini par trouver une solution à ton problème, car il semblerait que je travaille sur le même formulaire de contact que le tien, et j'ai exactement le même souci !

Par avance, merci de ta réponse.
0
ReDLoG Messages postés 243 Date d'inscription mardi 12 mars 2013 Statut Membre Dernière intervention 28 octobre 2021 57
15 févr. 2014 à 23:15
Bonsoir,

Depuis le 30 mai 2012, on suppose qu'il a résolu son souci non?!
Evite de "déterrer" un sujet ancien, ouvre le tien, tu auras plus de chances qu'un helper te réponde... et pense à ajouter ton code "défaillant", c'est plus parlant que de dire "j'ai exactement le même souci".
Cdlt.
0