当前位置: 首页 > news >正文

基于WAMP环境的简单用户登录系统实现(v3版)(持续迭代)

目录

版本说明

实现环境:

流程逻辑框图:

数据库连接

登录页面:login.html

 登录处理实现:doLogin.php

用户欢迎页面:welcome.php

密码修改页面:change_password.html

修改处理:doChangePassword.php 

 用户注册页面:register.html

注册处理:doRegister.php


版本说明

v3实现功能:

数据库连接(php)

用户登录(*前后端判断输入是否为空(弹窗))

欢迎页面(*欢迎用户)

用户注册(*前后端判断输入是否为空(弹窗))

欢迎页面(*欢迎用户)

用户密码修改

实现环境:

Windows11、Apache、MySQL、PHP8

流程逻辑框图:

数据库连接

基于php的MySQL数据库联动代码模板

外部文件,使用文件包含:include 'session_conn.php';

(以下代码都是)

登录页面:login.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>登录</title><style type="text/css">form{position: absolute;top: 20%;left: 39%;}/* 控制input:name=login的元素居中 */input[ name='login' ]{width: 172px;display: block;margin-left: 28%;margin-top: 3%;}input[ name='register' ]{width: 173px;display: block;margin-left: 28%;margin-top: 3%;}</style><script type="text/javascript" src="./_js/login_web.js"></script>
</head><body><form onsubmit="return checkForm(this)" action="./_php/doLogin.php" method="post" ><fieldset><legend>用户登录-php登录与注册系统测试</legend><ul><li><label> 用户名:</label><input type="text" name="username" /></li><li><label>密&emsp;码:</label><input type="password" name="password" /></li><label></label>onclick="checkForm(form)" /> --><input type="submit" name="login" value="登录" />onclick="redirectToPage()" /> --><input type="button" name="register" value="注册" onclick="redirectTopage()" /></ul></fieldset></form>
</body></html>

login_web.js:

引入利用js阻断登录框空输入的判断:

