给数据库构建一个展示界面

news2024/11/24 6:50:20

给mySQL构建一个展示界面

在这里插入图片描述

这是“构建个人小型医学数据库”系列文章的最后一部分。通过之前的工作我们确定了所要收集的各类变量并将其录入到mySQL数据库中。

为了展示MySQL中存储的数据,通过摸索我们最终使用appML、PHP和JavaScript开发一个展示页面。这些技术可以协同工作,以创建一个有用的用户界面,显示相关的数据。

  • appML是一种基于XML和JavaScript的语言,可用于构建Web应用程序和移动应用程序。它提供了一种简单的方法,将数据从服务器传递到客户端,并使用JavaScript将其呈现在Web页面上。
  • PHP是一种服务端脚本语言,可与MySQL等数据库协同工作,用于处理服务器端上的数据。PHP提供了一个强大的API,可用于连接和查询MySQL数据库。
  • JavaScript是一种客户端脚本语言,可用于创建交互式Web应用程序。它可以与appML和PHP协同工作,以创建一个响应式的用户界面。

构建展示页面的必要性在于,让用户可以方便地浏览MySQL数据库中的数据。展示页面可以帮助用户更好地理解数据,了解数据的关联和趋势。同时,展示页面还可以方便用户进行数据分析和决策,提高工作效率和数据利用率。

具体构建板块

一共有三个板块:

1. 文字展示部分

展示数据库建立的目的和过程,最简洁的办法就是使用文字说明,这里使用的是jQuery.js 中的load()将外部的文字导入到html页面,方便后续的维护。还可以搭配一些图片。

2. 图表展示部分(Dashbord)

除了文字展示,我们还可以使用JavaScript库(如Chart.js)来创建图表,以更好地可视化数据。这些图表可以包括柱状图、折线图、饼图等。这里我们使用的是php从mySQL数据库获取数据,并结合plotly.js库来形成图表。这里值得一提的php文件的实现方式,可以同时实现多个query,并一起返回数据,为绘制多个图表提供了数据,供大家参考。

<?php
$count_year = array();
$count_type = array();
$year=array();
$type=array();
$db = new PDO('mysql:host=localhost;dbname=the_info', 'liuyp2080', '819800');

$query = 'SELECT year,SUM(count) AS count_year FROM main group by year';

$query2='SELECT type,SUM(count) AS count_type FROM main group by type';
$result = $db->query($query);
$result2 = $db->query($query2);

while($row = $result->fetch()) {
  $year[] =$row['year'];
  $count_year[]=$row['count_year'];
  };

while ($row = $result2->fetch()) {
    $type[] = $row['type'];
    $count_type[] = $row['count_type'];
  }
$finaldata=array('year'=>$year,
  				'count_year'=>$count_year,
                'count_type'=>$count_type,
  				'type'=>$type);
// Encode data to JSON format
$jsonData = json_encode($finaldata, JSON_UNESCAPED_SLASHES);
echo $jsonData;
?>



3. 表格浏览部分

最后,我们可以使用appML和javascript创建一个表格,并搭配翻页和过滤功能,以便用户浏览MySQL数据库中的内容。这个表格可以包含多个列和行,每个单元格可以显示文本、数字或日期。这一部分是复制w3schools网站的已有的代码,各方面的介绍比较完善,是更好的参考资料。

通过以上步骤,我们可以构建一个功能齐全的展示页面,以帮助用户更好地管理和利用MySQL数据库中的数据。至此,一个相对完整的数据库构建流程已经形成,包括使用设计数据库内容、安装WAMP作为数据库、设置数据库局域网访问,使用内网穿透使数据库可段时间外网访问,以及构建展示界面。

附:展示界面的代码

<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <title>医院样本库</title>
    <script src="js/plotly-2.24.1.min.js" charset="utf-8"></script>
    <script src="js/jquery-3.7.0.js"></script>
    <style>
        body {
          background-color: #f0f0f0;
        }
        .w3-container {
            border: 1px solid #dbd6d6;
            padding: 10px;
            margin: 10px 0;
          }
        h1 {
            text-align: center;
        }
      </style>
</head>
<html lang="zh">
<title>样本库展示页面</title>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<script src="https://www.w3schools.com/appml/2.0.3/appml.js"></script>
<body>
<h1>样本库展示</h1>
<div class='w3-container'><h2>一、文字介绍</h2></div>

<div id='introduction' class="w3-container">
      <p id="p1">样本库介绍</p>
</div>
<div class="w3-container"><h2>二、图片指标</h2></div>
<div class="w3-container" style="display:flex;">
    <div id="count_bar" style="height:300px;width:50%"></div>
    <div id="count2_bar" style="height:300px;width:50%"></div>
</div>
<div class="w3-container"><h2>三、列表浏览</h2></div>

<div class="w3-container" appml-data="appml.php?model=model_db">

