【问题标题】:Change String between two php-Files在两个 php 文件之间更改字符串
【发布时间】:2018-09-21 11:44:37
【问题描述】:

我正在使用 mySQL 和 Highcharts 进行项目。 首先我有一个 ESP32 有几个,其测量值被写入 一个名为“MariaDB”的数据库。 我在 Highsotck 图表中表示的数据库中的这些测量值。

到目前为止效果很好,但我真正的问题是:

我有一个 data.php 文件和一个 main.php 文件。我想改变 这两个文件之间的字符串“$sensorid”。我可以将变量“$sensorid”从 main.php 发送到 使用“会话”命令。这也有效,但我不能在 在 data.php 文件中(但使用 echo 正确发送了值)。

<?php


SESSION_START(); 

    echo "Die empfangene SensorID lautet" . 
          $_SESSION["sensorid"] ;                          //This output is correct :) 


date_default_timezone_set('Europe/Berlin');

$con = mysql_connect("IP of database","username","password");

if (!$con) {
  die('Could not connect: ' . mysql_error());
}

mysql_select_db('MyHome', $con);

$result = mysql_query("SELECT * FROM `Messwerte` WHERE SensorID = '$sensorid' ");     /*In this part I need the value '$sensorid'!*/

while($row = mysql_fetch_array($result)) {
  $datum = $row['DateTime'];
  $value = round($row['Messwert'],1);

  $uts = strtotime ($datum);

if (date('I', time()))
{
   $uts = $uts + 7200;
   $x=1;
}
else
{
   $uts=$uts+3600;
if($x==1)
 {
        $uts=$uts-7200;
        $x=0;
 }
}

  $datum=date('l, F j y H:i:s',$uts);
  $uts *= 1000; // convert from Unix timestamp to JavaScript time
   $dataIN[] = array((float)$uts,(float) $value);

}
echo json_encode($dataIN);
mysql_close($con);

?>

我希望你明白我的意思(我来自德国,所以我的英语不太好)否则就问吧。

【问题讨论】:

  • $sensorid = $_SESSION["sensorid"] ;我认为您想从会话中获取数据。您必须声明变量或直接在 mysql 查询中传递 $_SESSION["sensorid"]。
  • mysql_* functions are deprecated!。请改用mysqli_* 函数或PDO mysql。 (德语链接)
  • 更改 $result = mysql_query("SELECT * FROM Messwerte WHERE SensorID = '$sensorid'"); /*在这部分我需要值'$sensorid'!*/ to: $result = mysql_query("SELECT * FROM Messwerte WHERE SensorID = '".$_SESSION["sensorid"]."' "); /*在这部分我需要值'$sensorid'!*/
  • 您应该阅读有关 variable scope 的内容,掌握这将在未来为您节省大量时间。同时,在使用之前尝试声明一个本地(文件)变量$sensorId=$_SESSION['sensorId'];
  • 你是在一个请求中加载两个文件,还是在一个请求中调用每个文件?

标签: php


【解决方案1】:

@DR.Alfred 欢迎来到 SO。 第一个建议是您尝试将查询转换为 mysqli 或 PDO 语句,因为 mysql 已被弃用并且存在安全问题。

返回您的代码,$_SESSION["sensorid"] 的值是正确的,但在您的查询中:

mysql_query("SELECT * FROM `Messwerte` WHERE SensorID = '$sensorid' ");

您尝试使用未声明的变量 $sensorid

如果您需要$_SESSION["sensorid"] 的值,您可以在查询中直接使用会话变量,其中包含您需要的值,或者更好的是您必须分配给变量 $sensorid(或者您可以根据需要调用它)以这种方式获得会话的价值:

$sensorid = $_SESSION["sensorid"];

然后在您的查询中,您可以使用 $sensorid 来获取值,因此您的查询变为:

$result = mysql_query("SELECT * FROM `Messwerte` WHERE SensorID = ' ".$sensorid." ' ");

如果您不想将会话的值分配给新变量,您可以直接在查询中使用它:

$result = mysql_query("SELECT * FROM `Messwerte` WHERE SensorID = ' ".$_SESSION["sensorid"]." ' ");

希望我的解释清楚并帮助您了解如何在 php 中使用变量。当然,我建议您阅读有关基本 php 和 mysql 的更多信息,并在必须使用查询和数据库时使用 mysqli 或更好的 PDO 语句。

