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?
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; ?>
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é.
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 form
action
sur ?
...
<form method="post" action="?">
...
</form>
Vous pouvez également le définir comme vide (""
), mais les anciennes versions de WebKit avaient un bug .
Essaye ça
<form method="post" id="reg" name="reg" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"
Fonctionne bien :)
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é!
changement<input type="submit" value="Submit" />
à<input type="submit" value="Submit" name='submit'/>
changement<form method="post" action="<?php echo $PHP_SELF;?>">
à<form method="post" action="">
if
uniquement lorsqu'il sera soumis.