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

使用PHP编写一个简单的网页,实现对MySQL数据库的增删改和展示操作

页面实现在index.php,其中basic.php为没有css美化的原始人版本

函数实现在database.php

目录

功能基本实现版

 CSS美化版

basicindex.php 

index.php 

 database.php

代码讲解

功能基本实现版

 CSS美化版

我们来展示一下页面和操作示例。

运行网页,可以看到页面展示出了数据库的名字,还有数据库下的表。

我们点击其中一个表,可以看到表名和表的数据以及可以点击操作的按钮。

然后我们输入新的数据准备添加。

点击添加,可以看到添加成功的提示。

可以看到新添加的数据。

然后我们尝试修改数据,将visits_made改成2,点击更新。

可以看到visits_made已经变成2了。

然后我们删除这一行数据,点击删除。

可以看到我们刚刚添加的一行数据没了。

basicindex.php 

<?php
include 'database.php';
global $primaryKey;
$tableNames=getTableNames();
echo '<h1>数据库表名</h1>';
foreach ($tableNames as $name){
    echo '<a href="?table=' . $name . '">' . $name . '</a><br>';
}
if (isset($_GET['table'])) {
    $tableName = $_GET['table'];
    setPrimaryKey($tableName);
    if (isset($_POST['add'])) {
        // 添加数据
        $data = $_POST;
        unset($data['add']);
        insertRecord($tableName, $data);
    } elseif (isset($_POST['delete'])) {
        // 删除数据
        $id = $_POST['id'];
        deleteRecord($tableName, $id);
    } elseif (isset($_POST['update'])) {
        // 修改数据
        $id = $_POST['id'];
        $data = $_POST;
        unset($data['update'], $data['id']);
        updateRecord($tableName, $id, $data);
    }

    $tableData = getTableData($tableName);
} else {
    $tableNames = getTableNames();
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>MySQL 数据库操作</title>
</head>
<body>
<?php if (isset($tableData)) { ?>
    <h1><?php echo $tableName; ?></h1>
    <table>
        <tr>
            <?php foreach (array_keys($tableData[0]) as $key) { ?>
                <th><?php echo $key; ?></th>
            <?php } ?>
            <th>操作</th>
        </tr>
        <?php foreach ($tableData as $row) { ?>
            <form method="post">
                <tr>
                    <?php foreach ($row as $key => $value) { ?>
                        <td>
                            <input type="text" name="<?php echo $key; ?>" value="<?php echo $value; ?>">
                        </td>
                    <?php } ?>
                    <td>
                        <input type="hidden" name="id" value="<?php echo $row[$primaryKey]; ?>">
                        <input type="submit" name="update" value="更新">
                        <input type="submit" name="delete" value="删除">
                    </td>
                </tr>
            </form>
        <?php } ?>
        <form method="post">
            <tr>
                <?php foreach (array_keys($tableData[0]) as $key) { ?>
                    <td>
                        <input type="text" name="<?php echo $key; ?>" placeholder="<?php echo $key; ?>">
                    </td>
                <?php } ?>
                <td>
                    <input type="submit" name="add" value="添加">
                </td>
            </tr>
        </form>
    </table>
<?php }?>
</body>
</html>

index.php 

<?php
include 'database.php';
global $primaryKey;
global $database;
$tableNames = getTableNames();
if (isset($_GET['table'])) {
    $tableName = $_GET['table'];
    setPrimaryKey($tableName);
    if (isset($_POST['add'])) {
        // 添加数据
        $data = $_POST;
        unset($data['add']);
        echo '<script>alert("'.insertRecord($tableName, $data).'")</script>';
    } elseif (isset($_POST['delete'])) {
        // 删除数据
        $key = $_POST['key'];
        echo '<script>alert("'.deleteRecord($tableName, $key).'")</script>';
    } elseif (isset($_POST['update'])) {
        // 修改数据
        $key = $_POST['key'];
        $data = $_POST;
        unset($data['update'], $data['key']);
        echo '<script>alert("'.updateRecord($tableName, $key, $data).'")</script>';
    }
    $tableData = getTableData($tableName);
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>数据库管理系统</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            background-color: #f5f5f5;
        }

        h2 {
            background-color: #333;
            color: #fff;
            text-align: center;
            padding: 10px;
        }

        table {
            border-collapse: collapse;
            width: 80%;
            margin: auto;
            background-color: #fff;
        }

        th, td {
            padding: 10px;
            text-align: center;
        }

        th {
            background-color: #333;
            color: #fff;
        }

        tr:nth-child(even) {
            background-color: #f2f2f2;
        }

        tr:hover {
            background-color: #ddd;
        }

        form {
            display: inline;
        }

        input {
            text-align: center;
        }

        input[type="text"] {
            width: 100%;
            padding: 5px;
        }

        input[type="submit"] {
            background-color: #333;
            color: #fff;
            border: none;
            padding: 5px 10px;
            cursor: pointer;
        }

        input[type="submit"]:hover {
            background-color: #555;
        }
    </style>
</head>
<body>
<h2>Database <?php echo $database ?></h2>
<table>
    <?php foreach ($tableNames as $name) { ?>
        <tr>
            <td><?php echo '<a href="?table=' . $name . '">' . $name . '</a>'; ?></td>
        </tr>
    <?php } ?>
</table>
<?php if (isset($tableData)) { ?>
    <h2 colspan=100%><?php echo 'Table ' . $tableName; ?></h2>
    <table>
        <tr>
            <?php foreach (getTableHeader($tableName)as $key) { ?>
                <th><?php echo $key; ?></th>
            <?php } ?>
            <th>操作</th>
        </tr>
        <?php if (!empty($tableData)) { ?>
            <?php foreach ($tableData as $row) { ?>
                <form method="post">
                    <tr>
                        <?php foreach ($row as $key => $value) { ?>
                            <td>
                                <input type="text" name="<?php echo $key; ?>" value="<?php echo $value; ?>">
                            </td>
                        <?php } ?>
                        <td>
                            <input type="hidden" name="key" value="<?php echo $row[$primaryKey]; ?>">
                            <input type="submit" name="update" value="更新">
                            <input type="submit" name="delete" value="删除">
                        </td>
                    </tr>
                </form>
            <?php } ?>
        <?php } ?>
        <form method="post">
            <tr>
                <?php foreach (getTableHeader($tableName) as $key) { ?>
                    <td>
                        <input type="text" name="<?php echo $key; ?>" placeholder="<?php echo $key; ?>">
                    </td>
                <?php } ?>
                <td>
                    <input type="submit" name="add" value="添加">
                </td>
            </tr>
        </form>
    </table>
<?php } ?>
</body>
</html>

 database.php

<?php
$host = "localhost"; // 数据库主机
$username = "root"; // 数据库用户名
$password = ""; // 数据库密码
$database = "taobao"; // 数据库名称
$conn = new mysqli($host, $username, $password, $database);
$primaryKey = "";
if ($conn->connect_error) {  //数据库连接失败弹出提示
    echo '<script>alert("数据库连接失败")</script>';
    die(); //终止代码
}

function setPrimaryKey($tableName)
{
    global $conn;
    global $primaryKey;
    $sql = "show index from $tableName";
    $result = mysqli_query($conn, $sql);
    $row = mysqli_fetch_assoc($result);
    $primaryKey = $row['Column_name'];
}

function getTableNames()
{
    global $conn;
    $sql = "show tables";
    $result = $conn->query($sql);
    $tableNames = array();
    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            $tableNames[] = $row['Tables_in_' . $GLOBALS['database']];
        }
    }
    return $tableNames;
}

