Изменить строку между двумя php-файлами

Я работаю над проектом с 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"]; Я думаю, вы хотите получать данные из сессий. Вы должны объявить переменную или напрямую передать $ _SESSION ["sensorid"] в запросе mysql.

Vikash Dhiman 21.09.2018 13:47
Функции mysql_* устарели!. Вместо этого используйте функции mysqli_ * или PDO mysql. (ссылки на немецком)
Philipp Maurer 21.09.2018 13:49

Измените $ result = mysql_query ("ВЫБРАТЬ * ИЗ Messwerte WHERE SensorID = '$ sensorid'"); / * В этой части мне нужно значение '$ sensorid'! * / To: $ result = mysql_query ("SELECT * FROM Messwerte WHERE SensorID = '". $ _ SESSION ["sensorid"]. "'"); / * В этой части мне нужно значение '$ sensorid'! * /

Sigma 21.09.2018 13:49

Вы должны прочитать про область видимости переменных, мастеринг, который сэкономит вам много времени в будущем. Между тем, попробуйте объявить локальную (для файла) переменную $sensorId=$_SESSION['sensorId']; перед ее использованием.

YvesLeBorg 21.09.2018 13:50

Вы загружаете оба файла по одному запросу или вызываете каждый по одному запросу?

Philipp Maurer 21.09.2018 13:55

Что вы имеете в виду под "загрузкой обоих файлов по одному запросу"?

DR.Alfred 27.09.2018 09:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
80
3

Ответы 3

@ 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);

?>

Другие вопросы по теме