function checkForm(form) {// 表单.文本域名.valueif (form.username.value == "" || form.username.value == null) {alert("用户名不能为空");form.username.focus();return false;}else if (form.password.value == "" || form.password.value == null) {alert("密码不能为空");form.password.focus();return false;}else {return true;}}
function redirectTopage() {window.location.href = './register.html';
}

登录处理实现:doLogin.php

<?php
include './session_conn.php';
session_start();
// $username = htmlspecialchars($_POST['username']);
$username = $_POST['username'];
$password = md5($_POST['password']);// $conn = mysqli_connect($host, $db_username, $db_pwd, $db_name);if (!$conn) {// 判断数据库连接状态// die(),输出一条信息,然后退出脚本.die('连接数据库失败!请检查数据库是否开启' . mysqli_connect_errno());
} else {if(isset($username) && !empty($username)) {if (isset($_POST['password']) && !empty($_POST['password'])) {$Logincheck_query = mysqli_query($conn, "select * from login_user where username = '$username' limit 1");// 从查询结果中取得一行作为结果集// $arr = mysqli_fetch_assoc($Logincheck_query);$arr = mysqli_fetch_assoc(mysqli_query($conn, "select * from login_user where username = '$username' limit 1"));if ($password == $arr['password']) {$_SESSION['username'] = $arr['username'];$_SESSION['id'] = $arr['id'];echo "<script language = 'javascript'> alert('登录成功!');location = './welcome.php' </script>";return true;} else {echo "<script language = 'javascript'> alert('密码错误');location = '../login.html' </script>";return false;}} else {echo "<script language = 'javascript'> alert('请补全登录信息');location = '../login.html' </script>";return false;}} else {echo "<script language='javascript'>alert('请完善账户信息!');location='../login.html'</script>";return false;}
}

用户欢迎页面:welcome.php

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>welcome</title><style>.table{text-align: center;width: 70%;padding: 15px;background-color: skyblue;border: 5px solid  green;border-collapse: collapse;margin-left: 17%;}input[type='button']{margin-left: 50%;}.change_password{margin-left: 70%;}</style><script>function redirectToPage(){window.location.href = "../htdocs/login.html";}</script>
</head>
<body><br/><br/><br/><br/><br/><br/><br/><br/><?phpinclude "./session_conn.php";   //数据库连接信息引入session_start();$user_id = $_SESSION['id'];if (empty($user_id)) {echo "<script language='javascript'> alert('请先登录');location='../login.html'</script>";exit;} else {$username = $_SESSION['username'];//    $conn = mysqli_connect('$host','$db_username','$db_pwd','$db_name');if (!$conn) {die('数据库连接失败!请检查数据库是否开启?'. mysqli_connect_error());}else {if (isset($_SESSION['username']) && !empty($_SESSION['username']) ) {echo "<h2 class='table'>登录成功,欢迎用户:$username </h2> ";echo "<a class = 'change_password' href = '../change_password.html'/>修改密码</a>";} else {// $_SESSION['username']  =false;die("超时,重新登录");}}echo "<input type='button' name='back_login' value='返回登录' onclick='redirectToPage()'/>";echo "<a href='close_login.php'/>用户注销</a>";}?>
</body>
</html>

密码修改页面:change_password.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>账户修改</title><style type="text/css">.title {text-align: center;}.change_password{text-align: center;}</style><script type="text/javascript" src="./_js/change_password.js"></script> 
</head><body><div class="box"><div class="title">change your password</div><!-- <form onsubmit="return check(this)" action="doChangePassword.php" method="post"> --><form  action="./_php/doChangePassword.php" method="post"><table class="change_password"><tr><th>当前用户名:</th><td><input type="text" name="username" /></td></tr><tr><th>原密码:</th><td><input type="password" name="OldPassword"></td></tr><tr><th>新密码:</th><td><input type="password" name="NewPassword" /></td></tr><tr><th>确认密码:</th><td><input type="password" name="ConfirmNewPassword" /></td></tr></table><input type="submit" name="confirm" value="确认修改"  /><input type="button" name="back" value="返回登录" onclick="redirectTopage()"></form></div>
</body></html>

change_password.js

引入利用js阻断空输入的判断:

function redirectTopage() {window.location.href = '../htdocs/login.html';
}
function check() {// if (form.OldPassword.value === "" && form.OldPassword.value === null && form.OldPassword.value === undefined) {if (form.OldPassword.value == "" && form.OldPassword.value == null) {alert("原密码为空");form.OldPassword.focus();return false;} else {// if (form.NewPassword.value === "" && form.NewPassword.value === null && form.NewPassword.value === undefined) {if (form.NewPassword.value == "" && form.NewPassword.value == null) {alert("输入新密码");form.NewPassword.focus();return false;}else {// if (form.ConfirmNewPassword.value === "" && form.ConfirmeNewPassword.value === null && form.ConfirmNewPassword.value === undefined) {if (form.ConfirmNewPassword.value == "" && form.ConfirmeNewPassword.value == null) {alert("请确认密码");form.ConfirmNewPassword.focus();return false;} else {return true;}}}
}
function   redirectTopage(){window.location.href = './login.html';
}

修改处理:doChangePassword.php 

<?php
include("session_conn.php");$change_password = [];
$change_password["old_password"] = md5($_POST["OldPassword"]);
$change_password["Newpassword"] = md5($_POST["NewPassword"]);
$change_password["confirm_Newpassword"] = md5($_POST["ConfirmNewPassword"]);
$MD5_NewPassword = $change_password["Newpassword"];if (!$conn) {die('数据库连接失败!' . mysqli_connect_errno());
} else {if (isset($_POST["OldPassword"]) && (strlen($_POST["OldPassword"]) != 0)) {if (isset($_POST["NewPassword"])  && (strlen($_POST["NewPassword"]) != 0)) {if (isset($_POST["ConfirmNewPassword"]) && (strlen($_POST["ConfirmNewPassword"]) != 0)) {if ($change_password["confirm_Newpassword"] == $change_password["Newpassword"]) {//  $MD5_NewPassword = $change_password["Newpassword"];$username = $_POST['username'];$sql_update = "update login_user set password = '$MD5_NewPassword' where username = '$username' ";if (mysqli_query($conn, $sql_update)) {echo "<script language='javascript'>alert('修改成功,请重新登录!');location='../login.html'</script>";return true;} else {echo "<script language='javascript'>alert('密码修改失败,请重新修改!');location='../change_password.html'</script>";return false;}} else {echo "<script language='javascript'>alert('密码确认错误');location='../change_password.html'</script>";return false;}} else {echo "<script language='javascript'>alert('请确认密码!');location = '../change_password.html'</script>";return false;}} else {echo "<script language='javascript'>alert('请输入新密码!');location='../change_password.html'</script>";return false;}} else {echo "<script language='javascript'>alert('请输入原密码信息!');location='../change_password.html'</script>";return false;}
}

 用户注册页面:register.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>用户注册</title>
</head>
<style type="text/css">.title {/* 文本排列到中央 */text-align: center;/* 行间距 *//* line-height: 80%;     */margin-top: 6%;margin-left: 8%;}.login {display: block;position: absolute;transform: translate(-50%, -61.8%);left: 56%;top: 20%;width: 450px;border: redius 8px;;background: rgba(255, 255, 255, 0.9);}input[type='submit'] {width: 173px;display: block;margin-left: 0%;margin-top: 3%;}input[type='button'] {width: 173px;display: block;margin-left: 0%;margin-top: 3%;}
</style>
<script type="text/javascript" src="./_js/register_web.js"></script>
<body><div class='box'><div class='title'>new user register</div><form onsubmit="return checkRegister(this)"  action="./_php/doRegister.php"  method="post" ><table class="login"><tr><th>用户名:</th><td><input type="text" name="username"></td></tr><tr><th>密码:</th><td><input type="password" name="password" ></td></tr><tr><th>确认密码:</th><td><input type="password" name="repassword" ></td></tr><tr><th></th><td><input type="submit" value="注册完成" /></td><td><input type="button" value="返回登陆" onclick=" redirectTopage() " /></td></tr></table></form></div></body></html>

 register_web.js

注册引导

function checkRegister(form) {if (form.username.value == "" || form.username.value == null) {alert("!请建立新用户名");form.username.focus();return false;} else {if (form.password.value == "" || form.password.value == null) {alert("!需要输入注册密码");form.password.focus();return false;} else {if (form.repassword.value == "" | form.repassword.value == null) {alert("!需要确认密码");form.repassword.focus();return false;} else {if (form.password.value == form.repassword.value) {return true;} else {alert("!确认密码不一致");form.repassword.focus();}}}}}function   redirectTopage(){window.location.href = './login.html';
}

注册处理:doRegister.php

<?php
include 'session_conn.php';$data = [];
//  $data['$username'] = htmlspecialchars($_POST['username']);
// $data['$username'] = $_POST['username'];
//  $username = $data['username'];
$username = $_POST['username'];$data['password'] = md5($_POST['password']);
$data['repassword'] = md5($_POST['repassword']);
$sql_select = "select * from login_user where username = '$username' limit 1;";
$sql_id = "select id from login_user";
$result_select = mysqli_query($conn, $sql_select);if (mysqli_num_rows($result_select) != 0) {echo "<script language='javascript'>alert('该用户已存在,请更换用户名!');location='../register.html'</script>";//释放查询结果mysqli_free_result($result_select);
} else {// 先判断是否存在,再判断是否为空if (!empty($data['password']) && !empty($data['repassword'])) {if ($data['repassword'] == $data['password']) {$password  = $data['repassword'];// $result_sql_id = mysqli_query($conn, $sql_id);$result_id = mysqli_num_rows(mysqli_query($conn, $sql_id));$result_new_id = $result_id + 1;$sql_insert = "insert into login_user(id,username,password) values('$result_new_id','$username','$password')";if (mysqli_query($conn, $sql_insert)) {echo "<script language='javascript'>alert('注册成功请重新登录!');location = '../login.html'</script>";mysqli_refresh($conn,MYSQLI_REFRESH_TABLES);mysqli_close($conn);return true;} else {echo "<script language='javascript'>alert('注册失败请重新注册!');location='../register.html'</script>";return false;}} else {echo "<script language='javascript'>alert('确认密码错误!');location='../register.html'</script>";return false;}} else {echo "<script language='javascript'>alert('请完善密码。');location='../register.html'</script>";return false;}
}

相关文章:

基于WAMP环境的简单用户登录系统实现(v3版)(持续迭代)

目录 版本说明 实现环境&#xff1a; 流程逻辑框图&#xff1a; 数据库连接 登录页面&#xff1a;login.html 登录处理实现&#xff1a;doLogin.php 用户欢迎页面&#xff1a;welcome.php 密码修改页面&#xff1a;change_password.html 修改处理&#xff1a;doChangePa…...

大语言模型与多模态大模型loss计算

文章目录 前言一、大语言模型loss计算1、loss计算代码解读2、构建模型输入内容与label标签3、input_ids与labels格式 二、多模态大模型loss计算方法1、多模态loss计算代码解读2、多模态输入内容2、大语言模型输入内容3、图像embending如何嵌入文本embeding 前言 如果看了我前面…...

线上研讨会 | CATIA助力AI提升汽车造型设计

报名链接&#xff1a; 2024探索之旅第二季...

Unity新输入系统 之 InputAction(输入配置文件最基本的单位)

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​ 首先你应该了解新输入系统的构成结构&#xff1a;Unity新输入系统结构概览-CSDN博客 Input System - Unity 手册 1.In…...

【3】MySQL的安装即启动

目录 一.下载 二.安装 三.启动 一.下载 二.安装 安装MySQL时遇到的Initializing database错误&#xff1a;推荐下面的博客&#xff08;简单就是电脑名不要出现中文&#xff09; https://blog.csdn.net/m0_52775858/article/details/123705566 三.启动 PS&#xff1a;cmd要…...

变“金点子”为“好应用”,合合信息智能文档处理技术助力大学生探索AI创新边界

谈“糖”色变、追求养生、低卡生活……这些热门词汇频频在社交媒体上掀起讨论热潮。有这样一批年轻人不但捕捉到了这些词汇背后真实的用户需求&#xff0c;并且正在利用AI技术寻找解决之道。 近日&#xff0c;“中国大学生服务外包创新创业大赛”&#xff08;以下简称“服创大…...

央行重提P2P存量业务化解,非吸案开始翻旧账?

沉寂已久的P2P&#xff0c;又突然以另一种意想不到的形式回到公众视野了。2018年全国P2P坍塌式暴雷&#xff0c;平台老板“跑路”“判刑”的消息一时间你方唱罢我登场。当年的某凰金融、某租宝、某信贷等赫赫有名的网贷平台传出的消息无非两类——查封或跑路&#xff0c;这几年…...

8B 端侧小模型 | 能力全面对标GPT-4V!单图、多图、视频理解端侧三冠王,这个国产AI开源项目火爆全网

这两天&#xff0c; Github上一个 国产开源AI 项目杀疯了&#xff01;一开源就登上了 Github Trending 榜前列&#xff0c;一天就获得将近600 star。 这个项目就是国内大模型四小龙之一面壁智能最新大打造的面壁「小钢炮」 MiniCPM-V 2.6 。它再次刷新端侧多模态天花板&#xf…...

汽车免拆诊断案例 | DAF(达富)汽油尾气处理液故障警示

故障现象 距离我上次在货卡上工作已经有一段时间了&#xff0c;让它们在道路上保持安全行驶是非常重要的。因此&#xff0c;当故障警示灯亮起时&#xff0c;我们需要迅速找到问题方向以及排除故障。 车辆的仪表板亮起多个故障灯以及警示灯&#xff0c;我们需要用解码器查找触…...

图论算法

目录 1.引言 2.图论基础 3.Dijkstra算法 3.1 算法背景与概述 3.2 算法原理 3.3 算法步骤 3.4 示例说明 3.5 复杂度分析 3.6 优缺点及应用场景 4.Floyd-Warshall算法 4.1 算法背景与概述 4.2 算法原理 4.3 算法步骤 4.4 示例说明 4.5 复杂度分析 4.6 优缺点及应用…...

手抖跟饮食有关系吗?

手抖&#xff0c;医学上称为震颤&#xff08;tremor&#xff09;&#xff0c;是指手部或其他身体部位的不自主抖动。饮食在某种程度上与手抖相关&#xff0c;但并非唯一的因素。以下是饮食与手抖之间可能存在的关系&#xff1a; 1. 咖啡因摄入&#xff1a;咖啡因是一种刺激神经…...

59. 螺旋矩阵 II

59. 螺旋矩阵 II 题目链接&#xff1a;59. 螺旋矩阵 II 代码如下&#xff1a; class Solution { public:vector<vector<int>> generateMatrix(int n) {if(n1){return {{1}};}vector<vector<int>> res(n,vector<int>(n));int num1;int left0,r…...

shiro注解不起作用:shiro进行权限校验时,@RequireRoles(“admin“)注解不起作用的解决方法

今天在写前后端分离项目时&#xff0c;用jwt加shiro进行登录权限校验时&#xff0c;RequireRoles("admin")注解不起作用&#xff0c;记录一下。 前提&#xff1a;数据库里面的user_type代表用户类型 &#xff1a;0普通用户 &#xff1b;1&#xff1a;专家&#xff1…...

ZABBIX邮件监控发送信息

前言&#xff1a;本地邮箱&#xff0c;第三方邮箱&#xff0c;第三方邮箱加脚本 1、本地邮箱测试 #cd /home # ls laiyingx [rootzabbix ~]# vim /etc/postfix/main.cf /mydestination $myhostname, localhost.$mydomain, localhost,$mydomain [rootzabbix ~]# systemctl…...

Java核心 - 减少循环次数的必要性及其实现方法

作者&#xff1a;逍遥Sean 简介&#xff1a;一个主修Java的Web网站\游戏服务器后端开发者 主页&#xff1a;https://blog.csdn.net/Ureliable 觉得博主文章不错的话&#xff0c;可以三连支持一下~ 如有疑问和建议&#xff0c;请私信或评论留言&#xff01; 前言 在 Java 编程中…...

国产麒麟系统下U盘只读文件系统问题

问题描述 国产麒麟系统下U盘只读文件系统问题 解决方案&#xff1a; 提示&#xff1a;卸载U盘&#xff0c;然后重新挂载&#xff0c;修复。 1.插入U盘并用df -h查看U盘信息: 命令&#xff1a;df -h 找到自己的U盘信息&#xff08;可以根据容量大小来找&#xff09;&#xff…...

STM32-定时器-定时器中断-PWM调光

1、TIM 定时器 定时器是一种电子设备或软件组件&#xff0c;用于在预定时间后触发一个事件或操作。它可以基于时钟信号或其他周期性信号来工作&#xff0c;并且可以用来测量时间间隔、生成延时、触发中断等。 时钟信号 时钟信号是一种周期性的电信号&#xff0c;用于同步电路中…...

【学习笔记】用线段树维护区间计数问题

前言 简单的区间计数问题可能直接推式子就行了。 但有些问题必须要数据结构维护。线段树就是一个比较好的处理区间的数据结构。 Gym102222L 思路 满足条件的区间特征&#xff1a; max ⁡ { a i } − min ⁡ { a i } 1 − c n t 0 \max\{a_i\}-\min\{a_i\}1-cnt0 max{ai​}…...

4章11节:用R做数据重塑,数据的特征缩放和特征可视化

由于数据往往复杂多样,其中不同的特征变量可能具有不同的数值范围,这使得特征缩放成为一个必要的步骤。例如,当我们要处理医学数据时,对于同一个患者,肺活量的变化范围可能在1000到5000之间,而体重指数(BMI)的变化范围则可能在10到50之间,其他一些生理指标甚至可能处于…...

LVS-NAT + LVS-DR

LVS 现在lvs已经是linux内核标准的一部分&#xff0c;使用lvs可以达到的技术目标是&#xff1a;通过linux达到负载均衡技术和linux操作系统实现一个高性能高可用的linux服务器集群&#xff0c;他具有良好的可靠性&#xff0c;可延展性和可操作性&#xff0c;从而以低廉的成本实…...

OpenClaw多模态飞书助手:Qwen3-VL:30B实战详解

OpenClaw多模态飞书助手&#xff1a;Qwen3-VL:30B实战详解 1. 为什么需要多模态飞书助手&#xff1f; 去年夏天&#xff0c;我负责一个跨部门协作项目时&#xff0c;每天要处理上百条飞书消息。最头疼的是同事发来的各种截图——有的是数据报表需要整理&#xff0c;有的是会议…...

MGeo门址地址解析效果展示:高德×达摩院多模态模型真实解析案例集

MGeo门址地址解析效果展示&#xff1a;高德达摩院多模态模型真实解析案例集 1. 引言&#xff1a;当AI开始“读懂”地址 想象一下&#xff0c;你收到一条外卖订单&#xff0c;地址写着“朝阳区望京SOHO T3 B座15楼1501室&#xff0c;到了打电话”。对于骑手来说&#xff0c;这…...

闽北哥-柔弱胜刚强:真正的强者,从不硬碰

柔弱胜刚强 ——真正的强者&#xff0c;从不硬碰“为什么真正厉害的人&#xff0c; 看起来都有些柔弱&#xff1f;&#x1f33f; 因为—— 刚强自毁&#xff0c;柔弱长存。&#x1f52e; 这不是权谋&#xff0c; 而是—— 天地运行的铁律。”&#x1f30a; 一、误解千年&#x…...

光伏储能管理系统:绿虫赋能,破解行业流程痛点

光伏储能产业迎来高速发展期&#xff0c;但其全业务流程的复杂性却成为企业发展的桎梏。从项目开发的多环节审批&#xff0c;到建设阶段的进度质量管控&#xff0c;再到运维结算的数据协同&#xff0c;各环节割裂、部门协作不畅、数据杂乱无章等问题频发&#xff0c;不少企业负…...

Mojo调用Python模块性能翻倍?深度剖析混合编程内存管理、GIL绕过与ABI兼容性(附实测基准数据)

第一章&#xff1a;Mojo与Python混合编程案例源码分析Mojo 作为兼具 Python 兼容性与系统级性能的新一代编程语言&#xff0c;其与 Python 的混合编程能力是实际工程落地的关键。以下通过一个典型场景——在 Python 主程序中调用 Mojo 实现的高性能向量加法函数——展开源码级剖…...

Arduino轻量级哈希表UnorderedMap实战指南

1. 项目概述UnorderedMap是一款专为 Arduino 平台设计的轻量级哈希表&#xff08;Hash Table&#xff09;实现&#xff0c;其核心目标是在资源极度受限的微控制器环境中提供高效、可靠、内存可控的键值对&#xff08;Key-Value Pair&#xff09;存储能力。它并非 C STLstd::uno…...

ViGEmBus虚拟手柄驱动全栈技术指南:从内核原理到游戏控制革新

ViGEmBus虚拟手柄驱动全栈技术指南&#xff1a;从内核原理到游戏控制革新 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 一、认知虚拟手柄技术&#xff1a;…...

如何用ChatALL实现AI智能协同:一次提问,多模型对比的解决方案

如何用ChatALL实现AI智能协同&#xff1a;一次提问&#xff0c;多模型对比的解决方案 【免费下载链接】ChatALL Concurrently chat with ChatGPT, Bing Chat, Bard, Alpaca, Vicuna, Claude, ChatGLM, MOSS, 讯飞星火, 文心一言 and more, discover the best answers 项目地…...

HertzBeat与Prometheus兼容性详解:平滑迁移和生态整合终极指南

HertzBeat与Prometheus兼容性详解&#xff1a;平滑迁移和生态整合终极指南 Apache HertzBeat是一款功能强大的开源实时监控系统&#xff0c;与Prometheus生态系统完美兼容&#xff0c;提供无代理、高性能集群和自定义监控功能。&#x1f680; 作为新一代监控工具&#xff0c;H…...

asp毕业设计下载(全套源码+配套论文)——基于asp+access的公司门户网站设计与实现

基于aspaccess的公司门户网站设计与实现&#xff08;毕业论文程序源码&#xff09; 大家好&#xff0c;今天给大家介绍基于aspaccess的公司门户网站设计与实现&#xff0c;更多精选毕业设计项目实例见文末哦。 文章目录&#xff1a; 基于aspaccess的公司门户网站设计与实现&a…...