11498 sujets

JavaScript, DOM et API Web HTML5

Pages :
Bonjour,

Je suis en train de refaire entièrement mon site web et j'ai un problème avec mon formulaire de contact.
J'ai intégré celui-ci dans mon site est ai intégré le fichier php du formulaire mais lorsque je teste d'envoyer un mail via ce formulaire rien ne se passe (ni message d'erreur si je n'ai pas rentré d'adresse mail, ni "merci" si j'ai bien rempli tous les champs).
J'ai passé pas mal de temps à voir d'où cela pourrait venir mais je ne vois vraiment pas et je suis donc bloqué…

Voici le code HTML du formulaire de contact :


<!-- Contact Form -->
    <div class="row">
    	<div class="span9">
        
        	<form id="contact-form" class="contact-form" action="#">
            	<p class="contact-name">
            		<input id="contact_name" type="text" placeholder="Full Name" value="" name="name" />
                </p>
                <p class="contact-email">
                	<input id="contact_email" type="text" placeholder="Email Address" value="" name="email" />
                </p>
                <p class="contact-message">
                	<textarea id="contact_message" placeholder="Your Message" name="message" rows="15" cols="40"></textarea>
                </p>
                <p class="contact-submit">
                	<a id="contact-submit" class="submit" href="#">Send Your Email</a>
                </p>
                
                <div id="response">
                
                </div>
                
            </form>
         
        </div>
                
        <div class="span3">
        	<div class="contact-details">
        		<h3>Contact Details</h3>
                <ul>
                    <li><a href="mailto:******@gmail.com">******@gmail.com</a></li>
                    <li>Phone: 06 07 08 09 10</li>
                </ul>
            </div>
        </div>
    </div>
    <!-- End Contact Form -->


Ainsi que le code php du formulaire :


<?php
/*
* Contact Form Class
*/


header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

$admin_email = '******@gmail.com'; // Your Email
$message_min_length = 5; // Min Message Length


class Contact_Form{
	function __construct($details, $email_admin, $message_min_length){
		
		$this->name = stripslashes($details['name']);
		$this->email = trim($details['email']);
		$this->subject = 'Contact from Your Website'; // Subject 
		$this->message = stripslashes($details['message']);
	
		$this->email_admin = $email_admin;
		$this->message_min_length = $message_min_length;
		
		$this->response_status = 1;
		$this->response_html = '';
	}


	private function validateEmail(){
		$regex = '/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i';
	
		if($this->email == '') { 
			return false;
		} else {
			$string = preg_replace($regex, '', $this->email);
		}
	
		return empty($string) ? true : false;
	}


	private function validateFields(){
		// Check name
		if(!$this->name)
		{
			$this->response_html .= '<p>Please enter your name</p>';
			$this->response_status = 0;
		}

		// Check email
		if(!$this->email)
		{
			$this->response_html .= '<p>Please enter an e-mail address</p>';
			$this->response_status = 0;
		}
		
		// Check valid email
		if($this->email && !$this->validateEmail())
		{
			$this->response_html .= '<p>Please enter a valid e-mail address</p>';
			$this->response_status = 0;
		}
		
		// Check message length
		if(!$this->message || strlen($this->message) < $this->message_min_length)
		{
			$this->response_html .= '<p>Please enter your message. It should have at least '.$this->message_min_length.' characters</p>';
			$this->response_status = 0;
		}
	}


	private function sendEmail(){
		$mail = mail($this->email_admin, $this->subject, $this->message,
			 "From: ".$this->name." <".$this->email.">\r\n"
			."Reply-To: ".$this->email."\r\n"
		."X-Mailer: PHP/" . phpversion());
	
		if($mail)
		{
			$this->response_status = 1;
			$this->response_html = '<p>Thank You!</p>';
		}
	}


	function sendRequest(){
		$this->validateFields();
		if($this->response_status)
		{
			$this->sendEmail();
		}

		$response = array();
		$response['status'] = $this->response_status;	
		$response['html'] = $this->response_html;
		
		echo json_encode($response);
	}
}


$contact_form = new Contact_Form($_POST, $admin_email, $message_min_length);
$contact_form->sendRequest();

?>


Si jamais quelqu'un voyait d'où vient l'erreur ou avait une solution pour que mon formulaire puisse fonctionner, je vous en saurai vraiment très reconnaissant car je bloque vraiment depuis hier soir… Smiley ohwell

Merci d'avance,

