php实现登录上传图片
PHP 登录功能实现
用户登录功能需要结合表单处理、会话管理和数据库验证。以下是一个基础实现示例:
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
// 数据库验证(示例使用PDO)
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
header('Location: dashboard.php');
exit;
} else {
$error = "Invalid credentials";
}
}
?>
<form method="post">
<input type="text" name="username" required>
<input type="password" name="password" required>
<button type="submit">Login</button>
<?php if(isset($error)) echo "<p>$error</p>"; ?>
</form>
图片上传功能实现
图片上传需要处理文件接收、验证和存储:
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header('Location: login.php');
exit;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['image'])) {
$targetDir = "uploads/";
$fileName = basename($_FILES["image"]["name"]);
$targetFile = $targetDir . uniqid() . '_' . $fileName;
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
// 验证是否为真实图片
$check = getimagesize($_FILES["image"]["tmp_name"]);
if ($check === false) {
$error = "File is not an image";
}
// 验证文件大小(限制2MB)
elseif ($_FILES["image"]["size"] > 2000000) {
$error = "File is too large";
}
// 允许特定格式
elseif (!in_array($imageFileType, ['jpg', 'png', 'jpeg', 'gif'])) {
$error = "Only JPG, JPEG, PNG & GIF allowed";
}
// 移动文件到目标目录
elseif (move_uploaded_file($_FILES["image"]["tmp_name"], $targetFile)) {
$success = "Image uploaded successfully";
// 可选的数据库记录存储
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->prepare("INSERT INTO user_images (user_id, image_path) VALUES (?, ?)");
$stmt->execute([$_SESSION['user_id'], $targetFile]);
} else {
$error = "Error uploading file";
}
}
?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="image" accept="image/*" required>
<button type="submit">Upload</button>
<?php
if(isset($error)) echo "<p style='color:red'>$error</p>";
if(isset($success)) echo "<p style='color:green'>$success</p>";
?>
</form>
安全注意事项
确保上传目录不可执行脚本 设置正确的目录权限(通常755) 考虑对上传图片进行重命名防止路径遍历 实现CSRF保护机制 对文件内容进行二次验证,不依赖扩展名判断
数据库表结构示例
用户表结构:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);
图片表结构:

CREATE TABLE user_images (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
image_path VARCHAR(255) NOT NULL,
uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);






