Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Odczyt ostatniej danej z bazy danych
Bullseye
post 25.09.2018, 21:16:57
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 10.01.2009

Ostrzeżenie: (0%)
-----


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>
Go to the top of the page
+Quote Post
trueblue
post 25.09.2018, 21:30:48
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Zrób to analogicznie do tego jak mieszasz PHP z HTML.


--------------------
Go to the top of the page
+Quote Post
Bullseye
post 26.09.2018, 05:42:46
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 10.01.2009

Ostrzeżenie: (0%)
-----


Niezbyt rozumiem ?
Go to the top of the page
+Quote Post
trueblue
post 26.09.2018, 08:52:31
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
Bullseye
post 26.09.2018, 09:44:17
Post #5





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 10.01.2009

Ostrzeżenie: (0%)
-----


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ć ?
Go to the top of the page
+Quote Post
trueblue
post 26.09.2018, 09:58:55
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Bullseye
post 26.09.2018, 17:53:41
Post #7





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 10.01.2009

Ostrzeżenie: (0%)
-----


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);
Go to the top of the page
+Quote Post
trueblue
post 26.09.2018, 18:00:35
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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ść?


--------------------
Go to the top of the page
+Quote Post
Bullseye
post 26.09.2018, 18:47:24
Post #9





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 10.01.2009

Ostrzeżenie: (0%)
-----


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

Ten post edytował Bullseye 26.09.2018, 18:28:35
Go to the top of the page
+Quote Post
trueblue
post 26.09.2018, 18:50:47
Post #10





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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ć.


--------------------
Go to the top of the page
+Quote Post
Bullseye
post 26.09.2018, 19:05:43
Post #11





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 10.01.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
trueblue
post 26.09.2018, 19:12:40
Post #12





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Bullseye
post 26.09.2018, 19:16:29
Post #13





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 10.01.2009

Ostrzeżenie: (0%)
-----


Ale każda próba dopisania czegoś dalej kończy się u mnie wyświetleniem samego tła bez żadnej tabeli ani zegarów.
Go to the top of the page
+Quote Post
viking
post 26.09.2018, 19:41:54
Post #14





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Bullseye
post 27.09.2018, 18:02:05
Post #15





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 10.01.2009

Ostrzeżenie: (0%)
-----


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"].

Ten post edytował Bullseye 27.09.2018, 18:04:54
Go to the top of the page
+Quote Post
viking
post 28.09.2018, 05:35:58
Post #16





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


A jak łączymy stringi w php i jak odwolujemy się do zmiennej? Wystarczy zobaczyć w dokumentacji bo większych postaw nie ma


--------------------
Go to the top of the page
+Quote Post
Lord
post 28.09.2018, 09:14:47
Post #17





Grupa: Zarejestrowani
Postów: 239
Pomógł: 32
Dołączył: 10.03.2004

Ostrzeżenie: (10%)
X----


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.

Go to the top of the page
+Quote Post
Pyton_000
post 28.09.2018, 10:12:25
Post #18





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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'];
Go to the top of the page
+Quote Post
Lord
post 28.09.2018, 11:58:06
Post #19





Grupa: Zarejestrowani
Postów: 239
Pomógł: 32
Dołączył: 10.03.2004

Ostrzeżenie: (10%)
X----


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 ;(
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 20:39