当前位置:首页 > PHP

php实现登录上传图片

2026-04-03 13:30:04PHP

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
);

图片表结构:

php实现登录上传图片

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)
);

标签: 上传图片php
分享给朋友:

相关文章

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口通…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面向对…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php 线程实现

php 线程实现

PHP 线程实现方法 PHP 本身是单线程语言,但可以通过扩展或库实现多线程功能。以下是几种常见的实现方式: 使用 pthreads 扩展 pthreads 是一个 PHP 扩展,允许在 PHP 中…