<div appml-include-html="inc_listcommands.htm"></div>
<div appml-include-html="inc_filtercommands.htm"></div>
<table class="w3-table-all">
  <tr>
    <th>年份</th>
    <th>类型</th>
    <th>数量</th>
  </tr>
  <tr appml-repeat="records">
    <td>{{year}}</td>
    <td>{{type}}</td>
    <td>{{count}}</td>
  </tr>
</table>
</div>
<script type="text/javascript">
  var url="get_data_from_mysql.php";
  //jquery函数获取php中的数据
  function arrTest(url){
    let year=[],count_year=[],count_type=[],type=[];
    // Use jQuery's AJAX method to send a POST request to the specified URL.
    $.ajax({
      type:"post",
      async:false,
      url:url,
      data:{},
      dataType:"json",
      success:function(result){
        if (result) {
            year.push(result.year);
            count_year.push(result.count_year);
            count_type.push(result.count_type);
            type.push(result.type);
          }
        }
    });
    return [year,count_year,count_type,type];
  };

  //执行函数获取mySql中的数据
  var data=arrTest(url);
  var year=data[0][0];
  var count_year=data[1][0];
  var count_type=data[2][0];
  var type=data[3][0];
  //使用获取的数据进行绘图,指定data和layout
  var  count_bar = document.getElementById('count_bar');
  var plot_data= [
    {
      x:year,
      y:count_year,
      type: 'bar',
    }
  ];
  var layout = {
    title: '样品数量',
    xaxis:{title:'年份'},
    yaxis:{title:'数量'},
  };
  Plotly.newPlot(count_bar, plot_data,layout);
</script>
<script>
    var  count2_bar = document.getElementById('count2_bar');
    var plot_data2= [
      {
        x:type,
        y:count_type,
        type: 'bar',
      }
    ];
    var layout2 = {
      title: '样品类型',
      xaxis:{title:'类型'},
      yaxis:{title:'数量'},
    };
    Plotly.newPlot(count2_bar, plot_data2,layout2);
</script>
<script>$('#p1').load("introduction.txt");</script>
</body>
</html>

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

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

相关文章

组合式API - provide和inject、Vue3小案例【Vue3】

组合式API - provide和inject 作用和场景&#xff1a;顶层组件向任意的底层组件传递数据和方法&#xff0c;实现跨层组件通信 跨层传递普通数据 顶层组件通过provide函数提供数据 provide(key, 顶层组件中的数据)底层组件通过inject函数获取数据 const message inject(key) …

每日学术速递6.14

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Realistic Saliency Guided Image Enhancement 标题&#xff1a;现实显着性引导图像增强 作者&#xff1a;S. Mahdi H. Miangoleh, Zoya Bylinskii, Eric Kee, Eli Shechtman, Ya…

js创建对象三种方式

创建对象三种方式 1、利用对象字面量创建对象2、利用 new Object 创建对象3、利用构造函数创建对象3.1 构造函数 1、利用对象字面量创建对象 const obj {name: 张三,age: 20 } console.log(obj)结果如下&#xff1a; 2、利用 new Object 创建对象 const obj new Object({…

Jmeter使用||接口测试实战

标题 Jmeter与postman一样&#xff0c;都可以用来进行接口测试。 前面的文章&#xff08; 测试工具介绍||Jmeter的简单使用&#xff09;&#xff0c;介绍了jmeter的下载、安装及简单使用。基于此背景&#xff0c;通过实例的形式&#xff0c;来介绍下如何利用jmeter进行接口测试…

Rancher集群containerd导出镜像

奇墨科技是国内领先的全域IT质量管理平台及服务商&#xff0c;创始团队为在ITSM、公有云&#xff0c;私有云&#xff0c;超融合及安全业务方向服务多年的业界精英团队&#xff0c;尤其具备领先的运维服务和业务理解能力&#xff0c;已服务了大量的世界及中国500强客户&#xff…

【深度学习】3-4 神经网络的学习- 学习算法的实现

神经网络的学习步骤如下所示&#xff1a; 步骤1(mini-batch) 从训练数据中随机选出一部分数据&#xff0c;目标是减小mini-batch的损失函数的值 步骤2(计算梯度) 为了减小mini-batch的损失函数的值&#xff0c;需要求出各个权重参数的梯度 步骤3(更新参数) 将权重参数沿梯度…

redhat 6.4安装oracle11g RAC (四)

创建集群数据库 在节点rac1上用oracle用户执行dbca创建RAC数据库 [rootrac1 ~]# su - oracle [oraclerac1 ~]$ dbca选择创建数据库 自定义数据库&#xff08;也可以是通用&#xff09; 配置类型选择Admin-Managed&#xff0c;输入全局数据库名orcl&#xff0c;每个节点实例SI…

java线上问题排查基本命令

1、jvm基本命令 1.1、java命令 1.1.1、简介 java命令启动java应用程序。它通过启动Java运行时环境&#xff08;JRE&#xff09;、加载指定的类并调用该类的main&#xff08;&#xff09;方法来实现这一点。 1.1.2、命令链接 https://docs.oracle.com/javase/8/docs/techno…

electron 连接打印机打印pdf文件