function getTableData($tableName)
{
    global $conn;
    $sql = "select*from $tableName";
    $result = $conn->query($sql);
    $tableData = array();
    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            $tableData[] = $row;
        }
    }
    return $tableData;
}

function insertRecord($tableName, $data)
{
    global $conn;
    $keys = implode(', ', array_keys($data)); // 连成字符串
    $values = "'" . implode("', '", array_values($data)) . "'";
    $sql = "insert into $tableName ($keys) values ($values)";
    $result = $conn->query($sql);
    if ($result == 1)
        return '添加成功';
    else
        return '添加失败';
}

function deleteRecord($tableName, $key)
{
    global $conn;
    global $primaryKey;
    $sql = "delete from $tableName where $primaryKey = '$key'";
    $result = $conn->query($sql);
    if ($result == 1)
        return '删除成功';
    else
        return '删除失败';
}

function updateRecord($tableName, $pkey, $data)
{
    global $conn;
    global $primaryKey;
    $set = "";
    foreach ($data as $key => $value) {
        $set .= "$key = '$value', ";
    }
    $set = rtrim($set, ', '); // 移除最后一个字符','
    $sql = "update $tableName set $set where $primaryKey = '$pkey'";
    $result = $conn->query($sql);
    if ($result == 1)
        return '修改成功';
    else
        return '修改失败';
}

function getTableHeader($tableName)
{
    global $conn;
    $sql = "describe $tableName";
    $result = $conn->query($sql);
    $tableHeader = array();
    if ($result) {
        while ($row = $result->fetch_assoc()) {
            $tableHeader[] = $row['Field'];
        }
    }
    return $tableHeader;
}

?>

代码讲解

这次写了两个php文件,一个database.php和一个index.php,database.php实现数据库连接以及增删改等等函数的实现,index.php实现网页页面以及功能逻辑。

