Bouton Annuler nécessitant un traitement avant redirection

Lorsque nous programmons un formulaire dans WordPress, il arrive qu'on ait besoin d'un bouton pour annuler le traitement en cours. Ce bouton ignorera les données entrées dans le formulaire et causera généralement une redirection vers une autre page du site Web.

Mais comment faire si, avant d'effectuer la redirection, nous avons besoin d'effectuer un traitement côté serveur comme, par exemple, la destruction d'une variable de session ?

▼Publicité

Considérons le cas où le formulaire est associé à un « shortcode ». La redirection serveur n'est pas une option puisque WordPress a déjà commencé à envoyer du code au navigateur. On se tournera donc vers la redirection JavaScript.

Prenons le cas où on a besoin de réinitialiser des variables avant de passer à la page suivante. La simple redirection JavaScript associée à un clic sur un bouton ne nous permettrait pas d'y arriver.

Voici donc une astuce qui permettra d'effectuer du traitement avant la redirection JavaScript.

  • Le bouton Annuler sera de type submit. Ceci fera en sorte que la page mentionnée dans le action du formulaire sera appelée.

    Ex :

    PHP

    <form method="post" action="mapageweb.php">

       <input type="submit" value="<?php _e( "Continuer", "montheme" ); ?>" name="partie1"/>

       <input type="submit" value="<?php _e( "Annuler", "montheme" ); ?>" name="annuler" />

    </form>

  • Dans la page associée au formulaire, on commencera par détecter si le bouton Annuler a été cliqué. Si c'est le cas, on effectuera le traitement puis on fera une redirection JavaScript. Attention : la redirection JavaScript ne sera pas codée dans une fonction JavaScript. Elle sera donc exécutée dès l'instant où elle est rencontrée par le code.

    Ex :

    PHP

    if ( isset( $_POST['annuler'] ) ) {

       // traitement à effectuer

       ...

       // redirection JavaScript

       ?>

     

       <script>

          <!--

             window.location='<?php echo $page_a_afficher; ?>';

          //-->

       </script>

     

       <?php

    } else {

       ...

    }

Permettre d'annuler sans effectuer les validations HTML

Il est possible d'utiliser des attributs HTML pour effectuer des validations sur les informations saisies. 

Par exemple, la zone de texte suivante devra contenir un nombre entier et ne devra pas être laissée à blanc :

PHP

<input type="text" name="taille" id="taille" pattern="[0-9]+" title="<?php _e( "Vous devez entrer un nombre.", "montheme"); ?>" required />

Dans un tel formulaire, un clic sur un bouton de type submit ne pourra pas charger la page correspondant à l'attribut action du formulaire tant que les données ne seront pas valides. Dans le cas d'un bouton de type submit visant à annuler un formulaire, il faut lui ajouter un attribut pour que les validations HTML n'aient pas lieu. C'est précisément le rôle de l'attribut formnovalidate.

Dans l'exemple suivant, le bouton Envoyer forcera la validation HTML avant de charger la page du action mais le bouton Annuler pourra charger cette page sans que les données soient valides.

PHP

<form action="..." method="post">

   ...

   <input type="submit" value="<?php _e( "Envoyer", "montheme" ); ?>"  name="envoyer" />

   <input type="submit" value="<?php _e( "Annuler", "montheme" ); ?>" formnovalidate />

</form>

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