59 votes

Comment créer un formulaire PHP qui se soumet à lui-même?

Comment créer un formulaire de auto-publication/auto-remplissage, c’est-à-dire un formulaire qui envoie les résultats vers lui-même, au lieu de les envoyer vers un autre formulaire?

7 votes

Vous pouvez également laisser l'action vide, et cela se défaulte à la page actuelle.

1 votes

@Marvo Il y a un ancien bug qui n'est probablement pas très pertinent aujourd'hui avec WebKit. Voir ma réponse.

90voto

Phphelp Points 467

La bonne manière serait d'utiliser $_SERVER["PHP_SELF"] (en conjonction avec htmlspecialchars pour éviter les exploits possibles). Vous pouvez également simplement laisser la partie action= vide, ce qui n'est pas valide selon le W3C, mais fonctionne actuellement dans la plupart (tous ?) des navigateurs - la valeur par défaut est de soumettre vers la page actuelle si elle est vide.

Voici un exemple de formulaire qui demande un nom et un email, puis affiche les valeurs que vous avez saisies lors de la soumission :

    Bienvenue, !
    Votre email est .

    " method="post">
        Nom : 
        Email :

6 votes

Laisser la valeur de l'action vide n'est pas valide selon le W3C. Juste pour signaler. Cependant, cela fonctionne bien.

0 votes

Comment faites-vous pour que cela fonctionne uniquement Bienvenue, ! Votre email est . et ne pas echo comme ça?

1 votes

Ensuite, que devrions-nous utiliser ici ?

11voto

tereško Points 32847

Je suppose que vous voulez dire $_SERVER['PHP_SELF']. Et si c'est le cas, vous ne devriez vraiment pas l'utiliser sans le filtrer au préalable. Cela vous rend vulnérable aux attaques XSS.

La condition if(isset($_POST['submit'])) devrait être placée avant toutes les sorties HTML, et devrait contenir une fonction header() avec une redirection vers la page actuelle à nouveau (mais cette fois, avec un message sympa disant que "les emails ont été envoyés".. ou quelque chose du genre). Pour cela, vous devrez utiliser $_SESSION ou $_COOKIE.

Et s'il vous plaît, arrêtez d'utiliser $_REQUEST. Cela pose également une menace pour la sécurité.

6voto

alex Points 186293

Cela ne fonctionnera que si register_globals est activé, et il ne devrait jamais être activé (à moins que bien sûr vous ne définissiez cette variable ailleurs).

Essayez de régler l'attribut action du form à ?...

   ...

Vous pouvez également le régler pour qu'il soit vide (""), mais les anciennes versions de WebKit avaient un bug.

2 votes

@Damian je n'aime pas abuser de l'identifiant de fragment.

4voto

Robot Boy Points 1154

Essayez ceci

`

Fonctionne bien :)

`

3voto

Itay Moav -Malimovka Points 17977
  1. changer

    à

  2. changer

    à

  3. Il exécutera le code dans if seulement lorsqu'il est soumis.

  4. Il affichera toujours le formulaire (code html).

  5. quel est exactement votre question?

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