四、PHP与Web页面交互
4.1 表单数据处理
PHP与Web页面的交互主要通过表单实现。表单可以使用GET或POST方法提交数据:
<!-- form.html -->
<!DOCTYPE html>
<html>
<body>
<h2>用户登录</h2>
<form action="login.php" method="post">
<label>用户名:</label>
<input type="text" name="username"><br>
<label>密码:</label>
<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
<?php
// login.php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = htmlspecialchars($_POST['username']);
$password = $_POST['password'];
echo "欢迎,{$username}!";
// 实际应用中这里会验证用户名密码
}
?>
4.2 GET与POST的区别
GET方法:
数据附加在URL后面传输(如 login.php?username=admin)
有长度限制(约2048字符)
不适合传输敏感信息(密码等)
适用于搜索、分页等操作
POST方法:
数据在HTTP请求体中传输
无长度限制
相对更安全
适用于登录、注册、文件上传等
4.3 数据安全处理
在处理用户输入时,安全永远是第一位的。以下是一些基本的安全实践:
<?php
// 防止XSS攻击
$userInput = $_POST['comment'];
$safeInput = htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
// 验证邮箱格式
$email = $_POST['email'];
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "邮箱格式正确";
} else {
echo "无效的邮箱格式";
}
?>
五、PHP与MySQL数据库操作
5.1 连接数据库
PHP支持多种方式操作MySQL数据库,推荐使用PDO(PHP Data Objects)扩展,它提供了统一的接口来访问多种数据库:
<?php
$host = 'localhost';
$dbname = 'test';
$username = 'root';
$password = '';
try {
// 创建PDO连接
$pdo = new PDO(
"mysql:host=$host;dbname=$dbname;charset=utf8mb4",
$username,
$password,
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]
);
echo "数据库连接成功";
} catch (PDOException $e) {
die("数据库连接失败:" . $e->getMessage());
}
?>
5.2 执行CRUD操作
CRUD(创建、读取、更新、删除)是数据库操作的基本功能。使用预处理语句可以有效防止SQL注入攻击:
<?php
// 查询数据(使用预处理语句)
$stmt = $pdo->prepare("SELECT * FROM users WHERE age > :age");
$stmt->execute(['age' => 18]);
$users = $stmt->fetchAll();
foreach ($users as $user) {
echo $user['username'] . ' - ' . $user['email'] . '<br>';
}
// 插入数据
$sql = "INSERT INTO users (username, email) VALUES (:username, :email)";
$stmt = $pdo->prepare($sql);
$stmt->execute([
'username' => '王五',
'email' => 'wangwu@example.com'
]);
// 更新数据
$sql = "UPDATE users SET email = :email WHERE username = :username";
$stmt = $pdo->prepare($sql);
$stmt->execute([
'email' => 'newemail@example.com',
'username' => '王五'
]);
// 删除数据
$sql = "DELETE FROM users WHERE username = :username";
$stmt = $pdo->prepare($sql);
$stmt->execute(['username' => '王五']);
?>
5.3 数据库操作最佳实践
始终使用预处理语句:防止SQL注入攻击
处理异常情况:使用try-catch捕获数据库错误
关闭连接:脚本执行结束后自动关闭,但也可以手动关闭:$pdo = null;
密码安全:使用password_hash()函数存储密码哈希值
<?php
// 安全的密码处理
$password = "user123";
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
// 验证密码
if (password_verify($inputPassword, $hashedPassword)) {
echo "密码正确";
}
?>
六、PHP高级特性
6.1 会话管理
PHP通过Session和Cookie来维护用户状态。Session数据存储在服务器端,Cookie存储在客户端:
<?php
// 启动会话
session_start();
// 设置会话变量
$_SESSION['user_id'] = 123;
$_SESSION['username'] = '张三';
// 设置Cookie(有效期1小时)
setcookie('remember_me', 'token_value', time() + 3600, '/');
// 读取会话
if (isset($_SESSION['username'])) {
echo "欢迎回来," . $_SESSION['username'];
}
// 销毁会话
session_unset();
session_destroy();
?>
6.2 面向对象编程
PHP支持面向对象编程(OOP),可以通过类和对象来组织代码:
<?php
// 定义类
class User {
// 属性
private $name;
private $email;
// 构造函数
public function __construct($name, $email) {
$this->name = $name;
$this->email = $email;
}
// 方法
public function introduce() {
return "我叫{$this->name},邮箱:{$this->email}";
}
// 静态方法
public static function createGuest() {
return new self("访客", "guest@example.com");
}
}
// 创建对象
$user1 = new User("李四", "lisi@example.com");
echo $user1->introduce();
// 调用静态方法
$guest = User::createGuest();
?>
6.3 错误处理与异常
使用异常处理机制可以更好地管理错误:
<?php
function divide($a, $b) {
if ($b == 0) {
throw new Exception("除数不能为零");
}
return $a / $b;
}
try {
$result = divide(10, 0);
echo "结果是:" . $result;
} catch (Exception $e) {
echo "捕获到异常:" . $e->getMessage();
} finally {
echo "无论是否异常都会执行";
}
?>