一个真实可用的登录界面!

embedded/2024/10/7 13:35:58/

需要工具:

MySQL数据库、vscode上的php插件PHP Server等

项目结构:

login

| --backend

        | --database.sql

        |--login.php

        |--welcome.php

|--index.html

|--script.js

|--style.css

项目开展

index.html:

        首先需要一个静态网页,在前面已经讲了很多有关的代码,这里也是常规的,但是这里我们需要post到一个php页面,请注意。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录</title><link rel="stylesheet" href="style.css">
</head>
<body><div class="login-container"><h1>登录</h1><form action="backend/login.php" method="post"><div class="input-group"><label for="username">用户名:</label><input type="text" id="username" name="username" required></div><div class="input-group"><label for="password">密码:</label><div class="input-group-password"><input type="password" id="password" name="password" required><button type="button" id="toggle-password" aria-label="显示/隐藏密码"></button></div><div id="message"></div></div>                               <div class="input-group"><button type="submit">Login</button></div></form></div><script src="script.js"></script>
</body>
</html>

script.js :

        js主要用来实现表单提交、记住用户名等内容,不是本次重点,有问题可以参考之前邮箱注册提交那一篇。

javascript">document.addEventListener('DOMContentLoaded', function () {const loginForm = document.querySelector('form');const usernameInput = document.getElementById('username');const passwordInput = document.getElementById('password');const messageElement = document.getElementById('message'); // 使用已有的消息显示元素// 表单提交事件loginForm.addEventListener('submit', function (event) {if (usernameInput.value.trim() === '' || passwordInput.value.trim() === '') {event.preventDefault(); // 阻止表单提交messageElement.textContent = '用户名和密码不能为空';return false;}// 清除之前的消息messageElement.textContent = '';});// 记住用户名const savedUsername = localStorage.getItem('username');if (savedUsername) {usernameInput.value = savedUsername;}usernameInput.addEventListener('change', function () {localStorage.setItem('username', usernameInput.value);});
});

style.css:

body {font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;background-color: #f7f7f7;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;background-image: linear-gradient(to right, #f7f7f7, #d6d6d6);
}.login-container {background-color: white;padding: 30px;border-radius: 10px;box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);width: 350px;text-align: center;transition: box-shadow 0.3s ease;
}.login-container:hover {box-shadow: 0 15px 40px rgba(0, 0, 0, 0.2);
}.login-container h1 {color: #333;font-size: 26px;margin-bottom: 25px;letter-spacing: 1px;
}.input-group {margin-bottom: 15px;display: flex;flex-direction: column;align-items: flex-start;width: 100%;
}.input-group-password {position: relative; /* 保持输入框和按钮在同一容器中 */width: 100%;
}input[type="password"] {width: 10%;padding: 0px;padding-right: 0px; /* 为显示密码按钮预留更多空间 */border: 1px solid #ccc;border-radius: 5px;font-size: 16px;color: #333;box-sizing: border-box;transition: border-color 0.3s ease, box-shadow 0.3s ease;
}input[type="password"]:focus {outline: none;border-color: #5c67fb;box-shadow: 0 0 10px rgba(92, 103, 251, 0.5);
}#toggle-password {position: absolute;right: 10px; /* 调整为紧贴输入框的右侧 */top: 50%; /* 使按钮垂直居中 */transform: translateY(-50%);/* background-color: transparent; */border: none;cursor: pointer;font-size: 18px; /* 图标大小 */color: #5c67fb;padding: 0;
}input[type="text"], /* 确保点击显示图标后,输入框正常切换为 text 类型 */
input[type="password"] {width: 100%;padding: 12px;padding-right: 40px; /* 为按钮留出更多空间 */border: 1px solid #ccc;border-radius: 5px;font-size: 16px;color: #333;box-sizing: border-box;transition: border-color 0.3s ease, box-shadow 0.3s ease;
}button {width: 100%;padding: 14px;background-color: #5c67fb;border: none;color: white;border-radius: 8px;font-size: 16px;cursor: pointer;transition: background-color 0.3s ease;margin-top: 15px;
}button:hover {background-color: #4a54e1;
}button:active {background-color: #3c45b9;
}button:focus {outline: none;box-shadow: 0 0 5px rgba(92, 103, 251, 0.5);
}#message {color: red;font-size: 14px;margin-top: 10px;text-align: left;
}@media (max-width: 768px) {.login-container {width: 85%;padding: 20px;}
}@media (max-width: 600px) {.login-container {width: 90%;padding: 15px;}
}

login.php

        php是这次的重点,首先需要连接数据库,这个就需要下载vscode中的MySQL插件,下载完成之后在左边就会有图标:

        点击就可以创建连接,输入你的MySQL账号密码:

         连接成功后,输入下面的代码,注意把username和password改成你自己的:

