Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Odczyt ostatniej danej z bazy danych
Forum PHP.pl > Forum > Przedszkole
Bullseye
Hej, nabazgrałem kod który rysuje mi dane w tabelach z danych zebranych z czujników w domu, wszystko to działa OK ale chciałbym też by ostatni pomiar z konkretnej tabeli leciał na wskaźnik zegarowy i za grzyba nie wiem jak tego dokonać sad.gif

Przykładowo ostatni pomiar z tempOUT ląduje do zmiennej wynik i potem do var temp, i dzięki temu mój wskaźnik zegarowy wyświetlać będzie tylko ostatni pomiar dzięki czemu będę miał aktualny podgląd aktualnej temperatury a to co w tabeli będzie rysowało wykres.

var temp = '<?= $wynik ?>';

  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Refresh" content="30" />
  5. <style>
  6. body {
  7. background: #333;
  8. }
  9. /*Centering the gauge*/
  10. canvas {
  11. display: inline;
  12. float: center;
  13. margin: 10px auto;
  14. }
  15. </style>
  16. <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
  17. <script src="./jquery.gauge.js"></script>
  18. </head>
  19. <body>
  20. <center>
  21. <?php
  22. $servername = "127.0.0.1";
  23. $username = "esp";
  24. $password = "esp";
  25. $dbname = "esp";
  26. $conn = new mysqli($servername, $username, $password, $dbname);
  27. if ($conn->connect_error) {die("Connection failed: " . $conn->connect_error);}
  28.  
  29. $sql = "SELECT ID, wilgotnosc, tempOUT, odczuwalna, cisnienie, tempIN, data, czas FROM DOM ORDER BY id DESC LIMIT 10";
  30.  
  31. $result = $conn->query($sql);
  32. if ($result->num_rows >= 0) {
  33. echo '<table cellspacing="0" border="2" rules="rows" bordercolor="black">';
  34. echo '<tr>
  35. <td width="100px" bgcolor="silver" align="center">Pomiar wykonano o:</td>
  36. <td width="100px" bgcolor="gray" align="center">Temperatura zewnetrzna:</td>
  37. <td width="100px" bgcolor="silver" align="center">Temperatura odczuwalna:</td>
  38. <td width="100px" bgcolor="gray" align="center">Cisnienie:</td>
  39. <td width="100px" bgcolor="silver" align="center">Wilgotnosc:</td>
  40. <td width="100px" bgcolor="gray" align="center">Temperatura wewnatrz:</td>
  41.  
  42.  
  43. </tr>';
  44. while($row = $result->fetch_assoc()) {
  45. echo '<tr>
  46. <td bgcolor="silver" align="center">' . $row["czas"].'</td>
  47. <td bgcolor="gray" align="center">' . $row["tempOUT"].'</td>
  48. <td bgcolor="silver" align="center">' . $row["odczuwalna"].'</td>
  49. <td bgcolor="gray" align="center">' . $row["cisnienie"].'</td>
  50. <td bgcolor="silver" align="center">' . $row["wilgotnosc"].'</td>
  51. <td bgcolor="gray" align="center">' . $row["tempIN"]. "</td>
  52.  
  53. </tr>";
  54. }
  55. echo "</table>";
  56. } else {
  57. echo "0 results";
  58. }
  59. $conn->close();
  60. ?>
  61.  
  62.  
  63. <canvas id="gauge1" width="200" height="200"></canvas>
  64. <canvas id="gauge2" width="200" height="200"></canvas>
  65. <canvas id="gauge3" width="200" height="200"></canvas>
  66. <script>
  67. $sql = "SELECT ID, wilgotnosc FROM DOM ORDER BY id DESC LIMIT 1";
  68. var temp = '<?= $wynik ?>';
  69.  
  70. $(document).ready(function (){
  71. $("#gauge1").gauge(temp, {color: "#F44336", unit: " °C"});
  72. $("#gauge2").gauge(70, {color: "#8BC34A", unit: " %", font: "40px verdana"});
  73. $("#gauge3").gauge(37, {unit: "°C"});
  74. });
  75. </script>
  76. </body>
  77. </html>
trueblue
Zrób to analogicznie do tego jak mieszasz PHP z HTML.
Bullseye
Niezbyt rozumiem ?
trueblue
Tak jak tworzysz HTML poprzez PHP, tak samo zrób z kodem w znacznikach <script>.
Naprawdę uważasz, że zapytanie SQL wykona się w tymże znaczniku?
Bullseye
Nie mam pojęcia niestety, stąd pytanie do was, bardziej ogarniętych smile.gif

