Cours PHP pour Débutants

Module 2 : Fonctions et Formulaires

Niveau : Intermédiaire

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 fonction
  • direBonjour - Nom de la fonction
  • ($nom) - Paramètre
  • return - 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 :

  1. Une page avec un formulaire HTML (nom, email, message)
  2. Un script PHP pour traiter le formulaire
  3. Des fonctions pour valider et nettoyer les données
  4. Un système de gestion des erreurs
  5. Une protection contre les attaques XSS
  6. Un message de confirmation après envoi

Solution Guidée