Я работаю над проектом с 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);
?>
Надеюсь, вы понимаете, что я имею в виду (я из Германии, поэтому я не очень хорошо говорю по-английски), иначе просто спросите.
mysql_* устарели!. Вместо этого используйте функции mysqli_ * или PDO mysql. (ссылки на немецком)
Измените $ result = mysql_query ("ВЫБРАТЬ * ИЗ Messwerte WHERE SensorID = '$ sensorid'"); / * В этой части мне нужно значение '$ sensorid'! * / To: $ result = mysql_query ("SELECT * FROM Messwerte WHERE SensorID = '". $ _ SESSION ["sensorid"]. "'"); / * В этой части мне нужно значение '$ sensorid'! * /
Вы должны прочитать про область видимости переменных, мастеринг, который сэкономит вам много времени в будущем. Между тем, попробуйте объявить локальную (для файла) переменную $sensorId=$_SESSION['sensorId']; перед ее использованием.
Вы загружаете оба файла по одному запросу или вызываете каждый по одному запросу?
Что вы имеете в виду под "загрузкой обоих файлов по одному запросу"?






@ 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, когда вам нужно работать с запросами и db.
@Sigma, спасибо за подробный ответ. Я пытался решить свои проблемы с помощью всех ваших предложений, но это не сработало. Я ищу mysqli или PDO, но похоже, что более старый mysql не является проблемой. Что-то со строкой из php-файла в 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>
Доктор Альфред понял, он понял! Я даже не могу этого понять, потому что искал эту проблему около 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);
?>
$ sensorid = $ _SESSION ["sensorid"]; Я думаю, вы хотите получать данные из сессий. Вы должны объявить переменную или напрямую передать $ _SESSION ["sensorid"] в запросе mysql.