web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}

web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}

index.php

(此处需要结合之前的文章验证是否登录:https://developer.aliyun.com/article/1481918?spm=a2c6h.13148508.setting.24.78f94f0eD8R7xx)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<?php
    if(isset($_COOKIE['username'])) {
        echo "帐户信息:<br/>";
        echo "用户名:" . $_COOKIE['username'] . "<br/>";
        echo '<a href="out.php">退出登录</a><br>';
        echo '<a href="floget.html">修改密码</a>';
        echo '<br><a href="upload.php">上传图片</a>';
        echo '<form action="upload.php" method="post" enctype="multipart/form-data">
              <label>文件名:
              <br><input type="text" placeholder="文件名称" name="image_user_name"><br>
              <br><input type="file" name="image_upload"></label><br>
              <br><button type="submit" name="upload">上传图片</button><br>
              </form>';
        echo '<form action="search.php" method=get" name="notice"> <!--action="search.php"-->
              <label>搜索图片:
              <br><input type="text" name="photo" placeholder="请输入图片名"><br>
              <br><button type="submit">搜索</button><br>
              </form>';
        echo '<form action="search.php" method=get" name="notice"> <!--action="search.php"-->
              <label>搜索图片:
              <br><input type="text" name="photo_user" placeholder="你想查询谁上传的图片"><br>
              <br><button type="submit">搜索</button><br>
              </form>';
        } else {
            echo '<h1>您未登录,请<a href="login.html" style="text-decoration:none;">点击登录</h1>';
        }

未登录:

屏幕截图 2024-05-02 084559.png

已登录:

屏幕截图 2024-05-02 084718.png

conn.php

<?php
$root_sevsername="localhost";
$root_username="root";
$root_password="123456";
$root_dbname="users";
// 连接到MySQL数据库
$conn= mysqli_connect($root_sevsername,$root_username,$root_password,$root_dbname);

upload.php

<?php
include "conn.php";//引用conn.php连接数据库
$cookie_name = $_COOKIE['username'];
$image_user_name = $_POST['image_user_name'];
//echo "<script>alert('$image_user_name');</script>";
if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}
// 检查上传文件是否存在
if (!isset($_FILES['image_upload'])) {
    echo "<script>alert('未上传文件,请重新上传!');location.href='index.php'</script>";
    exit;
}
// 生成新的随机文件名
$newFileName = uniqid() . ".png";
//echo "<script>alert('$newFileName');</script>";
// 获取上传文件相关信息
$image_name = $_FILES['image_upload']['name'];
$tmp_name = $_FILES['image_upload']['tmp_name'];
$file_type = $_FILES['image_upload']['type'];
$file_extension = strtolower(pathinfo($image_name, PATHINFO_EXTENSION));
$allowedTypes = array('png', 'gif', 'jpg');
$target_dir = "./image_upload/";
// 设置目标文件名(使用新生成的随机文件名)
$target_file = $target_dir . $newFileName;
$target_file1 = explode(".",$target_file);
// 检查文件类型和移动文件
if (in_array($file_extension, $allowedTypes)) {
    // 移动文件并更改文件扩展名为PNG(这里假设所有上传的图片都将被转换为PNG格式)
    if (move_uploaded_file($tmp_name, $target_file)) {
        // 若移动成功,记录数据库的新文件名与地址
        $address = $target_file;
        $address1 =$target_file1[1].'.'.$target_file1[2] ;
        // 预处理SQL语句并执行
        $stmt = mysqli_prepare($conn, "INSERT INTO `image_upload` (`image_user_name`,`image_name`, `image_address`, `image_user`) VALUES (?, ?, ?, ?)");
        mysqli_stmt_bind_param($stmt, "ssss",$image_user_name, $newFileName, $address1, $cookie_name); // 这里记录的是新文件名
        mysqli_stmt_execute($stmt);
        if (mysqli_stmt_errno($stmt)===0) {
            echo "<script>alert('上传成功!,文件位置: {$address},即将返回首页: ');window.location.href='index.php'</script>";
        } else {
            echo "<script>alert('上传失败!');location.href='index.php'</script>";
        }
    } else {
        echo "<script>alert('文件移动失败,请重试!');location.href='index.php'</script>";
    }
} else {
    echo "<script>alert('上传文件类型错误,请重新上传!');location.href='index.php'</script>";
}

