Formulaire avec CodeIgniter 4 : Tout comprendre

Accueil PHP 8 Formulaire avec CodeIgniter 4 : Tout comprendre

Créer un formulaire avec CodeIgniter est une étape essentielle pour toute application web : inscription, connexion, ajout de produits, contact, recherche… tous ces éléments reposent sur un formulaire bien conçu. Dans ce tutoriel accessible aux débutants, nous allons explorer en détail comment créer, valider et traiter un formulaire avec CodeIgniter 4, à travers des exemples concrets et des explications pas-à-pas.

Pourquoi utiliser un formulaire avec CodeIgniter 4 ?

Utiliser un formulaire avec CodeIgniter permet de tirer profit du système MVC (ModelVueController) pour séparer les responsabilités : la logique dans les contrôleurs, l’affichage dans les vues, et la validation dans des règles définies proprement.

Grâce à son système intégré, CodeIgniter 4 facilite la gestion des formulaires : récupération sécurisée des données, protection CSRF, validation, affichage d’erreurs, etc. Tout cela rend un formulaire avec CodeIgniter robuste, maintenable et sécurisé.

Préparer l’environnement

Avant de créer un formulaire avec CodeIgniter, assure-toi d’avoir installé CodeIgniter 4 correctement. Voici les étapes rapides :

composer create-project codeigniter4/appstarter monprojet
cd monprojet
php spark serve

L’application sera accessible via http://localhost:8080.

Créer un formulaire avec CodeIgniter : premier exemple

Prenons un cas simple : un formulaire de contact. Il demandera :

  • Le nom
  • L’email
  • Le message

La route avec CodeIgniter

Ajoute une route dans app/Config/Routes.php :

$routes->get('contact', 'Contact::index');
$routes->post('contact/send', 'Contact::send');

Le contrôleur Contact.php

Crée un Controller : un fichier dans  app/Controllers/Contact.php :

namespace App\Controllers;
use CodeIgniter\Controller;

class Contact extends Controller
{
    public function index()
    {
        return view('contact_form');
    }

    public function send()
    {
        $validation = \Config\Services::validation();

        $rules = [
            'name'    => 'required|min_length[3]',
            'email'   => 'required|valid_email',
            'message' => 'required|min_length[10]'
        ];

        if (!$this->validate($rules)) {
            return view('contact_form', [
                'validation' => $this->validator
            ]);
        }

        // Traitement des données (ex: envoi de mail)
        return view('contact_success');
    }
}

La vue contact_form.php

Crée le fichier app/Views/contact_form.php :

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Formulaire de contact</title>
</head>
<body>

<h1>Formulaire de contact</h1>

<?php if (isset($validation)) : ?>
    <?= $validation->listErrors() ?>
<?php endif; ?>

<form action="<?= base_url('contact/send') ?>" method="post">
    <?= csrf_field() ?>
    <label>Nom :</label>
    <input type="text" name="name" value="<?= set_value('name') ?>"><br>

    <label>Email :</label>
    <input type="email" name="email" value="<?= set_value('email') ?>"><br>

    <label>Message :</label>
    <textarea name="message"><?= set_value('message') ?></textarea><br>

    <button type="submit">Envoyer</button>
</form>

</body>
</html>

La vue de succès contact_success.php

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Merci</title>
</head>
<body>
    <h1>Merci pour votre message !</h1>
</body>
</html>

Fonctionnement du formulaire avec CodeIgniter

Ce formulaire avec CodeIgniter utilise plusieurs outils du framework :

  • csrf_field() : ajoute un token CSRF pour éviter les attaques.
  • set_value() : préremplit le champ avec la dernière valeur saisie (utile si erreur).
  • validate() : vérifie les règles de validation.
  • $validator->listErrors() : affiche les erreurs si validation échoue.

Grâce à ces outils, le formulaire avec CodeIgniter devient sécurisé et ergonomique.

Exemple de formulaire d’inscription avec validation

