Introduction au Module
Pourquoi utiliser des fonctions ?
- Réutiliser du code sans le dupliquer
- Organiser son code en blocs logiques
- Faciliter la maintenance et le débogage
- Améliorer la lisibilité du code
Les formulaires en PHP
- Principal moyen d'interaction avec les utilisateurs
- Transmission de données via GET ou POST
- Nécessitent une validation et une sécurisation
- Utilisent les variables superglobales ($_GET, $_POST)
1. Création et Utilisation de Fonctions
Syntaxe de Base
<?php
// Déclaration de fonction
function direBonjour($nom) {
return "Bonjour, " . $nom . " !";
}
// Appel de fonction
$message = direBonjour("Alice");
echo $message; // Affiche: Bonjour, Alice !
?>
Composants d'une fonction
function
- Mot-clé pour déclarer une fonctiondireBonjour
- Nom de la fonction($nom)
- Paramètrereturn
- Retourne un résultat
Types de Fonctions
Sans paramètres
<?php
function dateAujourdhui() {
return date('d/m/Y');
}
?>
Avec paramètres
<?php
function calculerTTC($prixHT, $tva = 20) {
return $prixHT * (1 + $tva/100);
}
?>
Fonctions variables
<?php
$maFonction = 'calculerTTC';
echo $maFonction(100); // Appel dynamique
?>
Bonnes Pratiques
- Donnez des noms explicites à vos fonctions
- Une fonction devrait faire une seule chose
- Documentez vos fonctions avec des commentaires
- Utilisez des paramètres par défaut quand c'est pertinent
2. Variables Superglobales
Les Principales Superglobales
Variable | Description | Exemple d'Utilisation |
---|---|---|
$_GET |
Données envoyées via URL | ?page=contact |
$_POST |
Données envoyées via formulaire | form method="POST" |
$_SESSION |
Données persistantes | session_start() |
$_COOKIE |
Données stockées côté client | setcookie() |
$_SERVER |
Infos serveur et requête | $_SERVER['PHP_SELF'] |
Exemple avec $_GET
<?php
// URL: page.php?nom=Alice&age=25
$nom = $_GET['nom'] ?? 'Invité';
$age = $_GET['age'] ?? 'inconnu';
echo "Bonjour $nom, vous avez $age ans.";
?>
L'opérateur ??
(null coalescing) fournit une valeur par défaut si la variable n'existe pas.
Exemple avec $_SESSION
<?php
session_start();
// Stocker des données
$_SESSION['utilisateur'] = 'Alice';
$_SESSION['connecte'] = true;
// Accéder aux données
if ($_SESSION['connecte']) {
echo "Bienvenue " . $_SESSION['utilisateur'];
}
?>
3. Gestion des Formulaires
Création d'un Formulaire HTML
Aperçu du Formulaire
<!-- formulaire.html -->
<form action="traitement.php" method="post">
<div>
<label for="nom">Nom complet</label>
<input type="text" id="nom" name="nom" required>
</div>
<div>
<label for="email">Email</label>
<input type="email" id="email" name="email" required>
</div>
<div>
<label for="message">Message</label>
<textarea id="message" name="message"></textarea>
</div>
<button type="submit">Envoyer</button>
</form>
Traitement du Formulaire en PHP
traitement.php
<?php
// Vérifier si le formulaire a été soumis
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Récupérer et filtrer les données
$nom = htmlspecialchars($_POST['nom'] ?? '');
$email = filter_var($_POST['email'] ?? '', FILTER_SANITIZE_EMAIL);
$message = htmlspecialchars($_POST['message'] ?? '');
// Validation
$erreurs = [];
if (empty($nom)) {
$erreurs[] = "Le nom est obligatoire";
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$erreurs[] = "L'email n'est pas valide";
}
// Si pas d'erreurs, traiter les données
if (empty($erreurs)) {
// Enregistrer en base de données
// Ou envoyer un email...
echo "Merci $nom, votre message a été envoyé !";
} else {
// Afficher les erreurs
foreach ($erreurs as $erreur) {
echo "<p class='erreur'>$erreur</p>";
}
}
}
?>
Points Clés
- Toujours vérifier la méthode (
$_SERVER['REQUEST_METHOD']
) - Utiliser
htmlspecialchars()
pour éviter les XSS - Valider les données avec
filter_var()
- Utiliser l'opérateur null coalescent (
??
) pour les valeurs par défaut - Ne jamais faire confiance aux données utilisateur
Sécurité des Formulaires
Validation
Vérifiez que les données correspondent à ce qui est attendu.
filter_var($email, FILTER_VALIDATE_EMAIL)
Nettoyage
Supprimez les caractères dangereux.
htmlspecialchars($input)
Protection CSRF
Utilisez des tokens pour éviter les attaques.
$_SESSION['token'] = bin2hex(random_bytes(32));
Exercice Pratique
Formulaire de Contact Sécurisé
Créez un système complet de formulaire de contact avec :
- Une page avec un formulaire HTML (nom, email, message)
- Un script PHP pour traiter le formulaire
- Des fonctions pour valider et nettoyer les données
- Un système de gestion des erreurs
- Une protection contre les attaques XSS
- Un message de confirmation après envoi
Solution Guidée
1. Formulaire HTML (contact.html)
<!DOCTYPE html>
<html>
<head>
<title>Contact</title>
</head>
<body>
<form action="traitement.php" method="post">
<div>
<label>Nom:</label>
<input type="text" name="nom" required>
</div>
<div>
<label>Email:</label>
<input type="email" name="email" required>
</div>
<div>
<label>Message:</label>
<textarea name="message" required></textarea>
</div>
<button type="submit">Envoyer</button>
</form>
</body>
</html>
2. Fonctions utilitaires (functions.php)
<?php
function nettoyerInput($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
function validerEmail($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL);
}
?>
3. Script de traitement (traitement.php)
<?php
require_once 'functions.php';
$erreurs = [];
$nom = $email = $message = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Nettoyage des données
$nom = nettoyerInput($_POST['nom'] ?? '');
$email = nettoyerInput($_POST['email'] ?? '');
$message = nettoyerInput($_POST['message'] ?? '');
// Validation
if (empty($nom)) {
$erreurs[] = "Le nom est requis";
}
if (!validerEmail($email)) {
$erreurs[] = "Email invalide";
}
if (empty($message)) {
$erreurs[] = "Le message est requis";
}
// Si pas d'erreurs
if (empty($erreurs)) {
// Ici: Envoyer un email ou sauvegarder en BDD
echo "<h1>Merci !</h1>";
echo "<p>Votre message a été envoyé.</p>";
exit;
}
}
?>