web-dev-qa-db-fra.com

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

Comment puis-je créer un formulaire auto-postant/auto-soumis, c’est-à-dire un formulaire qui se soumet les résultats, au lieu de le soumettre à un autre formulaire?

46
user544079

La bonne façon serait d'utiliser $_SERVER["PHP_SELF"] (en conjonction avec htmlspecialchars pour éviter de possibles exploits). Vous pouvez également ignorer le action= partie vide, ce qui n’est pas valable pour le W3C, mais fonctionne actuellement dans la plupart des navigateurs (tous?) - la valeur par défaut consiste à se soumettre à soi-même s’il est vide.

Voici un exemple de formulaire qui prend un nom et un courrier électronique, puis affiche les valeurs que vous avez entrées lors de l'envoi:

<?php if (!empty($_POST)): ?>
    Welcome, <?php echo htmlspecialchars($_POST["name"]); ?>!<br>
    Your email is <?php echo htmlspecialchars($_POST["email"]); ?>.<br>
<?php else: ?>
    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
        Name: <input type="text" name="name"><br>
        Email: <input type="text" name="email"><br>
        <input type="submit">
    </form>
<?php endif; ?>
76
Phphelp

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

La condition if(isset($_POST['submit'])) devrait être avant tout la sortie HTML et devrait contenir une fonction header() avec une redirection vers la page en cours (seulement maintenant, avec quelques notifications de Nice indiquant que "des courriels ont été envoyés" " .. ou quelque chose ). Pour cela, vous devrez utiliser $_SESSION Ou $_COOKIE.

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

11
tereško

Cela ne fonctionnera que si register_globals est activé et ne doit jamais l'être (sauf si vous définissez cette variable ailleurs).

Essayez de définir l'attribut formaction sur ?...

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

Vous pouvez également le définir comme vide (""), mais les anciennes versions de WebKit avaient un bug .

5
alex

Essaye ça

<form method="post" id="reg" name="reg" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"

Fonctionne bien :)

4
Robot Boy

Votre bouton d'envoi n'a pas de nom. Ajoutez name = "submit" à votre bouton d'envoi.

Si vous affichez la source sur le formulaire dans le navigateur, vous verrez comment il se soumet - l'attribut d'action du formulaire contiendra le nom du script en cours - ainsi, lorsque le formulaire sera soumis, il se soumettra à lui-même. Modifier pour l'amour de la vanité!

3
David Fells
  1. changement
    <input type="submit" value="Submit" />
    à
    <input type="submit" value="Submit" name='submit'/>

  2. changement
    <form method="post" action="<?php echo $PHP_SELF;?>">
    à
    <form method="post" action="">

  3. Il exécutera le code dans if uniquement lorsqu'il sera soumis.
  4. Il montrera toujours le formulaire (code html).
  5. quelle est ta question exactement?
2