php"><?php
// 连接数据库
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "mydatabase";// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);// 检查连接
if ($conn->connect_error) {die("Connection failed: " . $conn->connect_error);
}// 获取表单数据
$username = $_POST['username'];
$password = $_POST['password'];// 防止 SQL 注入
$username = $conn->real_escape_string($username);
$password = $conn->real_escape_string($password);// 哈希用户输入的密码
// $hashed_password = password_hash($password, PASSWORD_DEFAULT);// 验证用户
$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = $conn->query($sql);if ($result->num_rows > 0) {// 输出信息echo "Login successful!";// 这里可以添加登录成功后的代码,例如设置 sessionsession_start();$_SESSION['username'] = $username;// 重定向到欢迎页面header("Location: welcome.php");
} else {echo "账号或密码错误";
}$conn->close();
?>

        这里如果php.ini设置不好可能会出现问题,找不到mysqli这个拓展,需要手动处理一下,当然这里不赘述。并且加密的过程被我注释掉了,防止新手搞不明白密码。

        数据库需要自己先创建,这里提供一个简单的数据库创建方案database.sql:

CREATE DATABASE IF NOT EXISTS mydatabase;
USE mydatabase;CREATE TABLE IF NOT EXISTS `users` (`id` INT(11) NOT NULL AUTO_INCREMENT,`username` VARCHAR(50) NOT NULL,`password` VARCHAR(255) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `users` (`username`, `password`) VALUES ('admin', '123456');

         最后登陆成功我们给一个非常简单的weicome.php

php"><?php
session_start();if (!isset($_SESSION['username'])) {header("Location: login.html");exit;
}echo "Welcome, " . $_SESSION['username'] . "!";
?>

        至此,所有的代码运行之后应该可以实现输入账号密码,与数据库比对,重定向到欢迎界面这样的过程,可以将这个代码放在任何一个需要登录的网页中(自夸一下),当然还有很多很多的内容需要补充,留给你们自己发挥~


http://www.ppmy.cn/embedded/124105.html

相关文章

APC论文总结

论文详情 论文标题&#xff1a;APC: Adaptive Patch Contrast for Weakly Supervised Semantic Segmentation 论文作者&#xff1a;Wangyu Wu&#xff0c;Tianhong Dai&#xff0c;Zhenhong Chen&#xff0c;Xiaowei Huang&#xff0c;Fei Ma&#xff0c;Jimin Xiao 发表时间…

PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(三)

作为“贴代码”力推的一个CRUD实践项目PasteTemplate,在对现有的3个项目进行实战后效果非常舒服&#xff01;下面就针对PasteForm为啥我愿称为最佳CRUD做一些回答: 哪里可以下载这个PasteForm的项目案例 目前“贴代码”对外使用PasteForm的项目有"贴Builder(PasteSpide…

SSH(安全外壳协议)可以基于多种加密算法

SSH&#xff08;安全外壳协议&#xff09;可以基于多种加密算法&#xff0c;确保数据的机密性和完整性。以下是 SSH 中常见的加密类型&#xff1a; 1. 对称加密 对称加密算法用于加密会话中的数据&#xff0c;常见的算法包括&#xff1a; AES&#xff08;高级加密标准&#…

Spring Boot 3.x 集成 Feign

在Spring Boot 3.x中集成Feign&#xff0c;可以大大简化微服务之间的HTTP调用。以下是关于Spring Boot 3.x集成Feign的详细步骤和说明&#xff1a; 一、Feign简介 Feign是一个声明式的HTTP客户端&#xff0c;它使得编写Web服务客户端变得更加简单。使用Feign&#xff0c;可以通…

Python开发环境配置(mac M2)

1. 前言 作为一名程序员&#xff0c;工作中需要使用Python进行编程&#xff0c;甚至因为项目需要还得是不同版本的Python如何手动管理多个版本的Python&#xff0c;如何给Pycharm&#xff08;IDE&#xff09;配置对应的interpreter等&#xff0c;都成为一个 “不熟练工” 的难…

鼓组编写:SsdSample鼓映射 GM Map 自动保存 互换midi位置 风格模板 逻辑编辑器

SsdSample音源的键位映射 方便编写鼓的技巧 可以这样去设置键位关系的面板和钢琴卷帘窗的面板&#xff0c;方便去写鼓。 可以先按GM的midi标准去写鼓&#xff0c;然后比对下鼓的键位映射的关系&#xff0c;去调整鼓。 可以边看自己发b站等处的图文笔记&#xff0c;然后边用电…

ELK日志收集之ES的DSL查询语句

一、简介 在Elasticsearch中&#xff0c;我们可以使用Elasticsearch-DSL(Elasticsearch Domain Specific Language)来构建和执行复杂的搜索查询。官方Query DSL指导文档。 叶查询&#xff1a;在特定字段中寻找特定值,例如 match ,term 或 range。 复合查询&#xff1a;具有查询…

js采用覆盖键、覆盖鼠标滑动事件实现禁止网页通过 ctrl + +/- 和 ctrl + 滚轮 对页面进行缩放

一、兼容电脑端的禁止通过 ctrl /- 和 ctrl 滚轮 对页面进行缩放 const keyCodeMap {// 91: true, // command61: true,107: true, // 数字键盘 109: true, // 数字键盘 -173: true, // 火狐 - 号187: true, // 189: true, // -};二、覆盖ctrl||command ‘’/‘-’ // 覆…