[ 0.000 ] Initializing portfolio...

[ 0.212 ] Loading modules... OK

[ 0.445 ] Mounting filesystem... OK

[ 0.673 ] Starting services... OK

[ 0.891 ] Welcome, user.

0%
root@projects:~$ cat ./football/README.md
[ 01 ] DEPLOYED 2025

> Site Fan Football

Projet de 1ère année BUT MMI (SAE 105). Un site qui présente le top 50 des clubs en Ligue des Champions et l'histoire du meilleur joueur du monde. Gestion d'image, tableau dynamique et formulaire de contact sécurisé.

HTMLCSSJavaScriptPHPDocker
root@projects:~$ cat ./football/pourquoi.txt

C'était la SAE 105, obligatoire en 1ère année. L'objectif était de tout combiner en même temps : intégrer des pages à partir de données structurées, mettre en place un environnement de dev propre, et déployer en ligne. Le thème du football, c'est moi qui l'ai choisi parce que ça m'intéresse vraiment. Autant traiter un sujet qui me parle plutôt qu'un sujet bateau.

C'est aussi le premier projet où j'ai touché à du PHP côté serveur pour de vrai. L'upload d'image, la génération de pages depuis des données, la gestion des formulaires. Ça m'a forcé à comprendre comment le front et le back s'articulent, pas juste à les utiliser séparément.

root@projects:~$ cat ./football/features.txt

$ Fonctionnalités

  • Upload et suppression d'image (PHP + stockage serveur)
  • Tableau classement dynamique, tri par colonnes
  • Page contact sécurisée (validation serveur)
  • Déploiement containerisé via Docker

$ Contexte

  • SAE 105, BUT MMI 1ère année
  • IUT de Troyes, 2025
  • Travail individuel
  • Hébergé sur le serveur MMI de l'IUT
root@projects:~$ cat ./football/src/upload.php
upload.php
// Gestion upload image — validation extension + déplacement
if (isset($_FILES['image']) && $_FILES['image']['error'] === UPLOAD_ERR_OK) {
    $allowed = ['jpg', 'jpeg', 'png', 'gif'];
    $ext     = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION));

    if (in_array($ext, $allowed)) {
        $nom  = uniqid('img_', true) . '.' . $ext;
        $dest = __DIR__ . '/uploads/' . $nom;
        move_uploaded_file($_FILES['image']['tmp_name'], $dest);
        echo json_encode(['ok' => true, 'file' => $nom]);
    } else {
        echo json_encode(['ok' => false, 'error' => 'Extension non autorisée']);
    }
}
root@projects:~$ ls ./football/screenshots/
sae105.mmi25d02.mmi-troyes.fr/index.php
[ aucune capture locale — voir le site en direct ] > Ouvrir le site