然后连接MySQL的数据库,并在连接失败的时候弹出提示窗口。

当我们忘记打开数据库的时候就会连接失败,可以看到提示弹窗。

写一个函数来获取数据库中所有的表名,使用MySQL的show tables命令。

写一个函数用来获取表的数据,根据表名使用MySQL的select*from命令获取表的数据。

因为删掉和修改的时候需要知道和找出要删除修改哪一行的数据,所以我们需要找到一个表数据的唯一标识,所以我们写了一个函数来寻找表的主码,使用MySQL的show index。

实现数据库插入操作,将传入的表单数据中提取出属性名key和对应的属性值value,用MySQL的插入语句完成插入操作,并判断插入操作的结果是否成功,返回插入的结果。

实现数据库的删除操作,根据传入的表名和主键值用MySQL的删除语句完成删除操作,同样判断操作的结果是否成功,返回删除的结果。

实现数据库的修改操作,根据传入的表名和主键值以及修改后的表单使用MySQL的update语句完成修改操作,同样判断操作的结果是否成功,返回修改的结果。

最后是一个获取表属性名的函数,用来展示表的属性,用的是describe语句。

接下来看index.php文件。

页面展示用的是HTML内嵌php的代码,首先展示数据库中的表名,设计成可以点击的链接,通过点击可以给URL设置要展示的表。

然后是表名以及表的属性名的展示,后者通过调用我们之前写的函数取到。

然后判断这个表是否为空,不为空的话,就展示表的数据,并在右侧一栏显示修改和删除的操作,用户可以通过直接在展示的数据中修改并点击更新完成修改操作,可以通过点击删除完成删除的操作。

然后在最后一行显示添加的功能,用户可以在相应的属性上输入值并点击添加来添加数据。

还有一个逻辑判断,即通过判断用户点击了什么操作来调用相应的操作函数来处理,并通过弹出提示窗口来展示操作的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/122457.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink SQL Window TopN 详解

Window TopN 定义&#xff08;⽀持 Streaming&#xff09;&#xff1a; Window TopN 是特殊的 TopN&#xff0c;返回结果是每⼀个窗⼝内的 N 个最⼩值或者最⼤值。 应⽤场景&#xff1a; TopN 会出现中间结果&#xff0c;出现回撤数据&#xff0c;Window TopN 不会出现回撤数据…

Bean——IOC(Github上有代码)

源码 https://github.com/cmdch2017/Bean_IOC.git 获取Bean对象 BeanFactory Bean的作用域 第三方Bean需要用Bean注解 比如消息队列项目中&#xff0c;需要用到Json的消息转换器&#xff0c;这是第三方的Bean对象&#xff0c;所以不能用Component&#xff0c;而要用Bean …

SpringCloudGateway--Sentinel限流、熔断降级

目录 一、概览 二、安装Sentinel 三、微服务整合sentinel 四、限流 1、流控模式 ①直接 ②关联 ③链路 2、流控效果 ①快速失败 ②Warm Up ③排队等待 五、熔断降级 1、慢调用比例 2、异常比例 3、异常数 一、概览 SpringCloudGateway是一个基于SpringBoot2.x的…

国外访问学者/博士后留学人员反诈骗指南

访问学者/博士后/联合培养博士人员出国后&#xff0c;对当地环境及政策不熟悉&#xff0c;需要提高防范意识&#xff0c;为此&#xff0c;知识人网小编特整理这篇反诈骗指南&#xff0c;提醒留学人员防微杜渐、未雨绸缪。 近日&#xff0c;多国使馆发布相关提醒&#xff1a;不法…

DAY47 198.打家劫舍 + 213.打家劫舍II + 337.打家劫舍 III

198.打家劫舍 题目要求&#xff1a;你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警…

WordPress页脚配置备案号

进入后台管理页面 后台管理页面地址一般是&#xff1a;域名/wp-admin 在指定位置加入代码 点击外观 -> 主题文件编辑器 在右侧的文件中选择 footer.php,[注意&#xff1a;上方的主题需要是你自己选择的对应的主题]在 </footer>标签这一行的上一行中加入代码 <di…

学习在echarts中优化数据视图dataView样式带表格样式,支持复制功能

学习在echarts中优化数据视图dataView样式 带表格样式 toolbox里有个dataView视图模式&#xff0c;里面的数据没有对整&#xff0c;影响展示效果&#xff0c;情形如下&#xff1a; 像这种标题跟数据没有整齐对应上&#xff0c;看起来乱 改问题解决方案为&#xff0c;option 》…

风力等级划分

图片来源于网络

Spark 基础知识点

