如何在PHP和JS中自定义动态网站?

时间:2014-03-09 12:11:31

标签: javascript php mysql ajax

我正在一个网站上分析我从几个远程仪表获得的能源数据。我正在使用JS,PHP和mySQL。我用一个客户的数据(特定类型和数量的远程仪表)开发了网站。这是我做的第一个网站,我有很多东西需要学习。

有以下步骤:

  1. 登录表单//每个人都一样
  2. PHP检查登录//每个人都相同
  3. 索引页面//每个人都一样
  4. 带有AJAX功能的Javascript将数据(日期范围)发布到php文件(calculation.php)来计算东西// JS文件对每个人来说都是一样的
  5. PHP文件从mySQL获取数据并进行许多关于能量的计算,然后回应它
  6. JS文件获取数据(通过AJAX),然后通过谷歌图表库
  7. 显示图表

    问题是获取AJAX POST的PHP文件(步骤4和步骤5结束)不会为每个客户端执行相同的计算。所以我不知道该怎么办,我有点迷茫。 我想:

    1. 在每个客户端的PHP文件中添加一个条件,例如“if client_id = X“//这对于几十个客户来说似乎太糟糕了
    2. 为每个客户端编写不同的PHP文件。写下的名字 这个PHP文件在mysql表“clients”中。做一个中间的PHP AJAX调用的文件将检查client_id 然后,数据库将特定的PHP文件“包含”到临时文件中。
    3. 将PHP PDO请求以字符串类型写入表中 然后“clients”从PHP文件“calculation.php”中查询它。 PHP文件将执行正确的命令。
    4. 这些解决方案对我来说似乎不太好(可能是第三种?)。你有什么主意吗?提前谢谢。

      编辑php代码示例

      第一位客户:

      $reponse1 = $bdd->prepare("SELECT DATE_FORMAT(Date, '%H:%i') AS timekey, AVG(Value) FROM meter1 WHERE Date>='$from' AND Date<='$to' GROUP BY timekey");
      $reponse1->execute();
      $myArrayLP24temp1['Hour']= $reponse1->fetchAll(PDO::FETCH_COLUMN, 0);
      $reponse1->execute();
      $myArrayLP24temp1['Value']= $reponse1->fetchAll(PDO::FETCH_COLUMN, 1);
      
      $reponse2 = $bdd->prepare("SELECT DATE_FORMAT(Date, '%H:%i')AS timekey, AVG(Value) FROM meter2 WHERE Date>='$from' AND Date<='$to' GROUP BY timekey");
      $reponse2->execute();
      $myArrayLP24temp2['Value']= $reponse2->fetchAll(PDO::FETCH_COLUMN, 1);
      
      
      for ($ii=0; $ii<24*4; ++$ii){    
          $meter1NoRound=$myArrayLP24temp1['Value'][$ii]*4;
          $meter2NoRound=$myArrayLP24temp2['Value'][$ii]*4;
      
          $meter1=round($meter1NoRound,1);
          $meter2=round($meter2NoRound,1);
      
          $myArrayLP24['rows'][]= array('c' => array( array('v'=>$myArrayLP24temp1['Hour'][$ii]), array('v'=>($meter1)), array('v'=>($meter2))));  
      

      第二位客户:

      $reponse1 = $bdd->prepare("SELECT DATE_FORMAT(Date, '%H:%i') AS timekey, AVG(Value) FROM meter1 WHERE Date>='$from' AND Date<='$to' GROUP BY timekey");
      $reponse1->execute();
      $myArrayLP24temp1['Hour']= $reponse1->fetchAll(PDO::FETCH_COLUMN, 0);
      $reponse1->execute();
      $myArrayLP24temp1['Value']= $reponse1->fetchAll(PDO::FETCH_COLUMN, 1);
      
      for ($ii=0; $ii<24*4; ++$ii){    
          $meter1NoRound=$myArrayLP24temp1['Value'][$ii]*4;
      
          $meter1=round($meter1NoRound,1);
      
          $myArrayLP24['rows'][]= array('c' => array( array('v'=>$myArrayLP24temp1['Hour'][$ii]), array('v'=>($meter1))));  
      

      以上示例显示了两个不同的代码。第一个用于具有两米的客户端,第二个用于具有一米的客户端。它可能长达10米,有时会有亚米,有时我不得不加。因此,每个客户端的代码都是不同的(除了具有完全相同配置的客户端,但这种情况不会经常发生)。

1 个答案:

答案 0 :(得分:0)

为什么不将变量值存储在数据库中? 然后,当客户端到来时,您将拥有所有需要的信息来进行计算。

认真思考,尽可能标准化。 永远不要忘记一个优秀的开发人员是一个懒惰的人; - )

修改

当你说:

“问题是获取AJAX POST的PHP文件(步骤4和步骤5结束)不会对每个客户端执行相同的计算。”

你是什么意思?

  1. 每个客户的计算公式不同?
  2. 公式中使用的值对于每个客户端都不同?
  3. 我理解你的问题的方式是第一种情况。 无论如何,对于这两种情况,都要在数据库中存储您需要的内容,并将其与客户端一起使用。

    可能我不太清楚你需要什么。如果是,请发送一段代码来说明您的问题。