Afficher et traiter un formulaire dans la même page

Certaines pages Web pourront jouer un double rôle :

  • La première fois que la page est affichée, on affiche le formulaire.
  • Après que le bouton de soumission ait été cliqué, on traite le formulaire.

Cet article vous expose une technique intéressante pour y parvenir.

▼Publicité

Afin que le formulaire renvoie le traitement à la même page, il faudra ajuster l'attribut action de la balise <form>. Il serait facile de coder en dur le nom de la page mais une technique plus souple consiste à demander à PHP d'utiliser le nom de la page actuelle.

Ex :

PHP

echo "<form ... action='{$_SERVER['SCRIPT_NAME']}'>";

ou

PHP

<?php

     ...

?>

 

<form ... action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">

 

<?php

    ...

?>

Notez que si le contexte du programme exige que les paramètres de l'URL soient conservés lorsque la page sera réaffichée (lors du postback), il faudra utiliser REQUEST_URI au lieu de SCRIPT_NAME et prendre quelques précautions pour protéger notre code contre certaines attaques XSS (voir « Protéger notre code lors de l'utilisation de $_SERVER['REQUEST_URI'] »).

Pour que la page puisse soit afficher le formulaire, soit le traiter, on commencera par vérifier si le formulaire a été envoyé. Le programme saura que le bouton de soumission a été cliqué si la variable $_POST['name_du_bouton'] existe.

La méthode isset() permet de vérifier si une variable existe.

Ex :

PHP

if (!isset($_POST['nomboutonsubmit'])) {

    // *****************************************************************

    // afficher le formulaire de saisie de données

    // *****************************************************************

    ...

}

else {

    // *****************************************************************

    // traiter le formulaire (ex : valider puis enregistrer les données)

    // *****************************************************************

    ...

}

Ex :

PHP

if (!isset($_POST['enregistrer'])) {

    // *****************************************************************

    // afficher le formulaire de saisie de données

    // *****************************************************************

    ?>

        <form ...>

            ...

        </form>

    <?php

}

else {

    // *****************************************************************

    // traiter le formulaire (ex : valider puis enregistrer les données)

    // *****************************************************************

    $message = '';

    $adresse = $_POST['adresse'];

    ...

    // validation des données

    if ('' == $adresse) {

        $message .= "L'adresse est requise.<br \>";

    }

    ...

    // affichage des erreurs détectées

    if ('' != $message) {

        echo "<p class='messageerreur'>$message</p>";

    }

    else {

    // enregistrement des données (ne pas oublier d'utiliser les requêtes préparées puisque les données proviennent d'un utilisateur)

        $requete = "...";

        ...

    }    

}

Une autre technique permet de savoir si on a affaire au premier affichage de la page ou non. Il s'agit de vérifier, à l'aide de $_SERVER['REQUEST_METHOD'], si on a affaire à une requête de type GET ou POST :

  • La requête sera toujours de type GET lors du premier affichage d'une page.
  • Elle sera de type POST lorsque la page est affichée à la suite d'un clic sur un bouton de type submit dans un formulaire dont la méthode est POST (donc si elle est en postback).

L'avantage de l'utilisation de $_SERVER['REQUEST_METHOD'], c'est que vous n'avez pas besoin de spécifier le nom du bouton de soumission. Par contre, si une page contient plus d'un bouton de soumission, il ne sera pas possible de savoir sur lequel on a cliqué.

Ex :

PHP

if($_SERVER['REQUEST_METHOD'] != "POST") {

    // *****************************************************************

    // afficher le formulaire de saisie de données

    // *****************************************************************

    ...

}

else {

    // *****************************************************************

    // traiter le formulaire (ex : valider puis enregistrer les données)

    // *****************************************************************

    ...

}

Pour plus d'information

« $_SERVER ». PHP. http://php.net/manual/fr/reserved.variables.server.php

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories