Skip to content

Instantly share code, notes, and snippets.

@Hullaballo2001
Created November 7, 2021 23:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Hullaballo2001/e6303e73cad17d8e00684b1911a6d2f6 to your computer and use it in GitHub Desktop.
Save Hullaballo2001/e6303e73cad17d8e00684b1911a6d2f6 to your computer and use it in GitHub Desktop.
Quête_PHP_Avancée : Les formulaires en PHP - 2. Sécurisation
<!DOCTYPE HTML>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>First Ever</title>
<head>
<body>
<form action="traitement_form.php" method="post" autocomplete="on">
<fieldset>
<legend>INFORMATIONS UTILISATEUR</legend>
<br>
<br>
<label for="nom">Nom :</label>
<input type="text" id="nom" name="user_last_name" required>
<label for="prenom">Prénom :</label>
<input type="text" id="prenom" name="user_first_name" required>
<br>
<br>
<label for="telephone">Téléphone :</label>
<input type="text" id="telephone" name="user_phone" required>
<br>
<br>
<label for="courriel">Courriel :</label>
<input type="email" id="courriel" name="user_email" required>
<br>
<br>
</fieldset>
<br>
<fieldset>
<legend>MESSAGE</legend>
<br>
<label for="sujet">Sujet :</label>
<select id="sujet" name="message_subject" required>
<option value=""> Choisissez le sujet de votre message</option>
<optgroup label="Inscription">
<option value="1">Je n'arrive pas à m'inscrire</option>
<option value="2">Reporter un bug</option>
<option value="3">Autre concernant l'inscription</option>
</optgroup>
<optgroup label="Autres">
<option value="4">Je ne m'en souviens plus</option>
<option value="5">Je ne suis pas content et je le dis</option>
<option value="6">Je suis content et je le dis</option>
<option value="7">Autre sujet</option>
</optgroup>
<optgroup label="Gestion des données personnelles">
<option value="8">Demande d'effacement des données personnelles</option>
</optgroup>
</select>
<br>
<br>
<label for="message">Message :</label>
<textarea id="message" name="user_message" rows= "5" cols="40" placeholder="Votre message ..." required></textarea>
<br>
<br>
</fieldset>
<br>
<button type="submit">Envoyer votre message</button>
<button type="reset">Effacer le formulaire</button>
</form>
<body>
<html>
<!DOCTYPE html>
<html>
<head>
<title>Page de traitement</title>
<meta charset="utf-8">
</head>
</html>
<?php
// Tests inputs utilisateur : non vides et valides
// variables
// $firstNameErr = $lastNameErr = $telErr = $emailErr = $subjectErr = $userMessageErr = "";
$errorMessage = "";
$firstName = $lastName = $telephone = $email = $userMessage = $subjectList = $subjectLabel = "";
$subjectIndex = 0;
if ($_SERVER["REQUEST_METHOD"] === "POST" )
{
// Fonction pour sécuriser l'input en ôtant les caractères suspects
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
// Nom
if (empty($_POST['user_last_name']))
{
$errorMessage = "Veuillez renseigner votre nom";
echo $errorMessage;
}
else
{
$lastName = test_input($_POST['user_last_name']);
// check si le nom ne contient que des lettres et des espaces
if (!preg_match("/^[a-zA-Z-' ]*$/",$lastName))
{
$errorMessage = "Nom : Uniquement lettres et espaces autorisés";
echo "<br>";
echo $errorMessage;
}
}
// Prénom
if (empty($_POST['user_first_name']))
{
$errorMessage = "Veuillez renseigner votre prénom";
echo "<br>";
echo $errorMessage;
}
else
{
$firstName = test_input($_POST['user_first_name']); // avec la fonction test_input
// check si le prénom ne contient que des lettres et des espaces
if (!preg_match("/^[a-zA-Z-' ]*$/",$firstName))
{
$errorMessage = "Prénom : Uniquement lettres et espaces autorisés";
echo "<br>";
echo $errorMessage;
}
}
// Telephone
if (empty($_POST['user_phone']))
{
$errorMessage = "Veuillez renseigner votre numéro de téléphone";
echo "<br>";
echo $errorMessage;
}
else
{
$telephone = $_POST['user_phone'];
// check si tél ne contient que des chiffres, espaces et -
if (!preg_match ( " #^[0-9]{2}[-/ ]?[0-9]{2}[-/ ]?[0-9]{2}[-/ ]?[0-9]{2}[-/ ]?[0-9]{2}?$# " , $telephone))
{
$errorMessage = "Format de numéro de téléphone invalide";
echo "<br>";
echo $errorMessage;
}
}
// Email
if (empty($_POST['user_email']))
{
$errorMessage = "Veuillez renseigner votre email";
echo "<br>";
echo $errorMessage;
}
else
{
$email = $_POST['user_email'];
// check si l'adresse mail est bien formatée
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
$errorMessage = "Format d'adresse mail invalide";
echo "<br>";
echo $errorMessage;
}
}
// Sujet du message *select*
if ($_POST['message_subject'] = "")
{
$errorMessage = "Veuillez sélectionner le sujet de votre message dans la liste";
echo "<br>";
echo $errorMessage;
}
else
{
$subjectIndex = $_POST['message_subject'];
settype($subjectIndex, "integer");
$subjectIndex -= $subjectIndex;
$subjectList = ["Je n'arrive pas à m'inscrire", "Reporter un bug", "Autre concernant l'inscription", "Je ne m'en souviens plus", "Je ne suis pas content et je le dis", "Je suis content et je le dis", "Autre sujet", "Demande d'effacement des données personnelles"];
$subjectLabel = $subjectList [$subjectIndex];
}
// Message
if (empty($_POST['user_message']))
{
$errorMessage = "Veuillez saisir votre message";
echo "<br>";
echo $errorMessage;
}
else
{
$userMessage = $_POST['user_message'];
}
// Si tous les contrôles ok alors j'affiche le message récapitulatif
if (empty($errorMessage = ""))
{
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "Merci {$firstName} {$lastName} de nous avoir contacté à propos de “{$subjectLabel}”. Un de nos conseiller vous contactera <br> soit à l’adresse
{$email} ou par téléphone au {$telephone} dans les plus brefs délais pour traiter votre demande : <br>
<br>
'{$userMessage}'" ;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment