Formulaire de contact

Fermé
zhyrmar - 7 juin 2015 à 02:12
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 8 juin 2015 à 14:20
Bonjour,

Je ne m'y connais pas vraiment en php. J'ai trouvé sur le net un formulaire de contact, il fonctionne très bien, sauf les messages d'erreurs/confirmation d'envoi. Que l'envoi fonctionne ou non, rien n'apparaît.

Pourriez-vous m'aider en me disant ce qui cloche svp?
Merci!

<?php
/*
Credits: Bit Repository
URL: http://www.bitrepository.com/
*/

// change this email address to your own email id.
define("CONTACT_EMAIL", '***@***');

function ValidateEmail($email)
	{
	/*
	(Name) Letters, Numbers, Dots, Hyphens and Underscores
	(@ sign)
	(Domain) (with possible subdomain(s) ).
	Contains only letters, numbers, dots and hyphens (up to 255 characters)
	(. sign)
	(Extension) Letters only (up to 10 (can be increased in the future) characters)
	*/

	$regex = '/([a-z0-9_.-]+)'. # name

	'@'. # at

	'([a-z0-9.-]+){2,255}'. # domain & possibly subdomains

	'.'. # period

	'([a-z]+){2,10}/i'; # domain extension 

	if($email == '') { 
			return false;
		}
		else {
			$eregi = preg_replace($regex, '', $email);
	}

	return empty($eregi) ? true : false;
} // end function ValidateEmail



error_reporting (E_ALL ^ E_NOTICE);

$post = (!empty($_POST)) ? true : false;

if($post) {
	//include 'functions.php';

	$name = stripslashes($_POST['name']);
	$email = trim($_POST['email']);
	$subject = stripslashes($_POST['subject']);
	$message = stripslashes($_POST['message']);

	$error = '';

	// Check name
	if(!$name) {
		if (!$error) $error .= '';
		$error .= 'Please enter your name. <br />';
	}

	// Check email

	if(!$email) {
		if (!$error) $error .= '';
		$error .= 'Please enter an e-mail address. <br />';
	}

	if($email && !ValidateEmail($email)) {
		if (!$error) $error .= '';	
		$error .= 'Please enter a valid e-mail address. <br />';
	}

	// Check message (length)

	if(!$message) {
		if (!$error) $error .= '';	
		$error .= "Please enter your message. <br />";
	}


		if(!$error) {
		$mail = mail(CONTACT_EMAIL, $subject, $message,
			 "From: ".$name." <".$email.">\r\n"
			."Reply-To: ".$email."\r\n"
			."X-Mailer: PHP/" . phpversion());


		if($mail) {
			echo '<div class="secondary alert">Thank you for you enquiry. We will be in touch shortly.</div>';
		} else {
			echo '<div class="danger alert">Email was not send. Error! Please Try again.</div>';
		}

	}
	else
	{
		$error .= '';
		echo '<div class="danger alert">'.$error.'</div>';
	}

}
?>

1 réponse

hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
7 juin 2015 à 22:09
Bonsoir,

Après quelques test, il s'avèrent que cette ligne pose problème :
$post = (!empty($_POST)) ? true : false;


Il faut la remplacer par :
$post = (isset($_POST)) ? true : false;
1
J'ai apporté la modification, mais rien n'a changé...

Est-ce que le problème viendrait de la partie html de mon formulaire?



<form method="post" action="#" id="contact-form">
<ul class="ul-formulaire">
<li>
<p>
Tous les champs sont obligatoires.
</p>
</li>
<li class="field formulaire"><input class="input" type="text" placeholder="Nom" name="name" id="your-name"></li>
<li class="field formulaire"><input class="input" type="text" placeholder="Prénom" name="subject" id="your-subject"></li>
<li class="field formulaire"><input class="input" type="email" placeholder="Courriel" name="email" id="your-email"></li>
<li class="field formulaire"><textarea style="max-width:100%;" class="input textarea" placeholder="Votre message" rows="4" name="message" id="your-message"></textarea></li>
<li>
<!-- submit button -->
<input value="Envoyer" class="purple submit" id="submit" name="submit" type="submit">
</li>
</ul>
</form>


Merci de votre aide!
0
pierre_baine Messages postés 17 Date d'inscription dimanche 7 juin 2015 Statut Membre Dernière intervention 8 juin 2015 12
8 juin 2015 à 02:36
Un empty() sur un post qui est array est effectivement absurde.

ajoute dans <form> la balise <input type="hidden" name="send" value="1" /> , ensuite dans ton code remplace:

$post = (!empty($_POST)) ? true : false;

if($post) {


par:

if($_POST['send'] == '1') {
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524 > pierre_baine Messages postés 17 Date d'inscription dimanche 7 juin 2015 Statut Membre Dernière intervention 8 juin 2015
8 juin 2015 à 11:36
La fonction empty() peut être utilisé sur un tableau pour vérifier que celui-ci est vide : https://www.php.net/manual/fr/function.empty.php#refsect1-function.empty-returnvalues

Par contre empty() ou isset() retourne déjà TRUE ou FALSE, donc pas besoin de condition ternaire pour récupérer ce booléen ;)
0
pierre_baine Messages postés 17 Date d'inscription dimanche 7 juin 2015 Statut Membre Dernière intervention 8 juin 2015 12 > Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022
8 juin 2015 à 12:31
Merci pour la précision, j'aurais personnellement utilisé isset ou count pour vérifier cela.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
8 juin 2015 à 14:20
Pour être encore plus précis et faire plus simple, si on veux simplement savoir si un tableau est vide il suffit de faire :
if ($monTableau)


En effet un tableau vide équivaut à FALSE lors d'une conversion en booléen :)
https://www.php.net/manual/fr/language.types.boolean.php#language.types.boolean.casting
0