Validation du formulaire PHP
Dans ce chapitre, nous présenterons comment utiliser PHP pour vérifier les données du formulaire soumises par le client.
Validation du formulaire PHP
|
Cliquez sur le bouton « Exécuter l'instance » pour afficher l'instance en ligne
字段 | 验证规则 |
---|---|
名字 | 必须。 +只能包含字母和空格 |
必须。 + 必须是一个有效的电子邮件地址(包含'@'和'.') | |
网址 | 必须。如果存在,它必须包含一个有效的URL |
备注 | 必须。 多行输入字段(文本域) |
性别 | 必须。 必须选择一个 |
Les règles de validation du formulaire ci-dessus sont les suivantes :
Commençons par jetez un oeil au HTML pur Le code du formulaire :
Champs de texteLes champs "Nom", "E-mail" et "Site Web" sont des éléments de saisie de texte, et le " Le champ "Remarques" est zone de texte. Le code HTML ressemble à ceci :
“名字”: <input type="text" name="name"> E-mail: <input type="text" name="email"> 网址: <input type="text" name="website"> 备注: <textarea name="comment" rows="5" cols="40"></textarea>Bouton radio
<input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男Éléments du formulaire
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">Ce formulaire utilise
什么是 $_SERVER["PHP_SELF"] 变量? $_SERVER["PHP_SELF"]是超级全局变量,返回当前正在执行脚本的文件名,与 document root相关。 |
<🎜>Qu'est-ce que la variable $_SERVER["PHP_SELF"] ?<🎜><🎜>< 🎜 > $_SERVER["PHP_SELF"] est une variable super globale qui renvoie le nom de fichier du script en cours d'exécution et est liée à la racine du document. |
Ainsi, $_SERVER["PHP_SELF"] enverra les données du formulaire à la page actuelle au lieu de passer à une autre page.
Qu'est-ce que la méthode htmlspecialchars() ?
Fonction htmlspecialchars() Convertissez certains caractères prédéfinis en entités HTML. Les caractères prédéfinis sont :
|
Spécifiez le nom du fichier de formulaire suivant comme "test_form.php":
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">Maintenant, nous utilisons l'URL pour spécifier l'adresse de soumission "test_form.php", le code ci-dessus est modifié comme suit :
<form method="post" action="test_form.php">C'est très bien.
Cependant, étant donné que l'utilisateur saisira l'adresse suivante dans la barre d'adresse du navigateur :
http://www.php.cn/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E, l'URL ci-dessus sera analysée dans le code suivant et exécutée :
<form method="post" action="test_form.php/"><script>alert('hacked')</script>a ajouté une balise de script au code et a ajouté une commande d'alerte. Ce code Javascript sera exécuté au chargement de la page (l'utilisateur verra une boîte pop-up). Ceci n'est qu'un exemple simple de la façon dont la variable PHP_SELF peut être exploitée par des pirates.
Veuillez noter que Tout code JavaScript peut être ajouté dans la balise <script> Les pirates peuvent l'utiliser pour rediriger la page vers la page d'un autre serveur. Le code malveillant peut être protégé dans le fichier de code et le code peut modifier les variables globales ou obtenir les données du formulaire de l'utilisateur.
Comment éviter que $_SERVER["PHP_SELF"] soit exploité ?
$_SERVER["PHP_SELF"] peut être évité en utilisant la fonction htmlspecialchars(). Le code du
formulaire ressemble à ceci :
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">htmlspecialchars() Convertit certains caractères prédéfinis en entités HTML. Désormais, si l'utilisateur souhaite profiter de Variable PHP_SELF, le résultat sera affiché comme suit :
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">n'a pas réussi à essayer cette vulnérabilité !
Utilisez PHP pour valider les données du formulaire
Tout d'abord, nous traitons toutes les données soumises par les utilisateurs via la fonction htmlspecialchars() de PHP.
Lorsque nous utilisons la fonction htmlspecialchars(), lorsque l'utilisateur essaie de soumettre le champ de texte suivant :
<script>location.href('http://www.php.cn')</script>le code ne sera pas exécuté car il sera enregistré en tant qu'échappement HTML Le code est le suivant :
<script>location.href('http://www.php.cn')</script>Le code ci-dessus est sûr et peut être affiché normalement sur la page ou inséré dans les e-mails.
Lorsque l'utilisateur soumet le formulaire, nous ferons les deux choses suivantes :
1 Utilisez la fonction PHP trim() pour supprimer le contenu non pertinent dans. les données saisies par l'utilisateur. Caractères nécessaires (tels que les espaces, les tabulations, les nouvelles lignes).
2. Utilisez la fonction PHP stripslashes() pour supprimer les barres obliques inverses dans les données d'entrée utilisateur()
Filtrons-les ensuite La fonction est écrite dans une fonction définie par nous-mêmes, ce qui peut grandement améliorer la réutilisabilité du code.
Nommez la fonction test_input().
Maintenant, nous pouvons détecter toutes les variables dans $_POST grâce à la fonction test_input(). Le code du script est le suivant :
Instance
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>PHP中文网(php.cn)</title> </head> <body> <?php // 定义变量并默认设置为空值 $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = test_input($_POST["name"]); $email = test_input($_POST["email"]); $website = test_input($_POST["website"]); $comment = test_input($_POST["comment"]); $gender = test_input($_POST["gender"]); } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> <h2>PHP 表单验证实例</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 名字: <input type="text" name="name"> <br><br> E-mail: <input type="text" name="email"> <br><br> 网址: <input type="text" name="website"> <br><br> 备注: <textarea name="comment" rows="5" cols="40"></textarea> <br><br> 性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男 <br><br> <input type="submit" name="submit" value="Submit"> </form> <?php echo "<h2>您输入的内容是:</h2>"; echo $name; echo "<br>"; echo $email; echo "<br>"; echo $website; echo "<br>"; echo $comment; echo "<br>"; echo $gender; ?> </body>
Exécuter l'instance»
Cliquez sur le bouton « Exécuter l'instance » pour afficher l'instance en ligne
Notez que lorsque nous exécuterons le script ci-dessus, nous utiliserons $_SERVER["REQUEST_METHOD"] pour détecter si le formulaire a été soumis. . Si REQUEST_METHOD est POST, le formulaire sera soumis - et les données seront validées. Si le formulaire n’est pas soumis, la validation sera ignorée et affichée vide.
L'utilisation d'éléments de saisie dans les exemples ci-dessus est facultative et peut être affichée normalement même si l'utilisateur ne saisit aucune donnée.
Tutoriels pratiques recommandés : "Validation du formulaire PHP"
Dans le chapitre suivant, nous présenterons comment effectuer une vérification sur les données saisies par le l'utilisateur. vérifier.