Więc jak rozumiem wszystkie zmienne wyciągane z MySQL przez PHP mają być w znaczniku PHP przed skryptem a do skryptu tylko zmienne podczepić ?
trueblue
Tak. Przecież dokładnie tak samo budujesz tabelę i wstawiasz wartości do komórek. W Twoim przypadku linia 68 jest ok.
A tak przy okazji. Drugie zapytanie nie jest potrzebne. Szukaną wartość możesz pobrać przy pierwszej iteracji z pierwszego zapytania.
Bullseye
Ok, jak wrócę do domu to postaram się zrobić zgodnie z sugestiami i dam znać czy mi wyszło czy dalej coś nie gra smile.gif

Ok, sama zmienna się wysyła do zegara niestety nie wiem jak odczytać ja z bazy danych, znaczy tak mi się wydaje, bo po dodaniu formułki strona wczytuje tylko tło i nic poza tym:

dodalem:
  1. $wynik = mysql_query("SELECT wilgotnosc FROM DOM");


zaraz po:
  1. <?php
  2. $servername = "127.0.0.1";
  3. $username = "esp";
  4. $password = "rasta105";
  5. $dbname = "esp";
  6. $conn = new mysqli($servername, $username, $password, $dbname);
  7. if ($conn->connect_error) {die("Connection failed: " . $conn->connect_error);}
  8.  
  9. $sql = "SELECT ID, wilgotnosc, tempOUT, odczuwalna, cisnienie, tempIN, data, czas FROM DOM ORDER BY id DESC LIMIT 10";
  10.  
  11. $result = $conn->query($sql);
trueblue
Jeśli nie chcesz pobrać wartości z pierwszego zapytania (tego, z którego tworzysz tabelę), to nie wiem dlaczego zmieniłeś zapytanie na takie bez ograniczenia liczby zwracanych rekordów.
Druga sprawa. Do pętli pobierasz wartości poprzez fetch_assoc, dlaczego tu tego nie robisz? Uważasz, że w zmiennej $wynik naprawdę jest oczekiwana wartość?
Bullseye
Po części rozumiem o co Ci chodzi ale chyba nie do końca umiem to poprawnie wykonać sad.gif

  1. $wil = "SELECT wilgotnosc FROM DOM ORDER BY id DESC LIMIT 1";
  2. $wynik = "$wil->fetch_assoc())";
  3.  


  1. $zapytanie = "SELECT wilgotnosc FROM DOM ORDER BY id DESC LIMIT 1";
  2. $wynik = '$zapytanie->fetch_assoc())';


Za żadne skarby nie umiem wyjąć jednego wyniku sad.gif
trueblue
W linii 44 pierwszego kodu wyciągasz jeden wynik, tyle, że w pętli while.
Przecież wystarczy postępować prawie analogicznie do budowy tej tabeli, aby osiągnąć to co teraz chcesz zrobić.
Bullseye
Niestety, dalej niezbyt rozumiem. Może ku wątpliwością powiem że nie pisałem całego kodu sam bo aż tak zaawansowany nie jestem - w zasadzie to zlepek tego co znalazłem po różnych forach.
trueblue
Rozumiem i właśnie dlatego mógłbyś choć przez analogię dopisać potrzebny fragment.
Kolejne kroki do pobrania danych z zapytania do tabeli są w liniach 29, 31 i 44.
Bullseye
Ale każda próba dopisania czegoś dalej kończy się u mnie wyświetleniem samego tła bez żadnej tabeli ani zegarów.
viking
Polecam ci zajrzeć do dokumentacji i na podstawie zawartych w niej przykładów coś napisać. Dio tego wyświetl sobie po pętli zawartość $row.
Bullseye
Ok, ogarnąłem, faktycznie wyniki były bliżej niż mi się wydawało ! dzięki za tę część, teraz natomiast nie wiem do końca czy dobrze wysyłam, ale chyba źle bo w zegarze jest zły wynik:

  1. $wynik = "$row["tempOUT"]";


Podpowiecie może jak zoptymalizować kod, by 3 pojedyncze wyniki były generowane ?
Tzn, przed linią 59 muszę dodać select z ograniczeniem wyników do jednego i dalej wysyłać do zmiennych tak ? czy tworzyć już oddzielne połaczenie bazy - choć drugie wydaje mi się mniej sensowne.