Paul
Modifié par PoX (08 Aug 2013 - 17:58)
desolé je me suis mal expliqué c'est ton submit qui pose probléme rajoute du code :
////

<p class="contact-submit">
<a id="contact-submit" class="submit" href="#">Send Your Email</a>
<input type="submit" value="envoyer" />
</p>

///

un input qui fait submit et regarde qd tu cliques sur ce nouveau bouton ce que ca donne..
essaie de copier exclusivement le code de ton script php pour le mail dans une page email.php par exemple et redirige ton action dessus .... tu auras déja je penses un élément de réponse ...

ha et au cas ou tu as une erreur javascript dans ta page

TypeError: Placeholders.init is not a function
[Stopper sur une erreur] 	

textColor: "#999"

Modifié par tazzkiller (09 Aug 2013 - 16:38)
Déjà, c'est parce que tu utilises un lien au lieu d'un <input>/<button> de type "submit" donc il faut changer

<a id="contact-submit" class="submit" href="#">Send Your Email</a>

qui n'a pas beaucoup de sens d'ailleurs, par

<input type=submit name=envoyer />

par exemple.
Puis ce qui manque, c'est la vérification que l'utilisateur a bien actionné l'envoi du formulaire, donc ajouter

if (isset($_POST["envoi"])) {
   $contact_form->sendRequest();
}

Ce qui devrait marcher.
Ah, et en effet, le formulaire est appelé en javascript, dont voici le code :


/* ==================================================
   Contact Form
================================================== */

POX.contactForm = function(){
	$("#contact-submit").on('click',function() {
		$contact_form = $('#contact-form');
		
		var fields = $contact_form.serialize();
		
		$.ajax({
			type: "POST",
			url: "_include/php/contact.php",
			data: fields,
			dataType: 'json',
			success: function(response) {
				
				if(response.status){
					$('#contact-form input').val('');
					$('#contact-form textarea').val('');
				}
				
				$('#response').empty().html(response.html);
			}
		});
		return false;
	});
}


Je ne sais pas si l'erreur vient de là du coup… Smiley ohwell
Modifié par PoX (10 Aug 2013 - 19:26)
comme je disais, mettre un input pour submit avec un bouton envoyer...
modifier le code lors de l'envoi du send mail
//mon code change $_POST déja par $_REQUEST pour voir

