Tutoriel de base sur le développement PHP Validation de formulaire PHP

1. Vérification du formulaire PHP

Dans ce chapitre, nous présenterons comment utiliser PHP pour vérifier les données du formulaire soumises par le client.

Remarque : Nous devons prendre en compte la sécurité lors du traitement des formulaires PHP. Dans ce chapitre, nous démontrerons le traitement sécurisé des données du formulaire PHP. Afin de prévenir les pirates informatiques et le spam, nous devons effectuer une vérification de la sécurité des données sur le formulaire.

Le formulaire HTML introduit dans ce chapitre contient les champs de saisie suivants : champs de texte obligatoires et facultatifs, boutons radio et boutons de soumission.

2. Exemple d'affichage

Le code est le suivant :

<!DOCTYPE HTML> 
<html>
<head>
<meta charset="utf-8">
<title>php.cn</title>
<style>
.error {color: #FF0000;}
</style>
</head>
<body> 
<?php
// 定义变量并默认设置为空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST")
{
    if (empty($_POST["name"]))
    {
        $nameErr = "名字是必需的";
    }
    else
    {
        $name = test_input($_POST["name"]);
        // 检测名字是否只包含字母跟空格
        if (!preg_match("/^[a-zA-Z ]*$/",$name))
        {
            $nameErr = "只允许字母和空格"; 
        }
    }
    
    if (empty($_POST["email"]))
    {
      $emailErr = "邮箱是必需的";
    }
    else
    {
        $email = test_input($_POST["email"]);
        // 检测邮箱是否合法
        if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
        {
            $emailErr = "非法邮箱格式"; 
        }
    }
    
    if (empty($_POST["website"]))
    {
        $website = "";
    }
    else
    {
        $website = test_input($_POST["website"]);
        // 检测 URL 地址是否合法
        if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
        {
            $websiteErr = "非法的 URL 的地址"; 
        }
    }
    
    if (empty($_POST["comment"]))
    {
        $comment = "";
    }
    else
    {
        $comment = test_input($_POST["comment"]);
    }
    
    if (empty($_POST["gender"]))
    {
        $genderErr = "性别是必需的";
    }
    else
    {
        $gender = test_input($_POST["gender"]);
    }
}

function test_input($data)
{
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>

<h2>PHP 表单验证实例</h2>
<p><span class="error">* 必需字段。</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
   名字: <input type="text" name="name" value="<?php echo $name;?>">
   <span class="error">* <?php echo $nameErr;?></span>
   <br><br>
   E-mail: <input type="text" name="email" value="<?php echo $email;?>">
   <span class="error">* <?php echo $emailErr;?></span>
   <br><br>
   网址: <input type="text" name="website" value="<?php echo $website;?>">
   <span class="error"><?php echo $websiteErr;?></span>
   <br><br>
   备注: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
   <br><br>
   性别:
   <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?>  value="female">女
   <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?>  value="male">男
   <span class="error">* <?php echo $genderErr;?></span>
   <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>
</html>

L'effet de sortie est tel qu'indiqué à droite.

3. Explication pratique

1. Règles de vérification

28.png

2. Champs de texte

Les champs "Nom", "E-mail" et "Site Web" sont des éléments de saisie de texte, et les "Remarques" " Le champ est une zone de texte. Le code HTML est le suivant :

"Name": <input type="text" name="name">

E-mail : <input type="text" name ="email">

Site Web : <input type="text" name="website">

Remarques : <textarea name="comment" rows="5 " cols="40"></textarea>

3. Bouton radio

"Genre" Les champs sont des boutons radio et le code HTML ressemble à ceci :

Gender :

<input type="radio" name="gender" value="female">Female

<input type="radio" name="gender" value="male">Mâle

4.

    Le code du formulaire HTML est le suivant :
  • <form method="post" action="<?php echo htmlspecialchars($_SERVER[ "PHP_SELF "]);?>">

    Ce formulaire utilise la méthode method="post" pour soumettre des données.
  • Remarque : Qu'est-ce que la variable $_SERVER["PHP_SELF"] ?
$_SERVER["PHP_SELF"] est une variable super globale qui renvoie le nom de fichier de l'exécutable en cours d'exécution. script et racine du document liés.


Ainsi, $_SERVER["PHP_SELF"] enverra les données du formulaire à la page actuelle au lieu de passer à une autre page.

Remarque :

    Qu'est-ce que la méthode htmlspecialchars() ? La fonction
  • htmlspecialchars() convertit certains caractères prédéfinis en entités HTML.


  • Les caractères prédéfinis sont :
" Citation) Devenez '
  • & LT; (moins) pour devenir & lt;
  • & gt; (plus grand) pour devenir & gt ;
  • 5. À quoi faut-il faire attention dans les formulaires PHP ?

  • La variable $_SERVER["PHP_SELF"] peut être utilisée par des pirates !

Lorsque les pirates utilisent des liens HTTP de script intersite pour attaquer, la variable serveur $_SERVER["PHP_SELF"] sera également intégrée dans le script. La raison en est que les scripts intersites sont ajoutés au chemin du fichier exécutable, donc la chaîne $_SERVER["PHP_SELF"] contiendra le code du programme JavaScript derrière le lien HTTP. Remarque : XSS est également appelé CSS (Cross-Site Script), une attaque de script intersite. Des attaquants malveillants insèrent du code HTML malveillant dans une page Web Lorsqu'un utilisateur parcourt la page, le code HTML intégré dans la page Web sera exécuté, atteignant ainsi l'objectif particulier de l'utilisateur malveillant.

  • Spécifiez le nom de 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.

  • Considérez cependant 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>

Une balise de script a été ajoutée au code et une commande d'alerte a été ajoutée. 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 n'importe quel 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 fichier de code de la page peut protéger le code malveillant et le code peut modifier les variables globales ou obtenir les données du formulaire de l'utilisateur.

    6. Comment éviter que $_SERVER["PHP_SELF"] soit exploité ?

    • $_SERVER["PHP_SELF"] peut être transmis à la fonction htmlspecialchars() pour éviter d'être exploité.

    Le code du formulaire est le suivant :

    <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 utiliser la variable PHP_SELF, le résultat sera affiché comme suit :

    <form method="post" action="test_form.php/">< ;script>alert ('hacked')</script>">

    La tentative d'exploitation de cette vulnérabilité a échoué !

    7. Utilisez PHP pour valider les données du formulaire

    • Tout d'abord, nous traitons toutes les données soumises par l'utilisateur via la fonction htmlspecialchars() de PHP

    Lorsque nous utilisons la fonction htmlspecialchars(). , l'utilisateur essaie de soumettre le texte suivant. Domaine :

    <script>location.href('http://www.php.cn')</script>

    • Ce code ne sera pas exécuté car il sera enregistré en tant que code HTML échappé, comme indiqué ci-dessous :

    <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 le. l'utilisateur soumet le formulaire, nous ferons les deux choses suivantes :

    • Utilisez la fonction PHP trim() pour supprimer les caractères inutiles (tels que les espaces, les tabulations). , nouvelles lignes) dans les données d'entrée utilisateur

    • Utilisez la fonction PHP stripslashes() pour supprimer les barres obliques inverses dans les données d'entrée utilisateur()

    Écrivons ensuite ceci. filtrer les fonctions dans une fonction définie par nous, cela peut grandement améliorer la réutilisabilité du code.

    Nommez la fonction test_input(). Maintenant, nous pouvons détecter $_POST via la fonction test_input(). dans , le code du script est le suivant :

    <?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;
    }
    ?>

    4. Résumé

    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.

    Dans le chapitre suivant, nous présenterons comment vérifier les données saisies par l'utilisateur


    Formation continue
    ||
    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>php.cn</title> <style> .error {color: #FF0000;} </style> </head> <body> <?php // 定义变量并默认设置为空值 $nameErr = $emailErr = $genderErr = $websiteErr = ""; $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["name"])) { $nameErr = "名字是必需的"; } else { $name = test_input($_POST["name"]); // 检测名字是否只包含字母跟空格 if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameErr = "只允许字母和空格"; } } if (empty($_POST["email"])) { $emailErr = "邮箱是必需的"; } else { $email = test_input($_POST["email"]); // 检测邮箱是否合法 if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) { $emailErr = "非法邮箱格式"; } } if (empty($_POST["website"])) { $website = ""; } else { $website = test_input($_POST["website"]); // 检测 URL 地址是否合法 if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) { $websiteErr = "非法的 URL 的地址"; } } if (empty($_POST["comment"])) { $comment = ""; } else { $comment = test_input($_POST["comment"]); } if (empty($_POST["gender"])) { $genderErr = "性别是必需的"; } else { $gender = test_input($_POST["gender"]); } } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> <h2>PHP 表单验证实例</h2> <p><span class="error">* 必需字段。</span></p> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 名字: <input type="text" name="name" value="<?php echo $name;?>"> <span class="error">* <?php echo $nameErr;?></span> <br><br> E-mail: <input type="text" name="email" value="<?php echo $email;?>"> <span class="error">* <?php echo $emailErr;?></span> <br><br> 网址: <input type="text" name="website" value="<?php echo $website;?>"> <span class="error"><?php echo $websiteErr;?></span> <br><br> 备注: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea> <br><br> 性别: <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">女 <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">男 <span class="error">* <?php echo $genderErr;?></span> <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> </html>
    soumettreRéinitialiser le code
    • Recommandations de cours
    • Téléchargement du didacticiel
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!