Formation PUB010 : PHP, 2022 La validation d'un formulaire Web

18.8 Valider la clé étrangère saisie dans un formulaire avec PHP


Lorsqu'un formulaire offre des choix, les options disponibles sont souvent générées à partir d'une table de la base de données.

Dans un formulaire HTML, ces choix sont souvent sous la forme de balise <select> et de boutons radio.

Liste déroulante Boutons radio

Pour chaque option, la valeur de l'option ou du bouton radio (attribut value) correspondra l'identifiant de l'enregistrement dans la table qui contient ces valeurs. 

Génération du formulaire (PHP)

while ($enreg = $resultat->fetch_assoc()) {
    echo "<option value='{$enreg['id']}'>{$enreg['description']}</option>";
}

Dans le formulaire, la valeur choisie permettra de déterminer la valeur d'une clé étrangère. Par exemple, dans le formulaire pour ajouter un item, l'usager pourra choisir la catégorie de l'item (clé étrangère categorie_id) à l'aide d'une liste déroulante.

Peu importe comment l'option a été saisie, il faudra s'assurer que cette valeur est valable, c'est-à-dire qu'il y a effectivement un enregistrement avec cet identifiant dans la table concernée.

▼Publicité Le texte se poursuit plus bas

Risque si on ne s'assure pas que la valeur est valable

Mais pourquoi faire cette validation puisque les valeurs viennent d'être générées à partir de la base de données? C'est qu'un usager malveillant pourrait trafiquer les valeurs, histoire de voir si le programme réagit correctement.

Et ceci est très facile à réaliser.

Alors que le formulaire est affiché dans le navigateur, faites un clic droit sur la liste déroulante ou sur un bouton radio puis choisissez Inspecter.

Double-cliquez sur un attribut value puis entrez-y une valeur que vous croyez qui n'existe pas.

Et voilà, pas plus compliqué que ça!

Changer la valeur d'une option

Vérifier si la valeur est valable

Avant de travailler avec la valeur sélectionnée pour la clé étrangère, une requête SQL permettra de s'assurer qu'elle correspond à un enregistrement dans la table concernée.

Dans notre exemple, on doit vérifier si la catégorie sélectionnée existe dans la table categories.

Ce code est conçu pour un programme PHP vanille. Si vou travaillez avec un autre environnement, par exemple WordPress, vous devrez bien entendu l'ajuster pour utiliser $wpdb plutôt que $mysqli.

Traitement du formulaire (PHP)

$requete = "SELECT id FROM categories WHERE id=?";
$stmt = $mysqli->prepare($requete);

if ($stmt) {
    $stmt->bind_param('i', $categorie_id);
    $stmt->execute();
    $stmt->store_result();

    if (0 == $stmt->errno) {
        if (0 == $stmt->num_rows) {
            $messageErreur = 'La catégorie choisie n\'est pas valable.';
        }
    } else {
        $messageErreur = 'Il n\'est pas possible de valider la catégorie (code 1).';
        log_debug($stmt->error);
    }

    $stmt->close();
} else {
    $messageErreur = 'Il n\'est pas possible de valider la catégorie (code 2).';
    log_debug($mysqli->error);
}

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Par Christiane Lagacé
Dernière révision le 25 avril 2023
Merci de partager !

Site fièrement hébergé chez A2 Hosting.

Soumettre