Niestety nie działa mi ciągle ten kod, obecnie tak wygląda, może ktoś poradzić ?


  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Refresh" content="30" />
  5. <style>
  6. body {
  7. background: #333;
  8. }
  9. /*Centering the gauge*/
  10. canvas {
  11. display: inline;
  12. float: center;
  13. margin: 10px auto;
  14. }
  15. </style>
  16. <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
  17. <script src="./jquery.gauge.js"></script>
  18. </head>
  19. <body>
  20. <center>
  21. <?php
  22. $servername = "127.0.0.1";
  23. $username = "esp";
  24. $password = "rasta105";
  25. $dbname = "esp";
  26. $conn = new mysqli($servername, $username, $password, $dbname);
  27. if ($conn->connect_error) {die("Connection failed: " . $conn->connect_error);}
  28.  
  29. $sql = "SELECT ID, wilgotnosc, tempOUT, odczuwalna, cisnienie, tempIN, data, czas FROM DOM ORDER BY id DESC LIMIT 1";
  30. $result = $conn->query($sql);
  31.  
  32. if ($result->num_rows >= 0) {
  33. echo '<table cellspacing="0" border="2" rules="rows" bordercolor="black">';
  34. echo '<tr>
  35. <td width="100px" bgcolor="silver" align="center">Pomiar wykonano o:</td>
  36. <td width="100px" bgcolor="gray" align="center">Temperatura zewnetrzna:</td>
  37. <td width="100px" bgcolor="silver" align="center">Temperatura odczuwalna:</td>
  38. <td width="100px" bgcolor="gray" align="center">Cisnienie:</td>
  39. <td width="100px" bgcolor="silver" align="center">Wilgotnosc:</td>
  40. <td width="100px" bgcolor="gray" align="center">Temperatura wewnatrz:</td>
  41.  
  42.  
  43. </tr>';
  44. while($row = $result->fetch_assoc()) {
  45. echo '<tr>
  46. <td bgcolor="silver" align="center">' . $row["czas"].'</td>
  47. <td bgcolor="gray" align="center">' . $row["tempOUT"].'</td>
  48. <td bgcolor="silver" align="center">' . $row["odczuwalna"].'</td>
  49. <td bgcolor="gray" align="center">' . $row["cisnienie"].'</td>
  50. <td bgcolor="silver" align="center">' . $row["wilgotnosc"].'</td>
  51. <td bgcolor="gray" align="center">' . $row["tempIN"]. "</td>
  52.  
  53. </tr>";
  54. }
  55. echo "</table>";
  56. } else {
  57. echo "0 results";
  58. }
  59.  
  60. $wynik = ' . $row["tempIN"]. ';
  61. $conn->close();
  62. ?>
  63.  
  64.  
  65. <canvas id="gauge1" width="200" height="200"></canvas>
  66. <canvas id="gauge2" width="200" height="200"></canvas>
  67. <canvas id="gauge3" width="200" height="200"></canvas>
  68. <script>
  69. var temp = '<?= $wynik ?>';
  70.  
  71. $(document).ready(function (){
  72. $("#gauge1").gauge(temp, {color: "#F44336", unit: " °C"});
  73. $("#gauge2").gauge(70, {color: "#8BC34A", unit: " %", font: "40px verdana"});
  74. $("#gauge3").gauge(37, {unit: "°C"});
  75. });
  76. </script>
  77. </body>
  78. </html>


W miejscu temperatury zegara wyświetla się tylko: . $row["tempIN"].
viking
A jak łączymy stringi w php i jak odwolujemy się do zmiennej? Wystarczy zobaczyć w dokumentacji bo większych postaw nie ma
Lord
Cytat(viking @ 28.09.2018, 06:35:58 ) *
A jak łączymy stringi w php i jak odwolujemy się do zmiennej? Wystarczy zobaczyć w dokumentacji bo większych postaw nie ma


Linia 60:
$wynik = ' . $row["tempIN"]. '; => $wynik = $row["tempIN"];

i staraj się używać ' a nie ", albo chociaż jedno albo drugie a nie jakiś mix bez ładu i składu.

Pyton_000
Cytat(Lord @ 28.09.2018, 10:14:47 ) *
Linia 60:
$wynik = ' . $row["tempIN"]. '; => $wynik = $row["tempIN"];

i staraj się używać ' a nie ", albo chociaż jedno albo drugie a nie jakiś mix bez ładu i składu.


Jak już tak pouczasz kolegę to

Kod
$wynik = $row["tempIN"]; => $wynik = $row['tempIN'];
Lord
Cytat(Pyton_000 @ 28.09.2018, 11:12:25 ) *
Jak już tak pouczasz kolegę to

Kod
$wynik = $row["tempIN"]; => $wynik = $row['tempIN'];


eh no masz racje nie zauważyłem ;(
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.