【讨论】:

    【解决方案2】:

    @Sigma,感谢您的详细回答。我试图用你的所有建议来解决我的问题,但没有奏效。我正在寻找 mysqli 或 PDO,但似乎较旧的“mysql”不是问题。从 php-File 到 php-File 的字符串似乎不起作用。

    这是您提出的建议的代码。

    <?php
    
    
    SESSION_START();
    
    $sensorID = $_SESSION["sensorID"]; 
    
        echo "Die empfangene SensorID lautet" . 
              $_SESSION["sensorID"] ;                          //This output is correct :) 
    
    date_default_timezone_set('Europe/Berlin');
    
    $con = mysql_connect("IP of database","username","password");
    
    if (!$con) {
      die('Could not connect: ' . mysql_error());
    }
    
    mysql_select_db('MyHome', $con);
    
    $result = mysql_query("SELECT * FROM `Messwerte` WHERE SensorID = ' ".$sensorID." ' ");   /*In this part I need the value '$sensorID'!*/
    
    while($row = mysql_fetch_array($result)) {
      $datum = $row['DateTime'];
      $value = round($row['Messwert'],1);
    
      $uts = strtotime ($datum);
    
    if (date('I', time()))
    {
       $uts = $uts + 7200;
       $x=1;
    }
    else
    {
       $uts=$uts+3600;
    if($x==1)
     {
            $uts=$uts-7200;
            $x=0;
     }
    }
    
      $datum=date('l, F j y H:i:s',$uts);
      $uts *= 1000; // convert from Unix timestamp to JavaScript time
       $dataIN[] = array((float)$uts,(float) $value);
    
    }
    echo json_encode($dataIN);
    mysql_close($con);
    
    ?>
    

    第二个 php 文件

    <?php 
    
    
    $sensorID = "P_INNEN";
    
    SESSION_START(); 
    
    
    $_SESSION['$sensorID'];
    
    ?>
    
    <a href="P_INNEN_data.php">Go to P_INNEN_data.php !</a>
    

    【讨论】:

      【解决方案3】:

      Dr.Alfred 明白了,他明白了!我什至无法意识到这一点,因为我花了大约 2 个月的时间寻找这个问题。

      对于这些感兴趣的人来说,问题是什么。我是这样解决的:

      <?php
      
      $x = 'P_INNEN';
      
      ?>
      
      
      <!DOCTYPE HTML>
      <html>
          <head>
              <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
              <title>AZ Elektronik / Automatik, Emmen</title>
      
              <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
              <script type="text/javascript">
      
      $(function() {
      
      
      
          $.getJSON("P_INNEN_data.php?x=P_INNEN", function(data) { //here I had to also fill in "?x=P_INNEN?x=P_INNEN"!, not just "P_INNEN_data.php"
      
      
              // Create a timer
              var start = + new Date();
      
              // Create the chart
              $('#container').highcharts('StockChart', {
                  chart: {
                      events: {
                          load: function(chart) {
                              this.setTitle(null, {
                                  text: 'Built chart at '+ (new Date() - start) +'ms'
                              });
                          }
                      },
                      zoomType: 'x'
                  },
      
                  rangeSelector: {
                      buttons: [{
                          type: 'day',
                          count: 1,
                          text: '24h'
                      }, {
                          type: 'week',
                          count: 1,
                          text: '1w'
                      }, {
                          type: 'month',
                          count: 1,
                          text: '1m'
                      }, {
                          type: 'month',
                          count: 6,
                          text: '6m'
                      }, {
                          type: 'year',
                          count: 1,
                          text: '1y'
                      }, {
                          type: 'all',
                          text: 'All'
                      }],
                      selected: 1
                  },
      
                  xAxis: {
                     ordinal: false
                  },
      
                  yAxis: {
                      title: {
                          text: 'Luftdruck Innen'
                      }
                  },
      
                  title: {
                      text: 'Luftdruck Innen'
                  },
      
                  subtitle: {
                      text: 'Built chart at...' // dummy text to reserve space for dynamic subtitle
                  },
      
                  series: [{
                      name: 'mB',
                      type: 'line',
                      data: data,
                      tooltip: {
                          valueDecimals: 1,
                          valueSuffix: ' mB'
                      },
                      fillColor : {
                          linearGradient : {
                              x1: 0,
                              y1: 0,
                              x2: 0,
                              y2: 1
                          },
                          stops : [[0, Highcharts.getOptions().colors[0]], [1, 'rgba(0,0,0,0)']]
                      },
                  }]
      
              });
          });
      });
              </script>
          </head>
          <body>
      <script src="/Highstock/code/highstock.js"></script>
      <script src="/Highstock/code/modules/exporting.js"></script>
      
      <div id="container" style="height: 500px; min-width: 500px"></div>
          </body>
      </html>
      
      
      
      
      <?php
      
      $x=$_GET["x"]; //I did it with $_GET[], but SESSION would also work
      
      
      date_default_timezone_set('Europe/Berlin');
      
      $con = mysql_connect("IP of databse","username","password");
      
      if (!$con) {
        die('Could not connect: ' . mysql_error());
      }
      
      mysql_select_db('MyHome', $con);
      
      $result = mysql_query("SELECT * FROM `Messwerte` WHERE SensorID = '$x' "); //There was the main problem: I made two spaces between ' and $x before
      
      
      
      while($row = mysql_fetch_array($result)) {
        $datum = $row['DateTime'];
        $value = round($row['Messwert'],2);
      
      
        $uts = strtotime ($datum);
      
      if (date('I', time()))
      {
          $uts = $uts + 7200;
          $x=1;
      }
      else
      {
          $uts=$uts+3600;
      if($x==1)
       {
              $uts=$uts-7200;
              $x=0;
       }
      }
      
        $datum=date('l, F j y H:i:s',$uts);
        $uts *= 1000; // convert from Unix timestamp to JavaScript time
         $data[] = array((float)$uts,(float) $value);
      
      }
      
      
      echo json_encode($data);
      mysql_close($con);
      
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多