Bonjour à tous,
Je n'arrive pas à créer un Token de sécurité pour mon formulaire de contact
Voici le HTML et le PHP
Merci d'avance.
Je n'arrive pas à créer un Token de sécurité pour mon formulaire de contact
Voici le HTML et le PHP
<!-------------------- HTML -------------------------->
<?php
//On démarre les sessions
session_start();
//On génére un jeton totalement unique
$tokenID = md5(uniqid(microtime(), true) + time());
//Et on le stocke
$_SESSION['tokenID'] = $tokenID;
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-FR" lang="fr-FR" prefix="og: http://ogp.me/ns#" class="no-js">
<head>
<title>Me contacter | Jean</title>
</head>
<body>
<div role="form" class="navsac-form" id="nasandse-form" lang="fr-FR" dir="ltr">
<form action="navsac.php" method="post" id="nasandse-form" class="navsac-form navsac" autocomplete="off">
<div class="nasa-form" class="clearfix">
<input type="hidden" name="tokenID" value="<?php echo $tokenID;?>">
<div class="se-form">
<div class="form-col">Nom<br />
<span class="nasandse-input name"><input type="text" name="name" value="" size="40" class="nasa-input name" required /></span></div>
</div>
<div class="se-form">
<div class="form-col">E-mail<br />
<span class="nasandse-input email"><input type="email" name="email" value="" size="40" class="nasa-input mel" required /></span></div>
</div>
<div class="se-form">
<div class="form-col-full">Message<br />
<span class="nasandse-input message"><textarea name="message" value="" cols="40" rows="10" class="nasa-input msg" required /></textarea></span></div>
</div>
<div class="se-form">
<div class="form-col-full">
<input type="submit" value="Envoyer" id="submit" class="nasa-input button" /></div>
</div>
</div>
</form>
</div>
</body>
</html>
<!-------------------------- Traitement du formulaire -------------------->
<?php
if ( 'POST' != $_SERVER['REQUEST_METHOD'] ) {
header('Allow: POST');
header('HTTP/1.1 405 Method Not Allowed');
header('Content-Type: text/plain');
exit;
}
session_start();
/**
* [Sécurise les champs du formulaire qui ne doivent pas contenir de html]
*/
function mailCleanChamps($champ) {
return htmlentities(trim(strip_tags(stripslashes($champ))), ENT_NOQUOTES, "UTF-8");
}
/**
* [Sécurise les champs de texte du formulaire susceptibles de contenir du html (textareas)]
*/
function mailCleanMessage($champ) {
return strip_tags(htmlentities(trim(stripslashes($champ)), ENT_NOQUOTES, "UTF-8"));
}
/**
* [Vérifie le token de sécurité du formulaire]
*/
function mailCheckToken($tokenID) {
if ($tokenID === null || !isset($_SESSION['tokenID']) || !isset($tokenID) || $_SESSION['tokenID'] !== $tokenID)
return false;
else
return true;
}
$Nom = isset($_POST['name']);
$Email = isset($_POST['email']);
$Message = isset($_POST['message']);
$tokenID = $_POST['tokenID'];
$_SESSION['mailChamps'] = [
'name' => $Nom,
'email' => $Email,
'message' => $Message
];
$retour = array();
// Si le champ nom est vide
if (empty($Nom)) :
$retour = array(
'error' => true,
'title' => 'Champ manquant',
'content' => 'Veuillez remplir le champ « Nom ».',
'type' => 'alert'
);
// Si le champ message est vide
elseif (empty($Message)) :
$retour = array(
'error' => true,
'title' => 'Champ manquant',
'content' => 'Veuillez remplir le champ « Message ».',
'type' => 'alert'
);
// Si le champ email est vide ou ne correspond pas à la syntaxe requise de type xxxx@xxxx.xxx
elseif (empty($Email) || !filter_var($Email, FILTER_VALIDATE_EMAIL)) :
$retour = array(
'error' => true,
'title' => 'Champ manquant',
'content' => 'Votre adresse e-mail n\'est pas complète.',
'type' => 'alert'
);
$fomulaireErreurs = array_filter($retour);
if (empty($fomulaireErreurs)) :
$mailDestinataire = 'jean.mel@gmail.com';
$mailContenu = array();
$mailContenu[] = 'Nom : '.$Nom.'<br />';
$mailContenu[] = 'Mail : '.$Email.'<br />';
$mailContenu[] = '<br />Message : <br />'.$Message;
$mailContenu = join($mailContenu);
$mailObjet = 'Jean - mel de '.$Nom;
$mailHeaders = 'From: jean<jean@domain.fr>'."\n";
$mailHeaders .= 'Reply-To: '.$Email."\n";
$mailHeaders .= 'MIME-Version: 1.0'."\n";
$mailHeaders .= 'Content-type: text/html; charset="utf-8"'."\n";
$mailHeaders .= 'Content-Transfer-Encoding: 8bit'."\n";
// Envoi du mail
if (mail($mailDestinataire, $mailObjet, $mailContenu, $mailHeaders)) :
$retour = array(
'title' => 'Envoi réussi',
'content' => 'Merci '.$Nom.' ! Votre mel a été envoyé. Vous recevrez une réponse dès que possible !',
'type' => 'success'
);
unset($_SESSION['mailChamps']);
else :
$retour = array(
'title' => 'Erreur d\'envoi',
'content' => 'Une erreur s\'est produite lors de l\'envoi de l\'mel. Merci de réessayer plus tard',
'type' => 'alert'
);
endif;
endif;
echo json_encode($retour);
Merci d'avance.