Spark 基础 本文来自 B站 黑马程序员 - Spark教程 &#xff1a;原地址 什么是Spark 什么是Spark 1.1 定义&#xff1a;Apache Spark是用于大规模数据&#xff08;large-scala data&#xff09;处理的统一&#xff08;unified&#xff09;分析引擎 Spark最早源于一篇论文 Re…

【IP固定】地平线开发板如何实现重启IP地址不变

文章目录 1 背景2 临时解决方案3 真正解决方案 1 背景 重新刷了地平线工具链OE包中BSP20230417的系统镜像&#xff0c;结果只能串口连接&#xff0c;无法实现网口连接&#xff0c;串口连接后&#xff0c;发现eth0和eth1的IP竟然是一样的&#xff0c;如下图所示 还挺少见的。 …

单目标应用:粒子群优化算法(PSO)求解微电网优化MATLAB

一、微网系统运行优化模型 微电网优化模型介绍&#xff1a; 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、粒子群优化算法&#xff08;PSO&#xff09;求解微电网优化 &#xff08;1&#xff09;部分代码 close all; clear ; clc; global P_load; %电负荷 gl…

低代码平台的探究与分析

目录 1.低代码行业现状 2.产品分析 2.1可视化应用开发 2.2流程管理 2.3特别支持整个平台源码合作 3.架构和技术 3.1技术栈 4.规划和展望 低代码平台&#xff08;Low-code Development Platform&#xff09;是一种让开发者通过拖拽和配置&#xff0c;而非传统的手动编写…

物联网水表有什么弊端吗?

物联网水表作为新一代智能水表&#xff0c;虽然在很大程度上提高了水资源的管理效率&#xff0c;但也存在一定的弊端。在这篇文章中&#xff0c;我们将详细讨论物联网水表的弊端&#xff0c;以帮助大家更全面地了解这一技术。 一、安全隐患 1.数据泄露&#xff1a;物联网水表通…

12.(vue3.x+vite)组件间通信方式之$attrs与$listeners

前端技术社区总目录(订阅之前请先查看该博客) 示例效果 在vue3中的$attrs的变化 $ listeners已被删除合并到$ attrs中。 $ attrs现在包括class和style属性。 也就是说在vue3中$ listeners不存在了。vue2中$listeners是单独存在的。 在vue3 $attrs包括class和style属性, vue…

运动蓝牙耳机哪个品牌好?推荐五款好用的运动耳机

​无论你是赛跑者、自行车手还是健身爱好者&#xff0c;运动耳机绝对是你追求极致、超越自我的最佳搭档。它不仅具备优秀的音质和耐用的性能&#xff0c;更重要的是&#xff0c;它可以激发你的运动激情&#xff0c;让你的运动生活更加充满动力。推荐以下几款不错的运动耳机给大…

网站引流绝技:如何通过外链持续给网站带来高质量流量

做网站的人&#xff0c;不论是写文章还是搞外链&#xff0c;最终都是希望能获得更多的流量。既然是为了搞来流量和收入&#xff0c;你可能还不知道有一种方法既能搞来外链还能带来源源不断的高质量流量。 这个方法我在8年前就已经掌握&#xff0c;而且至今我仍认为它是一种有效…

OSPF下的MGRE实验

一、实验要求 1、R1-R3-R4构建全连的MGRE环境 2、R1-R5-R6建立hub-spoke的MGRE环境&#xff0c;其中R1为中心 3、R1-R3...R6均存在环回网段模拟用户私网&#xff0c;使用OSPF使全网可达 4、其中R2为ISP路由器&#xff0c;仅配置IP地址 二、实验拓扑图 三、实验配置 1、给各路…

iOS如何通过在线状态来监听其他设备登录的状态

前提条件 1、完成 3.9.1 或以上版本 SDK 初始化 2、了解环信即时通讯 IM API 的 使用限制。 3、已联系商务开通在线状态订阅功能 实现方法 你可以通过调用 subscribe 方法订阅自己的在线状态&#xff0c;从而可以监听到其他设备在登录和离线时的回调&#xff0c;示例代码如下…

(六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题

前言 本节内容是关于使用分布式锁解决并发访问“超卖”问题的最终篇&#xff0c;在前面的章节中我们介绍了使用mysql的行锁、乐观锁、悲观锁解决并发访问导致的超卖问题&#xff0c;存在的问题是行锁、乐观锁、悲观锁不太灵活&#xff0c;需要和具体的业务耦合到一起&#xff…

数据结构与算法C语言版学习笔记(4)-栈与队列再回顾

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言&#xff1a;一、栈的定义&#xff1a;栈(stack)是限定仅在表尾进行插入和删除操作的线性表&#xff08;1&#xff09;栈是特殊的线性表&#xff08;2&#xff…