PHP表单使用实例

本文介绍了PHP如何实现Web表单验证,包括名字、邮件、网址和性别的合法性检查。当用户输入错误时,会显示红色错误提示,所有信息合法后则展示用户输入。讲解了$_SERVER['PHP_SELF']、htmlspecialchars()、$_SERVER['REQUEST_METHOD']等关键概念,并涉及trim()、stripslashes()函数以及正则表达式的应用,如^和$、w、d等,用于验证字符串格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Web表单的功能就是让浏览者和网站有一个互动的平台。表单主要用来在网页中发送数据到服务器。例如,你注册信息是所使用的表单,当你填写完信息时,你要提交(submit),提交就是将你表单中的内容从客户端浏览器传送到服务器端,经过PHP程序进行处理后,再将用户所需要的信息传递回客户端浏览器上,通过获取用户的信息,使PHP与Web表单实现交互。

本文实现了一个表单验证的列子:
1:通过用户输入的名字,邮件,网址,性别等信息,并对相关信息进行合法性验证。
2:用户输入错误,提示红色错误提示信息。
3:输入信息全部合法之后,才显示用户的输入信息。

表单验证代码如下:

<html>
<head>
   <meta charset="utf-8">
   <title>PHP学习</title>
</head>


<style>
   .error {color: #FF0000;}
</style>
<body>
<?php
   function test_input($data)
    {
       $data = trim($data);
       $data = stripslashes($data);
       $data = htmlspecialchars($data);
       return $data;
    }

   //  定义变量并默认设置为空值
   $name = $email = $gender = $comment = $website = "";
   $nameErr = $emailErr = $genderErr = $commentErr = $websiteErr ="";
   $flag = true;
   if ($_SERVER["REQUEST_METHOD"] == "POST")
    {
       if (empty($_POST["name"])){
           $nameErr = "姓名是必须填的";
           $flag = false;
       } else {
           $name = test_input($_POST["name"]);
           //  检查姓名是否包含字母和空白字符
           if (!preg_match("/^[a-zA-Z ]*$/", $name)){
                $nameErr = "只允许字母和空格";
                $flag = false;
           }
       }

       if (empty($_POST["email"])){
           $emailErr = "邮件是必填的";
           $flag = false;
       } else {
           $email = test_input($_POST["email"]);
           //  检查邮件地址语法是否有效
           if(!preg_match("/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/",$email)){
                $emailErr = "无效的email格式";
                $flag = false;
           }
       }

       if (empty($_POST["website"])){
           $flag = false;
       } else {
           $website = test_input($_POST["website"]);
           //  检查URL地址语法是否有效(正则表达式也允许URL中的斜杠)
           if(!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)){
               $websiteErr = "无效的URL";
                $flag = false;
           }
       }

       if (empty($_POST["gender"])){
           $genderErr = "性别是必选的";
           $flag = false;
       } else {
           $gender = test_input($_POST["gender"]);
        }

       if (!empty($_POST["comment"])){
           $comment = test_input($_POST["comment"]);
       }
    }
?>

<h2>PHP 表单验证实例</h2>
<form method="post" action="<?php echohtmlspecialchars($_SERVER["PHP_SELF"]);?>">
    名字:<inputtype="text" name="name">
   <span class="error">*<?php echo$nameErr;?></span>

   <br><br>
   E-mail:<input type="text" name="email">
   <span class="error">* <?php echo$emailErr;?></span>
   <br><br>
    网址:<inputtype="text" name="website">
   <span class="error">* <?php echo$websiteErr;?></span>
   <br><br>
    备注:<textareaname="comment" rows="5"cols="40"></textarea>
   <br><br>
    性别:
   <input type="radio" name="gender"value="female"><input type="radio" name="gender"value="male"><span class="error">* <?php echo$genderErr;?></span>
   <br><br>
   <input type="submit" name="submit" value="提交">
</form>

<?php
   if ($_SERVER["REQUEST_METHOD"] == "POST" and $flag)
    {
       echo "<h2>您输入的内容是:</h2>";
       echo "名字:" .$name . "<br>";
       echo "E-mail:" . $email . "<br>";
       echo "网址:" . $website . "<br>";
       echo "备注:" . $_POST["comment"] . "<br>";
       echo "性别:" . $_POST["gender"] . "<br>";
    }
?>
</body>
</html>

初始状态:
这里写图片描述

运行结果:
这里写图片描述

用到的知识:
1:$_SERVER[“PHP_SELF”]是一个超全局变量,返回房钱执行脚本的文件名。

2:htmlspecialchars()函数把特殊字符转化为HTML实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 < 和 > 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。

3:可以通过$_SERVER[“REQUEST_METHOD”]来检测表单是否被提交。

4:在用户提交表单时,应进行的处理:(通过 PHP trim() 函数)去除用户输入数据中不必要的字符(多余的空格、制表符、换行);(通过 PHP stripslashes() 函数)删除用户输入数据中的反斜杠(\)。

5:使用正则表达式验证字符串是否符合条件:
正则表达式简单介绍
preg_match ( string ,string字符串 [, array &])正则变量,匹配结果变量里。如果没有匹配到结果返回0。
^表示开始;$表示结束。
在正则表达式中字母使用\w、而数字使用\d(\D表示非数字)来表示
• + 表示一个或者多个
• * 表示0个或者多个
• ? 表示有或者没有
• {n} 表示具体几位
• {m,n} 表示大于m个,小于n个
使用或条件可以用来匹配字符串,如果仅仅是单个的字母或者字符,则可以使用范围表示
使用[]可以表示一个字符的取值范围
‘/[a0.]/’可以匹配包含了a或者0或者.的任意字符串
另外,正则表达式还可以使用-来表示一组范围
• [a-z] 表示小写的26个字母中的任意一个
• [A-Z] 表示一个大写字母
• [0-9] 表示一位十进制数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值