首页
学习
活动
专区
圈层
工具
发布

网页写入mysql数据库

将网页数据写入 MySQL 数据库通常涉及 ​​前端表单提交​​ + ​​后端处理脚本​​(如 PHP、Python、Node.js 等) + ​​MySQL 数据库操作​​。以下是完整实现流程:


​1. 准备工作​

​1.1 创建 MySQL 数据库和表​

假设我们要存储用户提交的表单数据(如姓名、邮箱、留言),先在 MySQL 中创建数据库和表:

代码语言:javascript
代码运行次数:0
复制
-- 创建数据库
CREATE DATABASE IF NOT EXISTS `web_form_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 使用数据库
USE `web_form_db`;

-- 创建表
CREATE TABLE IF NOT EXISTS `user_submissions` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(100) NOT NULL,
    `email` VARCHAR(100) NOT NULL,
    `message` TEXT,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

​2. 前端 HTML 表单​

创建一个简单的 HTML 表单(form.html):

代码语言:javascript
代码运行次数:0
复制
下载<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>提交表单</title>
</head>
<body>
    <h1>用户反馈表单</h1>
    <form action="submit.php" method="POST">
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name" required><br><br>

        <label for="email">邮箱:</label>
        <input type="email" id="email" name="email" required><br><br>

        <label for="message">留言:</label>
        <textarea id="message" name="message" rows="4" cols="50"></textarea><br><br>

        <button type="submit">提交</button>
    </form>
</body>
</html>
  • action="submit.php":表单提交后由 PHP 脚本处理。
  • method="POST":使用 POST 方法传递数据(更安全)。

​3. 后端处理脚本(PHP 示例)​

创建 submit.php 文件,连接 MySQL 并插入数据:

代码语言:javascript
代码运行次数:0
复制
<?php
// 1. 获取表单数据
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];

// 2. 数据过滤(防止 SQL 注入)
$name = htmlspecialchars(strip_tags($name));
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
$message = htmlspecialchars(strip_tags($message));

// 3. 连接 MySQL 数据库
$servername = "localhost";  // 数据库服务器地址
$username = "root";         // 数据库用户名
$password = "";             // 数据库密码
$dbname = "web_form_db";    // 数据库名

$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接是否成功
if ($conn->connect_error) {
    die("数据库连接失败: " . $conn->connect_error);
}

// 4. 准备 SQL 语句(使用预处理语句防止 SQL 注入)
$sql = "INSERT INTO user_submissions (name, email, message) VALUES (?, ?, ?)";
$stmt = $conn->prepare($sql);

if ($stmt) {
    // 绑定参数
    $stmt->bind_param("sss", $name, $email, $message);

    // 执行 SQL
    if ($stmt->execute()) {
        echo "数据提交成功!";
    } else {
        echo "错误: " . $stmt->error;
    }

    // 关闭语句
    $stmt->close();
} else {
    echo "预处理语句错误: " . $conn->error;
}

// 5. 关闭数据库连接
$conn->close();
?>

​关键点说明​​:

  1. ​防 SQL 注入​​:
    • 使用 htmlspecialchars()strip_tags() 过滤用户输入。
    • 使用 ​​预处理语句(Prepared Statements)​​(prepare + bind_param)确保安全。
  2. ​错误处理​​:
    • 检查数据库连接和 SQL 执行是否成功。

​4. 测试流程​

  1. form.htmlsubmit.php 放在 Web 服务器目录(如 Apache 的 htdocs 或 Nginx 的 www)。
  2. 访问 http://localhost/form.html,填写表单并提交。
  3. 检查 MySQL 数据库是否成功写入数据:SELECT * FROM user_submissions;

​5. 其他后端语言示例​

​Python (Flask + MySQL)​

代码语言:javascript
代码运行次数:0
复制
下载from flask import Flask, request
import mysql.connector

app = Flask(__name__)

@app.route('/submit', methods=['POST'])
def submit():
    name = request.form['name']
    email = request.form['email']
    message = request.form['message']

    # 连接 MySQL
    conn = mysql.connector.connect(
        host="localhost",
        user="root",
        password="",
        database="web_form_db"
    )
    cursor = conn.cursor()

    # 执行 SQL(使用参数化查询)
    sql = "INSERT INTO user_submissions (name, email, message) VALUES (%s, %s, %s)"
    cursor.execute(sql, (name, email, message))
    conn.commit()

    cursor.close()
    conn.close()

    return "数据提交成功!"

if __name__ == '__main__':
    app.run(debug=True)

​Node.js (Express + MySQL)​

代码语言:javascript
代码运行次数:0
复制
下载const express = require('express');
const mysql = require('mysql2/promise');
const app = express();

app.use(express.urlencoded({ extended: true }));

app.post('/submit', async (req, res) => {
    const { name, email, message } = req.body;

    // 连接 MySQL
    const conn = await mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: '',
        database: 'web_form_db'
    });

    // 执行 SQL(使用参数化查询)
    const [result] = await conn.execute(
        'INSERT INTO user_submissions (name, email, message) VALUES (?, ?, ?)',
        [name, email, message]
    );

    await conn.end();
    res.send('数据提交成功!');
});

app.listen(3000, () => {
    console.log('服务器运行在 http://localhost:3000');
});

​6. 安全注意事项​

  1. ​防 SQL 注入​​:
    • 始终使用 ​​预处理语句​​(Prepared Statements),避免直接拼接 SQL。
  2. ​数据验证​​:
    • 前端用 HTML5 验证(如 requiredtype="email")。
    • 后端用正则表达式或库(如 PHP 的 filter_var())进一步验证。
  3. ​防 XSS 攻击​​:
    • 输出数据时用 htmlspecialchars()(PHP)或类似函数转义 HTML 特殊字符。
  4. ​数据库权限​​:
    • 数据库用户仅授予必要权限(如 INSERT,避免 DROP TABLE)。

​7. 扩展功能​

  • ​文件上传​​:如允许用户上传头像(需处理 $_FILES)。
  • ​邮件通知​​:提交后发送邮件给管理员(PHP 的 mail() 或 Python 的 smtplib)。
  • ​AJAX 提交​​:用 JavaScript 异步提交表单(避免页面刷新)。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python多线程获取网页并将数据写入MySQL数据库

为了实现多线程爬取网页并将数据写入MySQL数据库,我们将结合Python的concurrent.futures.ThreadPoolExecutor来进行多线程处理,并使用SQLAlchemy和mysql-connector-python...库来连接并操作MySQL数据库。...定义数据库模型使用SQLAlchemy定义一个映射到MySQL表的类。...,并创建与MySQL数据库的连接以及会话工厂:# MySQL数据库连接字符串,根据实际情况修改参数DATABASE_URI = 'mysql+mysqlconnector://username:password...注意事项并发写入:通过为每个线程创建独立的会话,可以避免多个线程同时写入数据库导致冲突的问题。错误处理:始终确保有适当的错误处理逻辑,比如网络请求失败时重试、数据库操作失败时回滚等。

51600

MySQL读取写入文件

上课 MySQL读取和写入文件在ctf或者awd中,常用于读取flag或者写入一个一句话木马,通过特定函数将其写入 读写的前提 mysql中,如果要读写,还得看一个参数---"secure_file_priv..." 该函数的主要作用就是控制MySQL的读取和写入 可以通过 select variables like "%secure_file_priv%"; 查询当前是否可读写,比如下图,说明我的读写范围限制在...G盘 如果尝试读取其他盘的数据,会返回NULL secure_file_priv=NULL 时,不允许读取和写入文件 secure_file_priv=/var 时,允许读取和写入文件,但是读取写入范围限制在.../var中 secure_file_priv= 时,允许任意读取和写入文件 权限 无论时读取还是写入,都要知道网站的绝对路径,并且有绝对的权限 读取 load_file select into load_file...,使用查询语句读出来 写入 into outfile select '<?

8.5K20
  • Mysql写入频繁,怎么破?

    Mysql在写入压力很大,怎么办? 高并发下的性能最大的问题,大都在数据库,以前我们做二十万超级群,mongodb每个月都会出事故....先准备一个执行sql语句函数 `const mysql = require('mysql'); const { MYSQL_CONF } = require('....先写一个接口,用来模拟用户请求,写入数据库 `app.get('/test', (req, res) => { exec("INSERT INTO first_table(first_column...这里说明,我们的这种直接写入是有问题的,这样长时间的高频直接写入,即使数据库还能扛住,但是会很容易出现OOM,此时应该需要消息队列流量削峰,限流,也可以事务写入,但是事务写入如果失败,就默认全部失败.....数据库什么时候会出现锁库? 读写同时进行,高频耗时.... 这个数据库我也不是理解很透彻

    4.1K20

    Python 读取千万级数据自动写入 MySQL 数据库

    作者:python与数据分析 链接:https://www.jianshu.com/p/22cb6a4af6d4 Python 读取数据自动写入 MySQL 数据库,这个需求在工作中是非常普遍的,主要涉及到...python 操作数据库,读写更新等,数据库可能是 mongodb、 es,他们的处理思路都是相似的,只需要将操作数据库的语法更换即可。...本篇文章会给大家系统的分享千万级数据如何写入到 mysql,分为两个场景,三种方式。 一、场景一:数据不需要频繁的写入mysql 使用 navicat 工具的导入向导功能。...场景二:数据是增量的,需要自动化并频繁写入mysql 测试数据:csv 格式 ,大约 1200万行 import pandas as pd data = pd.read_csv('....最全的三种将数据存入到 MySQL 数据库方法: 直接存,利用 navicat 的导入向导功能 Python pymysql Pandas sqlalchemy

    6K20

    Mysql及 Mybatis的批量写入

    所幸MySQL有提供批量插入的方法,即建立一次数据库连接,将所有数据进行插入. 下面记录一下MySQL中的批量插入以及使用MyBatis进行批量插入的一些方法....MySQL的批量插入语法 MySQL的批量插入十分简单,在正常的插入语句VALUES后增加多个值得排列即可,值之间使用逗号分隔. insert into student values ("huyanshi...Mybatis的批量插入(MySQL) MyBatis的批量插入,其实底层使用的也是MySQL的上述功能,这里只是记录下载代码层面如何实现....首先在Mapper层中定义如下方法: int addStudentBatch(@Param("students") List students); 然后在对应的XML文件中写入如下语句...联系邮箱:huyanshi2580@gmail.com 更多学习笔记见个人博客——>呼延十 var gitment = new Gitment({ id: 'Mysql及 Mybatis的批量写入

    3.4K10

    图解MySQL | MySQL insert 语句的磁盘写入之旅

    作者及简介: 黄 炎,爱可生首席技术官; 王 悦,爱可生研发团队成员,负责数据库管理平台相关项目的开发和故障排查,好奇 MySQL 技术原理及各类数据库实现方案。...本文来源:转载自公众号-图解 MySQL *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 ---- 一条 insert 语句在写入磁盘的过程中到底涉及了哪些文件?...下面我们用两张图和大家一起解析 insert 语句的磁盘写入之旅。 图 1:事务提交前的日志文件写入 ?...但仅仅写入内存的 buffer pool 并不能保证数据的持久化,如果 MySQL 宕机重启了,需要保证 insert 的数据不会丢失。...综上(在 InnoDB buffer pool 足够大且上述的两个参数设置为双一时),insert 语句成功提交时,真正发生磁盘数据写入的,并不是 MySQL 的数据文件,而是 redo log 和 binlog

    5.6K32

    【PHP网页应用】MySQL数据库增删改查 基础版

    使用PHP编写一个简单的网页,实现对MySQL数据库的增删改和展示操作 页面实现在index.php,其中basic.php为没有css美化的原始人版本 函数实现在database.php 功能基本实现版...运行网页,可以看到页面展示出了数据库的名字,还有数据库下的表。 我们点击其中一个表,可以看到表名和表的数据以及可以点击操作的按钮。 然后我们输入新的数据准备添加。 点击添加,可以看到添加成功的提示。...> 代码讲解 这次写了两个php文件,一个database.php和一个index.php,database.php实现数据库连接以及增删改等等函数的实现,index.php实现网页页面以及功能逻辑。...然后连接MySQL的数据库,并在连接失败的时候弹出提示窗口。 当我们忘记打开数据库的时候就会连接失败,可以看到提示弹窗。...写一个函数来获取数据库中所有的表名,使用MySQL的show tables命令。 写一个函数用来获取表的数据,根据表名使用MySQL的select*from命令获取表的数据。

    1.9K40

    MySQL 每秒 570000 的写入,如何实现?

    一、需求 一个朋友接到一个需求,从大数据平台收到一个数据写入在20亿+,需要快速地加载到MySQL中,供第二天业务展示使用。...二、实现再分析 对于单表20亿, 在MySQL运维,说真的这块目前涉及得比较少,也基本没什么经验,但对于InnoDB单表Insert 如果内存大于数据情况下,可以维持在10万-15万行写入。...mysql 8.6K 11月 25 20:44 user_summary.frm -rw-r----- 1 mysql mysql 3.5G 11月 25 20:51 user_summary_main...mysql mysql 176G 11月 26 03:32 user5.ibd 文件大小在5倍大小的区别。...另外测试几种场景也供大家参考: 如果在TokuDB中使用带自增的主键,主键无值让MySQL内部产生写入速度,下降比较明显,同样写入2亿数据,带有自建主键: root@localhost [zst]>CREATE

    2K20

    MySQL 每秒 570000 的写入,如何实现?

    来源:吴炳锡 yq.aliyun.com/articles/278034 一、需求 ---- 一个朋友接到一个需求,从大数据平台收到一个数据写入在20亿+,需要快速地加载到MySQL中,供第二天业务展示使用...二、实现再分析 ---- 对于单表20亿, 在MySQL运维,说真的这块目前涉及得比较少,也基本没什么经验,但对于InnoDB单表Insert 如果内存大于数据情况下,可以维持在10万-15万行写入...另外测试几种场景也供大家参考:如果在TokuDB中使用带自增的主键,主键无值让MySQL内部产生写入速度,下降比较明显,同样写入2亿数据,带有自建主键: root@localhost [zst]>CREATE...基于MySQL数据库下亿级数据的分库分表 史上最详细MySQL全局锁和表锁 国产的数据库新增一员,华为携GaussDB入局 资源下载 关注公众号:数据和云(OraNews)回复关键字获取 help,30...万+下载的完整菜单栏 2019DTCC,数据库大会PPT 2018DTCC , 数据库大会PPT 2018DTC,2018 DTC 大会 PPT ENMOBK,《Oracle性能优化与诊断案例》 DBALIFE

    3.1K20

    MySQL 每秒 570000 的写入,如何实现?

    一、需求 一个朋友接到一个需求,从大数据平台收到一个数据写入在20亿+,需要快速地加载到MySQL中,供第二天业务展示使用。...二、实现再分析 对于单表20亿, 在MySQL运维,说真的这块目前涉及得比较少,也基本没什么经验,但对于InnoDB单表Insert 如果内存大于数据情况下,可以维持在10万-15万行写入。...mysql 8.6K 11月 25 20:44 user_summary.frm -rw-r----- 1 mysql mysql 3.5G 11月 25 20:51 user_summary_main...1 mysql mysql 176G 11月 26 03:32 user5.ibd 文件大小在5倍大小的区别。...另外测试几种场景也供大家参考:如果在TokuDB中使用带自增的主键,主键无值让MySQL内部产生写入速度,下降比较明显,同样写入2亿数据,带有自建主键: root@localhost [zst]>CREATE

    2.2K30

    MySQL 每秒 570000 的写入,如何实现?

    一、需求 一个朋友接到一个需求,从大数据平台收到一个数据写入在20亿+,需要快速地加载到MySQL中,供第二天业务展示使用。...二、实现再分析 对于单表20亿, 在MySQL运维,说真的这块目前涉及得比较少,也基本没什么经验,但对于InnoDB单表Insert 如果内存大于数据情况下,可以维持在10万-15万行写入。...mysql 8.6K 11月 25 20:44 user_summary.frm -rw-r----- 1 mysql mysql 3.5G 11月 25 20:51 user_summary_main...mysql mysql 176G 11月 26 03:32 user5.ibd 文件大小在5倍大小的区别。...另外测试几种场景也供大家参考:如果在TokuDB中使用带自增的主键,主键无值让MySQL内部产生写入速度,下降比较明显,同样写入2亿数据,带有自建主键: root@localhost [zst]>CREATE

    75010
    领券