if(!empty($_REQUEST)){
print_r($_REQUEST);
$contact_form = new Contact_Form($_REQUEST, $admin_email, $message_min_length);
$contact_form->sendRequest();
}else{

le code du formulaire....

puis fermer l'accolade du else

chez moi ca roule...
mon code..
<?php
/*
* Contact Form Class
*/


header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

$admin_email = '******@gmail.com'; // Your Email
$message_min_length = 5; // Min Message Length


class Contact_Form{

function __construct($details, $email_admin, $message_min_length){

$this->name = stripslashes($details['name']);
$this->email = trim($details['email']);
$this->subject = 'Contact from Your Website'; // Subject
$this->message = stripslashes($details['message']);

$this->email_admin = $email_admin;
$this->message_min_length = $message_min_length;

$this->response_status = 1;
$this->response_html = '';
}


private function validateEmail(){
$regex = '/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i';

if($this->email == '') {
return false;
} else {
$string = preg_replace($regex, '', $this->email);
}

return empty($string) ? true : false;
}


private function validateFields(){
// Check name
if(!$this->name)
{
$this->response_html .= '<p>Please enter your name</p>';
$this->response_status = 0;
}

// Check email
if(!$this->email)
{
$this->response_html .= '<p>Please enter an e-mail address</p>';
$this->response_status = 0;
}

// Check valid email
if($this->email && !$this->validateEmail())
{
$this->response_html .= '<p>Please enter a valid e-mail address</p>';
$this->response_status = 0;
}

// Check message length
if(!$this->message || strlen($this->message) < $this->message_min_length)
{
$this->response_html .= '<p>Please enter your message. It should have at least '.$this->message_min_length.' characters</p>';
$this->response_status = 0;
}
}


private function sendEmail(){
$mail = mail($this->email_admin, $this->subject, $this->message,
"From: ".$this->name." <".$this->email.">\r\n"
."Reply-To: ".$this->email."\r\n"
."X-Mailer: PHP/" . phpversion());

if($mail)
{
$this->response_status = 1;
$this->response_html = '<p>Thank You!</p>';
}
}


function sendRequest(){
$this->validateFields();
if($this->response_status)
{
//$this->sendEmail();
echo 'mail envoyé';
}

$response = array();
$response['status'] = $this->response_status;
$response['html'] = $this->response_html;

echo json_encode($response);
}
}

if(!empty($_REQUEST)){
print_r($_REQUEST);
$contact_form = new Contact_Form($_REQUEST, $admin_email, $message_min_length);
$contact_form->sendRequest();
}else{

?>



<!-- Contact Form -->
<div class="row">
<div class="span9">

<form id="contact-form" class="contact-form" action="#" >
<p class="contact-name">
<input id="contact_name" type="text" placeholder="Full Name" value="" name="name" />
</p>
<p class="contact-email">
<input id="contact_email" type="text" placeholder="Email Address" value="" name="email" />
</p>
<p class="contact-message">
<textarea id="contact_message" placeholder="Your Message" name="message" rows="15" cols="40"></textarea>
</p>
<p class="contact-submit">
<a id="contact-submit" class="submit" href="#">Send Your Email</a>
<input type="submit" value="envoyer" />
</p>

<div id="response">

</div>

</form>

</div>

<div class="span3">
<div class="contact-details">
<h3>Contact Details</h3>
<ul>
<li><a href="mailto:******@gmail.com">******@gmail.com</a></li>
<li>Phone: 06 07 08 09 10</li>
</ul>
</div>
</div>
</div>
<!-- End Contact Form -->

<?php }
?>
Ton php renvois l'erreur suivante:

<br />
<b>Parse error</b>:  syntax error, unexpected T_IF, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in <b>/mnt/171/sda/1/9/pox.paul/_include/php/contact.php</b> on line <b>30</b><br />


je sais pas trop quelle version tu as en ligne actuellement donc c'est dur d'aider plus que ca. Au pire remet ici la dernière version de ton code php qu'on regarde.
Voici donc le lien du site.

Ainsi que les différents codes du formulaire :

HTML


<!-- Contact Form -->
    <div class="row">
    	<div class="span9">
        
        	<form id="contact-form" class="contact-form" action="#">
            	<p class="contact-name">
            		<input id="contact_name" type="text" placeholder="Full Name" value="" name="name" />
                </p>
                <p class="contact-email">
                	<input id="contact_email" type="text" placeholder="Email Address" value="" name="email" />
                </p>
                <p class="contact-message">
                	<textarea id="contact_message" placeholder="Your Message" name="message" rows="15" cols="40"></textarea>
                </p>
                <p class="contact-submit">
                	<a id="contact-submit" class="submit" href="#">Send Your Email</a>
                	<input type=submit value=Send />
                </p>
                
                <div id="response">
                
                </div>
                
            </form>
         
        </div>
                
        <div class="span3">
        	<div class="contact-details">
        		<h3>Contact Details</h3>
                <ul>
                    <li><a href="mailto:pox.paul@gmail.com">pox.paul@gmail.com</a></li>
                    <li>Phone: 06 88 63 61 78</li>
                </ul>
            </div>
        </div>
    </div>
    <!-- End Contact Form -->


PHP


<?php
/*
* Contact Form Class
*/


header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

$admin_email = 'pox.paul@gmail.com'; // Your Email
$message_min_length = 5; // Min Message Length


class Contact_Form{
	function __construct($details, $email_admin, $message_min_length){
		
		$this->name = stripslashes($details['name']);
		$this->email = trim($details['email']);
		$this->subject = 'Contact from Your Website'; // Subject 
		$this->message = stripslashes($details['message']);
	
		$this->email_admin = $email_admin;
		$this->message_min_length = $message_min_length;
		
		$this->response_status = 1;
		$this->response_html = '';
	}
	
		if (isset($_POST["envoi"])) {
		$contact_form->sendRequest();
		}


	private function validateEmail(){
		$regex = '/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i';
	
		if($this->email == '') { 
			return false;
		} else {
			$string = preg_replace($regex, '', $this->email);
		}
	
		return empty($string) ? true : false;
	}


	private function validateFields(){
		// Check name
		if(!$this->name)
		{
			$this->response_html .= '<p>Please enter your name</p>';
			$this->response_status = 0;
		}

		// Check email
		if(!$this->email)
		{
			$this->response_html .= '<p>Please enter an e-mail address</p>';
			$this->response_status = 0;
		}
		
		// Check valid email
		if($this->email && !$this->validateEmail())
		{
			$this->response_html .= '<p>Please enter a valid e-mail address</p>';
			$this->response_status = 0;
		}
		
		// Check message length
		if(!$this->message || strlen($this->message) < $this->message_min_length)
		{
			$this->response_html .= '<p>Please enter your message. It should have at least '.$this->message_min_length.' characters</p>';
			$this->response_status = 0;
		}
	}


	private function sendEmail(){
		$mail = mail($this->email_admin, $this->subject, $this->message,
			 "From: ".$this->name." <".$this->email.">\r\n"
			."Reply-To: ".$this->email."\r\n"
		."X-Mailer: PHP/" . phpversion());
	
		if($mail)
		{
			$this->response_status = 1;
			$this->response_html = '<p>Thank You!</p>';
		}
	}


	function sendRequest(){
		$this->validateFields();
		if($this->response_status)
		{
			$this->sendEmail();
		}

		$response = array();
		$response['status'] = $this->response_status;	
		$response['html'] = $this->response_html;
		
		echo json_encode($response);
	}
}


$contact_form = new Contact_Form($_POST, $admin_email, $message_min_length);
$contact_form->sendRequest();

?>


JAVASCRIPT


/* ==================================================
   Contact Form
================================================== */

POX.contactForm = function(){
	$("#contact-submit").on('click',function() {
		$contact_form = $('#contact-form');
		
		var fields = $contact_form.serialize();
		
		$.ajax({
			type: "POST",
			url: "_include/php/contact.php",
			data: fields,
			dataType: 'json',
			success: function(response) {
				
				if(response.status){
					$('#contact-form input').val('');
					$('#contact-form textarea').val('');
				}
				
				$('#response').empty().html(response.html);
			}
		});
		return false;
	});
}
Muep, c'est mieux avec l'indentation.

La vérification de requete php, tu peux pas la mettre en plein milieu de ta classe. Donc le
if (isset($_POST["envoi"])) {
		$contact_form->sendRequest();
		}

ligne 30-32, tu le supprimes, et tout à la fin, tu remplaces

$contact_form = new Contact_Form($_POST, $admin_email, $message_min_length);
$contact_form->sendRequest();

par


if (isset($_POST["envoi"])) {
$contact_form = new Contact_Form($_POST, $admin_email, $message_min_length);
		$contact_form->sendRequest();
		}


Je ne sais pas si ca suffira à résoudre le problème mais ça régleras au moins cette erreur php.

edit coquille.
Modifié par sephitan (12 Aug 2013 - 15:26)
Merci.
Je viens d'essayer mais ça ne change rien au niveau de l'envoi du formulaire. (J'ai mis en ligne la dernière version à jour.)
Erreur suivante :

<br />
<b>Parse error</b>:  syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in <b>/mnt/171/sda/1/9/pox.paul/_include/php/contact.php</b> on line <b>31</b><br />


A vue de nez, ça doit correspondre entre temps à

private function validateEmail...


Comme ça la, je dirais que c'est un problème de version de php, les directives private datant de je-sais-plus-quand-mais-pas-trop-longtemps. Donc soit il faut forcer une version plus récente de php (généralement ca se fais via des fichiers htaccess, mais ça dépend des hébergeurs), soit rendre ton code compatible avec la version de php que tu utilises.

Ces erreurs de syntaxe, tu peux les détecter en allant directement sur ton fichier php.. Ou alors avec le panneau réseau des outils de dev pour chrome.
Le truc en plus, c'est que le formulaire fonctionnait à la base, mais quand je l'héberge sur mon site (free), il ne fonctionne plus. Pourtant je suis allé vérifier et Free autorise bien PHP 4 et 5 ainsi que la fonction mail() donc c'est pour ça que je ne vois pas vraiment d'où cela peut venir.

Et comme je suis franchement une bille en php et js, ben je n'arrive pas trop à m'en sortir tout seul. Smiley ohwell
C'est pas parce qu'ils autorisent les deux que les 2 sont activés par défaut Smiley smile . Tu peux voir quelle version de php est activé en mettant

phpinfo();


A peu près n'importe ou dans une page php, et en visiant la page. Je pense (mais j'ai pas vérifié) que free est en php 4 par défaut, et que ton script à besoin de php 5. Comme dit, ca doit s'activer via un fichier htaccess, google te donneras les détails spécifiques aux hébergements free.
Je suis en train de regarder comment forcer PHP5 via un fichier .htaccess.
Merci beaucoup pour l'aide en tout cas, je reviendrai poster quand j'aurai pu essayer et voir si ça fonctionne. Smiley smile
Pages :