我正在使用mySQL和Highcharts进行项目。 首先,我有一个ESP32,其中有几个,其测量值已写入 一个名为“ MariaDB”的数据库。 我在Highsotck图表中表示的数据库中的度量值。
目前为止还可以,但是我真正的问题是:
我有一个data.php文件和一个main.php文件。我想更改 这两个文件之间的字符串“ $ sensorid”。我可以将变量“ $ sensorid”从main.php发送到 使用“ SESSION”命令。那也可以,但是我不能在 在data.php文件中(但使用echo可以正确发送该值)。
Fshape
希望您能理解我的意思(我是德国人,所以我的英语不太好),否则请问。
答案 0 :(得分:0)
@ DR.Alfred欢迎来到SO。 第一种建议是您尝试将查询转换为mysqli或PDO语句,因为不建议使用mysql并存在安全问题。
返回您的代码,$ _ SESSION [“ sensorid”]的值正确,但是在您的查询中:
mysql_query("SELECT * FROM `Messwerte` WHERE SensorID = '$sensorid' ");
您尝试使用未声明的变量$ sensorid
如果您需要使用$_SESSION["sensorid"]
的值,则可以在查询中直接使用会话变量whitch包含所需的值,或者更好的是,您必须将其分配给变量$ 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语句。
答案 1 :(得分:0)
@Sigma,谢谢您的详细回答。我试图用您的所有建议解决问题,但是没有用。我正在寻找mysqli或PDO,但看来,较旧的“ mysql”不是问题。从php文件到php文件的字符串似乎不起作用。
这是带有建议的代码。
<?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>
答案 2 :(得分:0)
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);
?>