图片上传:

屏幕截图 2024-05-02 090815.png

search.php

<?php
include "conn.php";//引用conn.php连接数据库
// 检查连接是否成功
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
$photo_name = $_GET['photo'] ?? null;
$photo_user = $_GET['photo_user'] ?? null;
// 准备SQL查询
if ($photo_name != null) {
    $search_sql = mysqli_prepare($conn, "SELECT `image_address` FROM `image_upload` WHERE `image_user_name`=?");
// 绑定参数
    mysqli_stmt_bind_param($search_sql, "s", $photo_name);
// 执行预处理语句
    $search_sql_executed = mysqli_stmt_execute($search_sql);
// 获取结果集(必须先执行才能获取结果)
    $search_result = mysqli_stmt_get_result($search_sql);
// 检查是否有匹配结果
    // 更改mysqli_fetch_array为mysqli_fetch_assoc以获取关联数组
    if ($search_result) {
        echo '<tr>';
        while ($row = mysqli_fetch_assoc($search_result)) { // 更改mysqli_fetch_array为mysqli_fetch_assoc并使用while循环遍历所有结果
            $url = "http://127.0.0.1" . $row['image_address'];
            // 直接在页面上输出图片
            echo '<td style="display: inline-block"><a href="' . $url . '" style=""><img src="' . $url . '" style="width: 400px;margin: 1px" ></a></td>'; // 使用<li>标签包裹每个图片,以形成有序或无序列表
        }
        echo '</tr>'; // 结束 ul 标签,假定你在循环外有一个开始的<ul>标签
    } elseif (!$search_sql_executed) {
        echo "<script>alert('搜索失败!');location.href='index.php'</script>";
    } else {
        echo "SQL执行错误:" . mysqli_error($conn);
    }
// 关闭预处理语句和数据库连接
    mysqli_stmt_close($search_sql);
    mysqli_close($conn);

}
//--------------------------------------------------------------------------
if($photo_user != null) {
    $search_sql = mysqli_prepare($conn, "SELECT `image_address` FROM `image_upload` WHERE `image_user`=?");
// 绑定参数
    mysqli_stmt_bind_param($search_sql, "s", $photo_user);
// 执行预处理语句
    $search_sql_executed = mysqli_stmt_execute($search_sql);
// 获取结果集(必须先执行才能获取结果)
    $search_result = mysqli_stmt_get_result($search_sql);
// 检查是否有匹配结果
    // 更改mysqli_fetch_array为mysqli_fetch_assoc以获取关联数组
    if ($search_result) {
        echo '<tr>';
        while ($row = mysqli_fetch_assoc($search_result)) { // 更改mysqli_fetch_array为mysqli_fetch_assoc并使用while循环遍历所有结果
            $url = "http://127.0.0.1" . $row['image_address'];
            // 直接在页面上输出图片
            echo '<td style="display: inline-block"><a href="' . $url . '" style=""><img src="' . $url . '" style="width: 400px;margin: 1px" ></a></td>'; // 使用<li>标签包裹每个图片,以形成有序或无序列表
        }
        echo '</tr>'; // 结束 ul 标签,假定你在循环外有一个开始的<ul>标签
    } elseif (!$search_sql_executed) {
        echo "<script>alert('搜索失败!');location.href='index.php'</script>";
    } else {
        echo "SQL执行错误:" . mysqli_error($conn);
    }
// 关闭预处理语句和数据库连接
    mysqli_stmt_close($search_sql);
    mysqli_close($conn);
}

搜索图片名(即使多个图片共用同一名)

屏幕截图 2024-05-02 090109.png

搜索谁上传了什么图片

屏幕截图 2024-05-02 090436.png

out.php

<?php
setcookie("username",time()-3600);
header('Refresh:3; url="login.html"');
echo "<h2>三秒后返回登入页面</h2>";

屏幕截图 2024-05-02 091124.png

MySQL结构样式(我用的phpMyAdmin图形化管理):

屏幕截图 2024-05-02 091519.png

