Recommander mon site à un ami

Objectif et prérequis

L'objectif de ce script est d'afficher un formulaire pour que vos visiteurs puissent envoyer l'URL de votre site avec, éventuellement, un mot personnalisé à un ami.

Prérequis :

  • Support du PHP et de la fonction mail
  • quelques connaissances en HTML
  • Un peu de logique !

Par sécurité, nous appliquerons 2 restrictions à ce formulaire :

  • La recommandation sera envoyée à un seul email (afin d'éviter le spam)
  • Un système anti spam sera ajouté au formulaire (donc le fichier antispam est requis).

Formulaire - HTML

Cette partie va permettre d'établir le formulaire en HTML. Pour ce faire, il faut d'abord savoir ce que l'on va demander au visiteur comme informations, et comment le traduire en HTML. N'hésitez pas à lire l'article sur les formulaires en HTML pour de plus amples détails.

Pour cet exemple, je vais demander ceci au visiteur :

  • Son nom, son email
  • Le nom, l'email du destinataire
  • Un message personnalisé éventuel
  • Les emails (expéditeur, destinataire) sont obligatoires. Le reste ne l'est pas.

Préparation du lien dans la page du site Web

Je vais insérer ce script sur une page de mon site. Pour l'avoir en popup, je fais un lien Javascript. Dans la section <head> de cette page, j'insère les lignes suivantes :

<head>
<title>Ma page de site Web</title>
<script type="text/javascript">
	function popUp(URL)
	{
		day = new Date();
		id = day.getTime();
		eval("page" + id + " = window.open(URL, '" + id + "',
		'toolbar=0, scrollbars=1, location=0, statusbar=0, menubar=0, resizable=1, width=700, height=700');");
	}
</script>
</head>

Dans ma page, je mets enfin un lien (dans le <body> cette fois) pour appeler la popup :

<p style="text-align:center;">
	<a href="javascript:popUp('recommander.php');">Recommander mon site Web super mega cool !</a>
</p>

Création de la page de recommandation

Cette page est intégralement en PHP. Vous pouvez copier tout le bloc PHP dans le <body> d'une page web "standard", celle-ci peut ainsi être personnalisée. Voici le code de recommander.php :

<!DOCTYPE html>
<!--[if IE 8 ]><html class="ie ie8" lang="fr"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!--><html lang="fr"> <!--<![endif]-->
<head>
	<meta charset="utf-8">
	<title>PHP-Astux.info - Recommander mon site</title>
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
</head>

<body>
<?php
	// Configuration basique du script

	// ETAPE 1 : renseignez les valeurs ci-dessous
	$subject = "Recommandation d'un site"; // sujet de l'email
	$url_site = 'http://www.php-astux.info'; // L'adresse de votre site
	$sitename = "PHP-Astux"; // nom de votre site
	$recevoir_copie = 'oui'; // si 'oui', vous recevrez une copie de chaque mail de recommandation
	$mon_mail = 'moi@monsite.ext'; // votre email pour recevoir les copies

	// ETAPE 2 : renseignez le chemin relatif vers le fichier antispam.php
	require_once('antispam.php'); // pour définir les questions et les réponses

	// C'EST TOUT :-)


	// Rec récupère un  message textuel
	function Rec($text)
	{
		$text = htmlspecialchars(trim($text), ENT_QUOTES);
		if (1 === get_magic_quotes_gpc())
		{
			$text = stripslashes($text);
		}

		$text = nl2br($text);
		return $text;
	}


	// IsEmail vérifie la syntaxe d'un email
	function IsEmail($email)
	{
		$value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email);
		return (($value === 0) || ($value === false)) ? false : true;
	}

	// Envoie le mail
	function SendRecommandMail($recipient, $subject, $message, $exp_nom, $exp_mail)
	{
		$headers  = 'From:'.$exp_nom.' <'.$exp_mail.'>' . "\r\n";
		$headers .= 'Reply-To: '.$exp_mail. "\r\n";
		$message = html_entity_decode($message);
		$message = str_replace(''',"'",$message);
		$message = str_replace('’',"'",$message);
		$message = str_replace('<br>','',$message);
		$message = str_replace('<br />','',$message);

		return mail($recipient,$subject,$message,$headers);
	}

	// récuperation des variables
	$origine_nom   = (isset($_POST['origine_nom']))   ? Rec($_POST['origine_nom']) : '';
	$origine_email = (isset($_POST['origine_email'])) ? Rec($_POST['origine_email']) : '';
	$desti_nom     = (isset($_POST['desti_nom']))     ? Rec($_POST['desti_nom']) : '';
	$desti_email   = (isset($_POST['desti_email']))   ? Rec($_POST['desti_email']) : '';
	$message       = (isset($_POST['message']))       ? Rec($_POST['message']) : '';
	$errform = false;

	// n'oublions pas les 2 variables du captcha :
	$code  = (isset($_POST['code']))  ? strtolower(Rec($_POST['code'])) : ''; // contient la réponse du visiteur
	$nospam_question = (isset($_POST['nospam_question'])) ? $_POST['nospam_question'] : ''; // contient un nombre : le numéro de la vraie réponse

	if (isset($_POST['submit'])) // formulaire validé, on le traite
	{
		// Vérification des emails
		$origine_email = (IsEmail($origine_email)) ? $origine_email : '';
		$desti_email = (IsEmail($desti_email)) ? $desti_email : '';

		// On demande la vraie réponse
		$verif_spam = NoSpamQuestion('ans', $nospam_question);

		// on compare la 'vraie' réponse et celle du visiteur
		if ($code != strtolower($verif_spam['answer']))
		{
			// le formulaire s'arrête ici
			echo '<p>Vous n\'avez pas répondu correctement à la question ....<br /><a href="javascript:window.close();">Fermer la fenêtre</a></p>'."\n";
		}
		else // code OK : c'est un humain
		{
			// valeurs obligatoires : mail de l'expéditeur, mail du destinataire.
			if (($origine_email != '') && ($desti_email != ''))
			{
				// les 2 emails sont remplis ... On peut envoyer ce qu'il faut !
				$final_message = 'Bonjour';

				// Ajout du nom du destinataire si existant :
				$final_message .= ($desti_nom != '') ? ' '.$desti_nom : '';

				// Ajout du nom de l'expéditeur si existant
				$final_message .= ($origine_nom != '') ? "\n".$origine_nom : "\nUn visiteur";

				// message générique
				$final_message .= ' voudrait vous recommander ce site : '.$url_site;

				// Ajout du message personnalisé si existant
				if ($message != '')
				{
					$final_message .= "\n\n-------------------------\nIl (Elle) a ajouté le message suivant :\n".nl2br(stripslashes($message));

				// Fin du contenu du mail
				$final_message .= "\nA bientôt sur ".$url_site."\nL'équipe d'administration.";

				// Envoi du message
				$exp_nom = $sitename;
				$exp_mail = $origine_email;
				if ($origine_nom != '')
				{
					$exp_nom = $origine_nom.' (depuis '.$sitename.')';
				};

				if ($recevoir_copie == 'oui')
					$destinataires = $desti_email.';'.$mon_mail;
				else
					$destinataires = $desti_email;

				$num_emails = 0;
				$tmp = explode(';', $destinataires);

				foreach($tmp as $email_destinataire)
				{
					if (SendRecommandMail($email_destinataire, $subject, $final_message, $exp_nom, $exp_mail))
					$num_emails++;
				}


				if ((($recevoir_copie == 'oui') && ($num_emails == 2)) || (($recevoir_copie == 'non') && ($num_emails == 1)))
				{
					echo '<p>Votre message est bien parti, merci d\'avoir recommandé ce site !</p>'."\n";
				}
				else
				{
					echo '<p>Votre message n\'a pu être envoyé : il y a une erreur au niveau du sereveur de mail. Veuillez nous excuser et réessayer sous peu, cela sera vite réparé.</p>'."\n";
				};

				echo '<p style="text-align:center;"><a href="javascript:window.close();">Fermer la fenêtre !</a></p>'."\n";
			}
			else
			{
				$errform = true;
			};
		};
	};


	if ($errform)
	{
		echo '<p>Vous avez fait une erreur dans la saisie du formulaire... Vérfiez que vous ayiez bien mis un seul email de destination et que le vôtre soit correctement écrit.</p>';
	};



	if ((!isset($_POST['submit'])) || ($errform)) // formulaire non validé ou avec une erreur
	{
		// on tire au sort une question
		$nospam = NoSpamQuestion();

		echo '<form id="recommander" method="post" action="?">
			<fieldset><legend>A propos de vous ...</legend>
				<p><label for="origine_nom">Votre nom :</label><input type="text" id="origine_nom" name="origine_nom" value="'.$origine_nom.'" /></p>
				<p><label for="origine_email">Votre email* :</label><input type="text" id="origine_email" name="origine_email" value="'.$origine_email.'" /></p>
			</fieldset>

			<fieldset><legend>Envoyer à ...</legend>
				<p><label for="desti_nom">Nom du destinataire :</label><input type="text" id="desti_nom" name="desti_nom" value="'.$desti_nom.'" /></p>
				<p><label for="desti_email">Email du destinataire* :</label><input type="text" id="desti_email" name="desti_email" value="'.$desti_email.'" /></p>
			</fieldset>

			<fieldset><legend>Message + Contrôle</legend>
				<p><label for="message">Ajouter un message perso ?</label><textarea id="message" cols="35" rows="8" name="message">'.$message.'</textarea></p>
				<p><label for="code">Ecrivez en LETTRES le résultat* : '.$nospam['question'].'</label><input type="text" name="code" id="code" /><input type="hidden" name="nospam_question" value="'.$nospam['num'].'" /></p>
			</fieldset>
			<div style="text-align:center;"><input type="submit" name="submit" value="Envoyer mon mail !" /></div>
		</form>
		<p style="font-style:italic;">* Les champs marqués d\'une astérisque sont obligatoires.</p>';
	};
?>
</body>
</html>

Télécharger le fichier recommander.php Clic droit, enregistrer la cible sous > recommander.php