Voyons un second exemple plus complexe : un formulaire avec CodeIgniter pour créer un compte utilisateur. Pour allez plus loin, lisez notre Guide complet pour la connexion et l’accès sécurisé avec CodeIgniter.

Champs du formulaire

  • Nom
  • Prénom
  • Email
  • Mot de passe
  • Confirmation du mot de passe

Contrôleur Register.php

namespace App\Controllers;

class Register extends BaseController
{
    public function index()
    {
        return view('register_form');
    }

    public function submit()
    {
        $rules = [
            'firstname' => 'required|min_length[2]',
            'lastname'  => 'required|min_length[2]',
            'email'     => 'required|valid_email|is_unique[users.email]',
            'password'  => 'required|min_length[6]',
            'passconf'  => 'matches[password]'
        ];

        if (!$this->validate($rules)) {
            return view('register_form', [
                'validation' => $this->validator
            ]);
        }

        // Enregistrer l'utilisateur en base
        $model = new \App\Models\UserModel();
        $model->save([
            'firstname' => $this->request->getPost('firstname'),
            'lastname'  => $this->request->getPost('lastname'),
            'email'     => $this->request->getPost('email'),
            'password'  => password_hash($this->request->getPost('password'), PASSWORD_DEFAULT)
        ]);

        return view('register_success');
    }
}

Les avantages d’un formulaire avec CodeIgniter

Utiliser un formulaire avec CodeIgniter présente de nombreux avantages :

  • Validation centralisée et propre
  • Préservation des données après erreur
  • Affichage automatique des erreurs
  • Sécurité intégrée (XSS, CSRF)
  • Intégration facile avec des modèles

Bonnes pratiques pour un formulaire avec CodeIgniter

  • Toujours utiliser csrf_field() pour protéger vos formulaires.
  • Affichez les messages d’erreur avec listErrors() ou champ par champ.
  • Stockez les règles de validation dans des classes si réutilisées souvent.
  • Ne jamais faire confiance aux données utilisateur sans validation.

Formulaire avec CodeIgniter et données préremplies

Dans certains cas, un formulaire avec CodeIgniter est utilisé pour modifier une ressource existante. Par exemple, un formulaire d’édition de profil doit être prérempli avec les données de l’utilisateur.

Exemple de formulaire prérempli

Dans le contrôleur :

public function edit($id)
{
    $model = new \App\Models\UserModel();
    $user = $model->find($id);
    return view('edit_profile', ['user' => $user]);
}

Dans la vue :

<input type="text" name="firstname" value="<?= esc($user['firstname']) ?>">
<input type="text" name="lastname" value="<?= esc($user['lastname']) ?>">

Avec ce code, ton formulaire avec CodeIgniter affiche les valeurs actuelles de l’utilisateur, prêtes à être modifiées.

Upload de fichiers dans un formulaire avec CodeIgniter

Ajouter un champ fichier dans un formulaire avec CodeIgniter est une fonctionnalité fréquente : photo de profil, CV, portfolio, image de produit…

Vue HTML

<form action="<?= base_url('upload') ?>" method="post" enctype="multipart/form-data">
    <?= csrf_field() ?>
    <input type="file" name="file">
    <button type="submit">Envoyer</button>
</form>

Contrôleur

public function upload()
{
    $file = $this->request->getFile('file');

    if ($file->isValid() && !$file->hasMoved()) {
        $newName = $file->getRandomName();
        $file->move(WRITEPATH . 'uploads', $newName);
        return "Fichier uploadé avec succès : " . $newName;
    }

    return "Erreur lors de l'upload";
}

CodeIgniter 4 gère très bien l’upload sécurisé. Il est crucial que ton formulaire avec CodeIgniter utilise l’attribut enctype="multipart/form-data".

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?

Formulaire avec CodeIgniter et AJAX

Pour rendre ton formulaire avec CodeIgniter plus fluide, tu peux utiliser AJAX pour soumettre les données sans recharger la page.

Vue HTML + JS

