本节将会演示一个PHP表单验证的整个过程。

整个过程放在test.php里,总共分成两个部分,一个是HTML页面提交表单信息,一个是php脚本进行表单验证,并在提交合法数据后做出“注册成功!”的提示。

<?php
/* PHP脚本处理表单信息 */
error_reporting(E_ALL);//开启所有报错
ini_set('display_errors', 1);//允许页面展示报错

/* 验证函数准备 */
// 电话号码验证函数-f1()
function f1($phone) {
    // 去除空格和特殊字符
    $phone = preg_replace('/\s+/', '', $phone);
    
    // 验证中国手机号格式:1开头,第二位3-9,共11位数字
    if (preg_match('/^1[3-9]\d{9}$/', $phone)) {
        return ['valid' => true, 'message' => '电话号码格式正确'];
    } else {
        return ['valid' => false, 'message' => '电话号码格式不正确,请输入11位有效手机号'];
    }
}

// 邮箱验证函数-f2
function f2($email) {
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        return ['valid' => true, 'message' => '邮箱格式正确'];
    } else {
        return ['valid' => false, 'message' => '邮箱格式不正确'];
    }
}

// 只处理POST请求
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    echo "<h2>收到的POST数据:</h2>";
    
    // 获取并清理数据
    $name = trim($_POST['name'] ?? '');
    $tel = trim($_POST['tel'] ?? '');
    $email = trim($_POST['email'] ?? '');
    
    // 验证数据
    $ret_tel = f1($tel);
    $ret_email = f2($email);
    
    // 显示原始数据
    echo "姓名:$name<br>";
    echo "电话号码:$tel - " . $ret_tel['message'] . "<br>";
    echo "邮箱:$email - " . $ret_email['message'] . "<br>";
    
    // 检查所有验证是否通过
    if ($ret_tel['valid'] && $ret_email['valid'] && !empty($name)) {
        echo "<h3 style='color: green;'>注册成功!</h3>";
    } else {
        echo "<h3 style='color: red;'>数据验证失败,请检查输入</h3>";
    }
      
    echo '<hr><a href="test.php">返回</a>';
    exit;
}
?>
<!DOCTYPE html>
<html>
<head>
    <title>POST测试 - 表单验证</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 600px;
            margin: 0 auto;
            margin-left: 50px;
            padding: 20px;
        }
        .form-group {
            margin-bottom: 15px;
        }
        label {
            display: block;
            margin-bottom: 5px;
            font-weight: bold;
        }
        input[type="text"] {
            width: 100%;
            padding: 8px;
            border: 1px solid #ddd;
            border-radius: 4px;
            box-sizing: border-box;
        }
        input[type="text"]:focus {
            border-color: #4CAF50;
            outline: none;
        }
        .error {
            color: red;
            font-size: 12px;
            margin-top: 5px;
        }
        .hint {
            color: #666;
            font-size: 12px;
            margin-top: 5px;
        }
        button {
            background-color: #4CAF50;
            color: white;
            padding: 10px 20px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }
        button:hover {
            background-color: #45a049;
        }
    </style>
</head>
<body>
    <h1>Dotcpp编程 —— 表单验证实例</h1>
    
    <form method="POST" action="test.php" >
        <div class="form-group">
            <label for="name">姓名:</label>
            <input type="text" id="name" name="name" value="Dotcpp用户" required>
            <div class="hint">请输入您的姓名</div>
        </div>
        
        <div class="form-group">
            <label for="tel">电话号码:</label>
            <input type="text" id="tel" name="tel" value="13345678910" 
                   pattern="1[3-9]\d{9}" 
                   title="请输入11位有效手机号码(以13-19开头)"
                   required>
            <div class="hint">格式:1开头,第二位3-9,共11位数字</div>
            <div class="error" ></div>
        </div>
        
        <div class="form-group">
            <label for="email">邮箱:</label>
            <input type="text" id="email" name="email" value="123456@dotcpp.com" required>
            <div class="hint">请输入有效的邮箱地址</div>
            <div class="error" ></div>
        </div>
        
        <button type="submit">提交</button>
    </form>

</body>
</html>

效果展示:

1. 填写页面信息(页面有默认值的,也可以不用填写):

填写HTML表单

2. 点击提交,可以看到“注册成功”。(默认信息是符合条件的,读者可以试试其他不合格的数据检查报错)

数据合法

总结:通过完成整个表单验证实例,我们应该掌握基本的表单验证技巧和具体验证方法。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)