147 votes

Vérifier si le formulaire a été soumis - PHP

Quelle est la meilleure façon de vérifier si un formulaire a été soumis ou non pour déterminer si je dois transmettre les variables du formulaire à ma classe de validation ?

J'ai d'abord pensé que peut-être :

isset($_POST)

Mais cela reviendra toujours vrai puisqu'un superglobal est défini partout. Je ne veux pas avoir à itérer à travers chaque élément de mon formulaire avec :

if(isset($_POST['element1']) || isset($_POST['element2']) || isset(...etc

En rédigeant cette question, j'ai pensé à une solution beaucoup plus simple : ajouter un champ caché servant d'indicateur que je peux vérifier.

Existe-t-il un moyen plus "propre" de le faire que d'ajouter mon propre drapeau ?

4 votes

Vous pouvez créer un bouton d'envoi qui a un nom spécifique, par exemple submited et ensuite utiliser le php if(isset($_POST['submited'])) ou une entrée cachée...

2 votes

Vous devriez ajouter une annonce pour empêcher les attaques par rejeu sur votre formulaire.

244voto

matino Points 7349

Pour une vérification générale, s'il y a eu un POST utilisation de l'action :

if (!empty($_POST))

EDIT : Comme indiqué dans les commentaires, cette méthode ne fonctionnera pas pour dans certains cas (par exemple avec les cases à cocher et le bouton sans nom). Vous devriez vraiment utiliser :

if ($_SERVER['REQUEST_METHOD'] == 'POST')

182voto

Olaf Points 4376

Et si

if($_SERVER['REQUEST_METHOD'] == 'POST')

76voto

Tzshand Points 195

En fait, le bouton d'envoi remplit déjà cette fonction.

Essayez dans le FORM :

<form method="post">
<input type="submit" name="treasure" value="go!">
</form>

Puis dans le gestionnaire PHP :

if (isset($_POST['treasure'])){
echo "treasure will be set if the form has been submitted (to TRUE, I believe)";
}

7 votes

C'est la bonne réponse. Vérifier simplement la présence de $_POST n'est pas suffisant car il peut avoir été généré à partir de plusieurs endroits différents... et pas seulement à partir d'un post de formulaire. Merci Tzshand.

0 votes

Idéalement, vous devriez maintenant utiliser if (null !== (filter_input(INPUT_POST, 'macaddress'))){ ce qui vous donne l'habitude d'utiliser filter_input

3 votes

POST peut être fait avec Ajax, qui n'aura pas de bouton submit, donc ce n'est pas une solution universelle.

38voto

Rikesh Points 15608

Utilice

if(isset($_POST['submit'])) // name of your submit button

2 votes

La solution la plus simple. Tous les formulaires devraient avoir un bouton d'envoi !

1 votes

Mais certains formulaires peuvent comporter plusieurs boutons.

4 votes

@rilwis parfois les formulaires sont soumis par JavaScript et n'ont pas besoin/ne possèdent pas de bouton d'envoi.

29voto

CodeCaster Points 38181

if ($_SERVER['REQUEST_METHOD'] == 'POST') .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X