<form id="ajaxForm">
    <input type="text" name="email" placeholder="Votre email">
    <button type="submit">Envoyer</button>
</form>

<div id="resultat"></div>

<script>
document.getElementById('ajaxForm').addEventListener('submit', function(e) {
    e.preventDefault();
    fetch('<?= base_url("ajax/send") ?>', {
        method: 'POST',
        body: new FormData(this)
    })
    .then(res => res.text())
    .then(data => document.getElementById('resultat').innerHTML = data);
});
</script>

Contrôleur

public function send()
{
    $email = $this->request->getPost('email');
    // Traitement
    return "Merci, $email a bien été reçu.";
}

Ton formulaire avec CodeIgniter devient réactif, rapide, et moderne avec seulement quelques lignes de JavaScript.

Formulaire avec CodeIgniter en plusieurs étapes

Un autre cas d’usage est le formulaire multi-étapes : on divise un long formulaire en plusieurs écrans. Cela améliore l’expérience utilisateur.

Stockage des données temporairement

Utilise les sessions pour stocker les données entre chaque étape :

public function etape1()
{
    return view('form_etape1');
}

public function etape1Submit()
{
    session()->set('etape1', $this->request->getPost());
    return redirect()->to('form/etape2');
}

public function etape2()
{
    return view('form_etape2');
}

Chaque vue représente une étape. Tu peux récupérer toutes les données en session à la fin pour les enregistrer.

Un formulaire avec CodeIgniter multi-étapes est très utile dans les formulaires de commande, d’inscription détaillée ou d’enquête.

Personnaliser les messages de validation

Tu peux personnaliser les erreurs dans ton formulaire avec CodeIgniter :

$rules = [
    'email' => [
        'rules' => 'required|valid_email',
        'errors' => [
            'required' => 'L\'email est obligatoire.',
            'valid_email' => 'L\'email n\'est pas valide.'
        ]
    ]
];

Cela permet de rendre le formulaire avec CodeIgniter plus humain et adapté à ton public.

Utiliser des classes personnalisées de validation

Pour de gros projets, place tes règles dans des classes :

Créer une classe app/Validation/UserRules.php

namespace App\Validation;

class UserRules
{
    public function isTroyes($str, string $fields, array $data)
    {
        return strtolower($str) === 'troyes';
    }
}

Enregistrer dans app/Config/Validation.php

public $ruleSets = [
    \App\Validation\UserRules::class,
];

Et dans le formulaire :

'ville' => 'required|isTroyes'

Sécurité des formulaires avec CodeIgniter

  • Toujours utiliser csrf_field() dans chaque formulaire avec CodeIgniter
  • Valider et filtrer toutes les données utilisateurs
  • Ne jamais exposer les données sensibles
  • Stocker les mots de passe avec password_hash()

Générer un formulaire avec CodeIgniter automatiquement

Tu peux aussi utiliser des fonctions helpers :

helper('form');

echo form_open('contact/send');
echo form_input('email', '');
echo form_submit('submit', 'Envoyer');
echo form_close();

Cela génère automatiquement le HTML de ton formulaire avec CodeIgniter.

Formulaire CodeIgniter

Conclusion

Maîtriser un formulaire avec CodeIgniter est essentiel pour tout projet web. Grâce à son système puissant de validation, sa sécurité intégrée, sa simplicité de mise en œuvre et sa souplesse, CodeIgniter 4 est un excellent choix pour gérer des formulaires professionnels, ergonomiques et robustes.

Dans ce tutoriel, nous avons vu comment créer un formulaire avec CodeIgniter, le valider, gérer les erreurs, envoyer des fichiers, utiliser AJAX, construire des formulaires multi-étapes et même créer des règles personnalisées. Tu es maintenant capable de développer tous types de formulaires avec CodeIgniter 4.

Allez plus loin avec CodeIgniter 4 :

Live on Twitch
  • 🔥 Vendredi 25 Avril 2025 >19h00

    HTML & SémantiqueStructure d'une page HTML