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

news2024/11/25 7:51:29

使用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设置要展示的表。

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

红海云签约和兆服饰,科技引领服饰行业人力资源数字化转型

和兆服饰从事多品牌多品类经营管理&#xff0c;旗下拥有POLOSPORT、POLOKIDS、CARTELO等国际品牌。作为一个主打POLO文化的服饰品牌&#xff0c;诞生于美国的POLOSPORT拥有现代感的产品设计、系列化的产品搭配、全方位的服务&#xff0c;是最具美国马球精神的休闲时尚服饰品牌之…

【云栖2023】张治国:MaxCompute架构升级及开放性解读

简介&#xff1a; 本文根据2023云栖大会演讲实录整理而成&#xff0c;演讲信息如下 演讲人&#xff1a;张治国|阿里云智能计算平台研究员、阿里云MaxCompute负责人 演讲主题&#xff1a;MaxCompute架构升级及开放性解读 活动&#xff1a;2023云栖大会 MaxCompute发展经历了…

springcloud二手交易平台系统源码

开发技术&#xff1a; 大等于jdk1.8&#xff0c;大于mysql5.5&#xff0c;idea&#xff08;eclipse&#xff09;&#xff0c;nodejs&#xff0c;vscode&#xff08;webstorm&#xff09; springcloud springboot mybatis vue elementui mysql 功能介绍&#xff1a; 用户端&…

视频剪辑高手的秘诀:如何从视频中提取封面,提高视频点击率

在视频分享平台上&#xff0c;一个吸引人的封面往往能吸引更多的观众点击。一个好的封面可以传达视频的主题&#xff0c;吸引人们的兴趣&#xff0c;提高视频的点击率。那么&#xff0c;如何从视频中提取封面呢&#xff1f;下面&#xff0c;让我们一起来看看云炫AI智剪如何操作…

消息中间件 - RocketMQ基础

一个进程内能够创建的线程数量是有限的。 所有中间件的目的&#xff1a; 性能效率上的一个提升代理&#xff1a;帮你去完成一些额外的事情 MQ介绍 MQ概述 MQ全称Message Queue&#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保存消息的容器&#xff0…

直接插入排序(图解+c语言代码实现)

直接插入排序&#xff08;一种稳定的排序方法&#xff09; 算法思想&#xff1a;每一趟将一个待排序的记录&#xff0c;按其关键字的大小插入到已经排好序的一组记录的适当位置上&#xff0c;直到所有待排序记录全部插入为止&#xff1b; 下面为代码实现&#xff08;每一次将需…

对称二叉数[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个二叉树的根节点root&#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff…

商越科技:渗透测试保障平台安全,推动线上采购高效运转

商越科技是数字化采购解决方案提供商&#xff0c;在同赛道企业中始终保持前列。商越科技通过自主研发的智能采购中台、SaaS应用及运营服务等为企业搭建专属的互联网采购平台&#xff0c;帮助企业实现采购数字化以及智能化转型&#xff0c;提高工作效率、降低采购成本。 打造数字…

基于单片机设计的智能风扇(红外线无线控制开关调速定时)

一、项目介绍 在炎热的夏季&#xff0c;风扇成为人们室内生活中必不可少的电器产品。然而&#xff0c;传统的风扇控制方式存在一些不便之处&#xff0c;比如需要手动操作开关、无法远程控制和调速&#xff0c;以及缺乏定时功能等。为了解决这些问题&#xff0c;设计了一款基于…

数据库数据恢复—无备份,未开启binlog的MySQL误删除怎么恢复数据

数据库数据恢复环境&#xff1a; 一台本地windows sever操作系统服务器&#xff0c;服务器上部署mysql数据库单实例&#xff0c;引擎类型为innodb&#xff0c;表内数据存储所使用表空间类型为独立表空间。无数据库备份&#xff0c;未开启binlog。 数据库故障&分析&#xf…

flink1.18.0 自适应调度器 资源弹性缩放 flink帮你决定并行度

jobmanager.scheduler Elastic Scaling | Apache Flink 配置文件修改并重启flink后,webui上会显示调整并行度的按钮,他可以自己调整,你也可以通过webUI手动调整: 点击 之后: 调整完成后:

uniapp实现在线PDF文件预览

下载pdf文件放在static文件夹下 bug&#xff1a;hbuildX创建的项目pdf文件夹可以放在根目录下面&#xff0c;但是cli创建的项目无法预览&#xff0c;只能放在static下面 按钮跳转预览页面 <button click"toPdf">pdf</button>methods: {toPdf() {uni.…

50代码审计-PHP无框架项目SQL注入挖掘

代码设计分为有框架和无框架 挖掘技巧&#xff1a;随机挖掘&#xff0c;定点挖掘&#xff0c;批量挖掘&#xff08;用工具帮助扫描探针&#xff0c;推荐工具&#xff1a;fortify&#xff0c;seay系统&#xff09;。 1.教学计划&#xff1a; ---审计项目漏洞 Demo->审计思…

【Git】推送Github失败:remote: Permission to xxx/*.git denied to xxx

在github上&#xff0c;创建了token&#xff0c;推送代码报没权限 #设置token git remote set-url origin <your.token>github.com/<your.name>/hello-git.git#推送代码 #git push -u origin main remote: Permission to xxx/hello-git.git denied to xxx. fatal:…

xlua游戏热更新(C#访问lua)

xlua作为Unity资源热更新的重要解决方案api&#xff0c;在Tecent重多游戏中被采用&#xff0c;本文通过案例去讲解xlua代码结构层次。 /** Tencent is pleased to support the open source community by making xLua available.* Copyright (C) 2016 THL A29 Limited, a Tence…

WPF中数据绑定验证深入讲解

WPF中数据绑定验证深入讲解 WPF在用户输入时&#xff0c;提供了验证功能&#xff0c;通常验证使用以下两种方式来实现&#xff1a; 在数据对象中引发错误。通常是在属性设置过程中抛出异常&#xff0c;或者在数据类中实现INotifyDataErrorInfo或IDataErrorInfo接口。在绑定级…

【docker容器 redis密码没有生效解决办法】

遇到的问题&#xff1a;启动docker版本redis认证失败&#xff0c;导致web端启动失败 报错内容如下 redis.exceptions.ResponseError: AUTH called without any password configured for the default user. Are you sure your configuration is correct? 做的一系列操作&…

野火霸天虎 STM32F407 学习笔记_4 构建库函数尝试;使用固件库点亮 LED 灯

构建库函数 创建一个通用的模板&#xff0c;后面写程序直接使用这个模板。 $ ls Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2023/11/8 23:27 Libraries d----- …

Django文件配置、request对象、连接MySQL、ORM

文章目录 Django静态文件及相关配置静态文件前言静态文件相关配置 form表单request对象request请求结果GET请求POST请求 pycharm连接数据库Django连接MySQLDjango ORM简介 Django静态文件及相关配置 在此篇博客我将以一个用户登录页面来引入相关知识 首先我们先编写一个html页面…

【计算机网络笔记】网络层服务模型——数据报网络

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…