使用PHP / Javascript从数据库自动更新

时间:2017-03-08 15:27:48

标签: javascript php sqlsrv

问题

我们是一家纺织品制造厂,在自动化生产线上有许多PLC。我们希望创建一个可通过Internet访问的显示器,它将以易于理解的格式显示关键性能指标。

我是初级Web开发人员/初级SQL DBA /初级系统管理员,充当我们美国站点的主要网络/系统管理员和DBA。

我试图找出如何解决问题,而不必学习一门全新的语言。我在PHP方面很有经验,所以我一直在尝试使用它。

基本上,我已经设法使系统正常运行,但我想了解这是否是一个糟糕的解决方案和/或是否有更好的解决方案我应该努力。

请花一点时间浏览以下代码并告诉我您的想法。

解决方案

一般概念是个别查询将存储在单独的包含文件中,并将使用javascript定期重新加载。

的index.php

<!DOCTYPE HTML>

<html>

<head>

    <title>Performance Display</title>

    <link href="https://fonts.googleapis.com/css?family=Noto+Sans" rel="stylesheet">

    <link rel="stylesheet" type="text/css" href="styles/normalize.css" />
    <link rel="stylesheet" type="text/css" href="styles/main.css" />

</head>

<body onload="updateClock(); setInterval('updateClock()', 1000);
              loadData(); setInterval('loadData()', 30000);">

<div id="container">

    <header>
        <div id="product">&nbsp;</div>
        <div id="data">&nbsp;</div>
        <div id="clock">&nbsp;</div>
    </header>

    <table id="product_table">
        <thead>
            <tr>
                <th>&nbsp;</th>
                <th>ACTUAL</th>
                <th>STANDARD</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td id="output_actual">&nbsp;</td>
                <td id="output_standard">&nbsp;</td>
            </tr>
            <tr>
                <td id="speed_actual">&nbsp;</td>
                <td id="speed_standard">&nbsp;</td>
            </tr>
        </tbody>
    </table>

</div>

</body>

<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script type="text/javascript" src="scripts/functions.js"></script>

</html>

functions.js

function updateClock() {

    // This is a standard clock function removed to avoid unnecessary clutter.

};

function loadData() {
    $("#date").load("includes/date.php");
    $("#product").load("includes/product.php");
    $("#output_actual").load("includes/output_actual.php");
    $("#speed_actual").load("includes/speed_actual.php");
    $("#output_standard").load("includes/output_standard.php");
    $("#speed_standard").load("includes/speed_standard.php");
};

product.php

<?php

include_once("connections.php");

    $sql = "SELECT TOP 1 * FROM Tbl_Perf_Data_Help ORDER BY Date_Time DESC";
    $stmt = sqlsrv_query($productionUSA->connect(), $sql);

    while($obj = sqlsrv_fetch_object($stmt)) {
        echo "PRODUCT ".$obj->Current_Product;
    }

connections.php

<?php

class connection {

    private $serverName;
    private $connInfo;
    public $conn;

    public function __construct($serverName, $db, $usr, $pwd) {

        $this->serverName = $serverName;
        $this->connInfo = array("Database"=>$db, "UID"=>$usr, "PWD"=>$pwd);

    }

    public function connect() {

        $this->conn = sqlsrv_connect($this->serverName, $this->connInfo);

        if (($this->conn === false) or (sqlsrv_begin_transaction($this->conn) === false)) {
            die(print_r(sqlsrv_errors(), true));
        }

        return $this->conn;
        sqlsrv_close($this->conn);

    }

}

$productionUSA = new connection("dbserv", "productionDB", "admin", "CorrectHorseBatteryStaple");

最后的想法

如您所见,每个动态数据每30秒重新加载为一个php页面。我认为这可能是不优雅的原因是性能显示的完整代码有大约58个字段。这是58个单独的php文件,如果我理解正确,可能有58个与我们数据库的不同连接。

非常感谢任何指导或建议!

1 个答案:

答案 0 :(得分:0)

老实说,你可以制作一个静态页面,每隔N秒<meta http-equiv="refresh" content="30">刷新一次元数据。

按照目前的方式进行操作是一项工作,我会让每个php页面“回显”一个json_encoded字符串,以便您可以根据需要格式化数据。这些页面可以用ajax调用,但是通过你的技能水平的声音,我会使用静态页面。