electron 打印内容 区分系统 类似unix系统的使用 npm包&#xff1a;unix-printwindow系统使用&#xff1a; pdf-to-printer 运行线程 视图线程 函数参数 两个包都提供了print函数来打印文件&#xff0c;配置基本一致&#xff0c;只是参数形式有所不同&#xff0c;pdf-to-pr…

ESP32开发环境搭建Windows VSCode集成Espressif IDF插件ESP32_IDF_V5.0开发编译环境搭建

一、安装ESP32-IDF库 下载网址&#xff1a;https://dl.espressif.com/dl/esp-idf/ 打开上面的网页&#xff0c;选择单击页面中 ESP32-IDF v5.0.2 - Offine Installer&#xff0c;5.0.2是当前最新版本&#xff0c;如果没有ESP32-IDF v5.0.2 - Offine Installer&#xff0c;说明…

JS获取省市区/县,layui获取省市区,layui实现省市区联动,jquery实现省市区联动

前言 通过JS方式获取省市区数据&#xff0c;可自己手动更改JS文件数据 非常简单 效果 实现 百度网盘链接: https://pan.baidu.com/s/1RktJgXY0NP7Eq0ohvBPOEA 提取码: 477z gitee下载链接&#xff1a;https://gitee.com/yuanyongqiang/common-files/blob/master/area.js 下…

超高压系列IXBX50N360HV、IXBT14N300HV、IXBH32N300高压反向导通 (BiMOSFET™) IGBT器件

器件介绍&#xff1a; 超高压系列3000V - 3600V反向导通 (BiMOSFET™) IGBT将MOSFET和IGBT的优势相结合。这些高压器件的饱和电压和内置二极管的正向电压降均具有正电压温度系数&#xff0c;因此非常适合用于并联运行。“自由”内置体二极管用作保护二极管&#xff0c;为器件关…

LibOS Gramine安装

文章目录 参考资料Gramine安装运行helloworld升级kernel到5.15 参考资料 Gramine Quick start Gramine安装 Gramine安装要求&#xff1a; Linux 内核版本至少为 5.11&#xff08;启用 SGX 驱动程序&#xff09; 如果是5.4.0-150-generic版本&#xff0c;则可以参考《Install …

Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像写入相机内存(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像写入相机内存&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机BGAPISDK和相机内存的技术背景Baumer工业相机通过BGAPISDK将相机图像写入相机内存功能1.引用合适的类文件2.通过BGAPISDK将相机图像写入相机内存功能…

ADManager Plus:提升企业管理效率的强大利器

导语&#xff1a; 在当今数字化时代&#xff0c;企业管理的重要性不言而喻。有效的企业管理可以提高生产力、优化业务流程&#xff0c;并促进组织的持续增长。而ADManager Plus作为一款功能强大的企业管理工具&#xff0c;为企业提供了全面的解决方案&#xff0c;帮助企业管理…

从0到1精通自动化测试,pytest自动化测试框架,Fixture之conftest.py与yield实现teardown(四)

目录 一、Fixture之conftest.py 1、Fixture优势 2、fixture参数传入&#xff08;scope”function”&#xff09; 3、conftest.py配置 二、Fixture之yield实现teardown 1、scope“module” 2、yield执行teardown 3、yield遇到异常 4、addfinalizer终结函数 一、Fixture…

【云原生•监控】基于Prometheus的云原生集群监控(理论+实践)-01

【云原生•监控】基于Prometheus的云原生集群监控(理论实践)-01 前言 「笔者已经在公有云上搭建了一套临时环境&#xff0c;可以先登录体验下&#xff1a;」 http://124.222.45.207:17000/login 账号&#xff1a;root/root.2020 云原生监控挑战 Prometheus 是用 Go 语言编写&am…

FreeRTOS实时操作系统(四)中断任务管理

系列文章目录 文章目录 系列文章目录前言中断优先级FreeRTOS中的中断管理一系列中断管理寄存器中断配置寄存器中断屏蔽寄存器 中断管理实战 前言 跟着正点原子学习一下中断管理&#xff0c;正好之间没有总结过&#xff0c;还有些地方不清楚。 中断优先级 中断的工作方式就不介…

Oracle的DCL、DDL、DML语言学习使用——oracle入门学习(一)

Oracle的DCL、DDL、DML语言学习使用 前言1.SQL Plus1.1 命令行SQL PLUS使用sqlplus /nologsqlplus / as sysdba 1.2 oracle自带SQL PLUS使用1.3 sys和system用户的区别 2. Oracle的体系结构3.DCL语言什么是DCL语言3.1 查看数据文件位置和表空间3.2 创建表空间3.3 删除表空间3.4…

鉴源实验室丨TBOX通讯模组AT指令测试

作者 | 李伟 上海控安安全测评部总监 来源 | 鉴源实验室 引言&#xff1a;上一篇文章我们讲了整车的OTA升级测试(详解车载设备FOTA测试&#xff09;&#xff0c;本篇我们介绍在车载零配件上比较少见却很实用的测试&#xff1a;通讯模组的AT&#xff08;Attention&#xff09;指…