创建表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="w3.php" method="post">
<label for="name">name:</label>
<input type="text" id="name" name="username">
<label for="password">Password:</label>
<input type="password" id="password" name="password">
<input type="submit" value="Submit">
</form>
</body>
</html>
处理表单数据
<?php
if($_SERVER["REQUEST_METHOD"]=="POST"){
$username=$_POST['username'];
$password=$_POST["password"];
//处理表单数据,例如进行验证和存储到数据库
}
//数据验证
function validateInput($data,$trim=true,$strtolower=true){
$data=trim($data);
if($strtolower){
$data=strtolower($data);
}
return $data;
}
$username=validateInput($_POST['username']);
$password=validateInput($_POST['password'],false);
CSRF保护
跨站请求伪造(CSDF)是一种常见的安全威胁,为了提高安全性可以在表单中添加CSRF令牌。
//生成CSRF令牌
$_SESSION['csrf_token']=bin2hex(random_bytes(32));
//在表单中添加隐藏的CSRF令牌字段
echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'].'">';
防止XSS攻击
对用户输入进行适当的清理或使用HTML特殊字符转换函数
$username=htmlspecialchars($_POST['username']);
$password=htmlspecialchars($_POST['password']);
文件上传
<!-- 文件上传 -->
<input type="file" name="uploaded_file">
if(isset($_FILES['uploaded_file'])){
$file=$_FILES['uploaded_file'];
//进行文件验证和移动到新位置
move_uploaded_file($file['tmp_name'],'path/to/destination');
}
使用Session
表单经常与会话一起使用,以跟踪用户状态和保存临时数据
//使用session
session_start();
//存储表单数据到会话
$_SESSION['username']=$username;
$_SESSION['password']=$password;
//在会话中设置错误信息
$_SESSION['error_message']="Invalid username or password";
表单验证实例:
<?php
function validateInput($data,$trim=true,$strtolower=true){
$data=trim($data);
if($strtolower){
$data=strtolower($data);
}
return $data;
}
if($_SERVER["REQUEST_METHOD"]=="POST"){
$username=validateInput($_POST['$username']);
$password=validateInput($_POST["password"]);
//检查用户名是否为空
if(empty($username)){
die("Username id required.");
}
//检查密码长度
if(!preg_match("/^[a-zA-Z0-9]*$/", $username)){
die("Password must be at least 8 characters long.");
}
//假设的用户存储数组
$users=[
"john_doe"=>"password123",
"jane_smith"=>"mypassword"
];
//检查用户名和密码
if(!isset( $users[$username] )||$users[$username]!==$password){
die("Invalid username or password.");
}
//验证成功后进行后续操作
echo "Login successfully";
}