屏幕截图 2024-05-02 091527.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
18天前
|
安全 关系型数据库 PHP
探索PHP:构建现代Web应用的基石
【8月更文挑战第29天】本文将带领读者深入理解PHP的核心概念,从基础语法到面向对象编程,再到数据库操作和安全性实践。我们将通过实例探讨如何利用PHP的灵活性和强大功能,来构建可靠、高效且安全的Web应用程序。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。让我们一起探索PHP的世界,释放它的潜力,打造下一代Web应用!
|
7天前
|
安全 PHP 开发者
PHP 7新特性及其对现代Web开发的影响
随着互联网技术的不断演进,PHP语言也在不断地更新迭代。PHP 7作为一次重大的升级,带来了许多引人注目的新特性,这些特性不仅优化了代码执行效率,还为开发人员提供了更多的便利和可能性。本文将探讨PHP 7的主要新特性,以及这些特性如何影响现代Web开发,帮助开发者更好地利用这些新工具来构建更快、更可靠的Web应用。
|
15天前
|
存储 关系型数据库 MySQL
PHP编程基础:构建你的第一个Web应用
【8月更文挑战第31天】 在数字时代的海洋里,每个人都可以成为自己命运的船长。本文将引领初学者启航,用PHP语言搭建起第一个属于自己的网站。我们将从浅入深,逐步探索PHP的世界,最终实现一个简单的个人博客系统。这不仅是一段代码的旅程,更是一次思维和技术的飞跃。
|
17天前
|
安全 前端开发 PHP
PHP与现代Web开发:构建高效和可扩展的应用程序
【8月更文挑战第29天】在这篇文章中,我们将深入探讨PHP如何适应现代Web开发的需求。我们将通过实际案例分析,揭示PHP的核心优势,并展示如何利用这些优势来构建高性能、可扩展的Web应用。文章不仅提供理论知识,还包括具体的代码示例,旨在帮助开发者更好地理解和运用PHP解决实际问题。
|
24天前
|
前端开发 JavaScript PHP
PHP在现代Web开发中的角色与挑战
【8月更文挑战第23天】本文将探讨PHP作为一门流行的服务器端脚本语言,如何在现代Web开发领域保持其重要性和活力。我们将从PHP的历史地位出发,分析其在当前技术环境中所面临的挑战,并讨论PHP社区如何通过创新来应对这些挑战。文章旨在为读者提供对PHP未来趋势的洞察,同时强调持续学习和技术更新的重要性。
|
23天前
|
安全 前端开发 JavaScript
PHP在现代Web开发中的角色与挑战
【8月更文挑战第23天】随着互联网技术的飞速发展,PHP作为一种流行的服务器端脚本语言,一直在Web开发领域扮演着重要角色。本文将探讨PHP在现代Web开发中的应用、面临的挑战以及如何克服这些挑战,为开发者提供一些启示和思考。
|
24天前
|
设计模式 安全 PHP
PHP的未来:探索现代Web开发的新方向
【8月更文挑战第22天】在不断变化的Web开发领域,PHP一直保持着它的地位,尽管面临着新兴语言和技术的挑战。本文将探讨PHP作为一门成熟的编程语言如何适应现代开发的需求,包括其生态系统的发展、性能优化以及与其他技术的集成。通过分析PHP的现状和未来趋势,我们将了解PHP在Web开发中的持续作用,并思考如何利用PHP的优势来构建更快、更安全、更易于维护的应用。
|
15天前
|
缓存 监控 PHP
深入PHP:构建高效Web应用的实用技巧
【8月更文挑战第31天】 本文旨在揭示如何通过实用的编程技巧提升PHP Web应用的性能和效率。我们将从基础优化谈起,逐步深入到高级策略,包括代码重构、数据库交互优化以及安全性增强。文章以简洁明了的语言和实际编码示例,带领读者理解并运用这些策略,从而在开发过程中做出更明智的决策。无论你是PHP新手还是资深开发者,这篇文章都能为你的项目带来实质性的提升。
|
15天前
|
缓存 中间件 PHP
Laravel 框架:优雅 PHP Web 开发的典范
【8月更文挑战第31天】
38 0
|
15天前
|
安全 Java 云计算
JSF 应用究竟何去何从?云端部署能否成为其全新突破点?快来一探究竟!
【8月更文挑战第31天】本文介绍了将JavaServer Faces(JSF)应用部署到云平台的过程。首先,根据成本、功能、可靠性和安全性选择合适的云平台。接着,展示了构建简单JSF应用的示例代码。最后,以AWS Elastic Beanstalk为例,详细说明了部署流程。部署至云端可提升应用的可用性、扩展性和安全性。
28 0