Wątek przeniesiony 2015-08-09 18:40 z PHP przez dzek69.

Wywołanie danych z bazy i przypisanie im nazw

0

Witam serdecznie, niestety jako, że PHP i ta dziedzina informatyki nie jest mi bliska - a raczej bardzo odległa zwracam się o pomoc do Was.
Mam bazę danych a w niej odczyty temp z 2 czujników. Tak to wyglada:

2015	Aug 09	16:05:02	10D815CC02080022	37.44
2015	Aug 09	16:05:03	10FD0BCC020800A1	31.94
2015	Aug 09	16:10:02	10D815CC02080022	36.75
2015	Aug 09	16:10:03	10FD0BCC020800A1	31.94
2015	Aug 09	16:15:02	10D815CC02080022	37.06
2015	Aug 09	16:15:03	10FD0BCC020800A1	31.88
2015	Aug 09	16:20:02	10D815CC02080022	36.88
2015	Aug 09	16:20:03	10FD0BCC020800A1	31.88
2015	Aug 09	16:25:02	10D815CC02080022	36.94
2015	Aug 09	16:25:03	10FD0BCC020800A1	31.88
2015	Aug 09	16:30:02	10D815CC02080022	36.56
2015	Aug 09	16:30:03	10FD0BCC020800A1	31.81
2015	Aug 09	16:35:02	10D815CC02080022	36.75
2015	Aug 09	16:35:03	10FD0BCC020800A1	31.88
2015	Aug 09	16:40:02	10D815CC02080022	36.13
2015	Aug 09	16:40:03	10FD0BCC020800A1	31.88
2015	Aug 09	16:45:02	10D815CC02080022	36
2015	Aug 09	16:45:03	10FD0BCC020800A1	31.88
2015	Aug 09	16:50:02	10D815CC02080022	36.06
2015	Aug 09	16:50:03	10FD0BCC020800A1	31.75
2015	Aug 09	16:55:02	10D815CC02080022	35.38
2015	Aug 09	16:55:03	10FD0BCC020800A1	31.81

Chciałbym aby na samej górze strony pojawiał się napis:
Aktualna temperatura zew. wynosi - xx stopni
Aktualna temperatura wew wynosi - xx stopni.
Jak widzicie czujniki maja przypisane swoje numery seryjne - po nich można rozpoznawac która temp to zew a która wew.
Do bazy co 5 minut jest dodawany nowy wpis z pomiaru - chciałbym aby automatycznie pojawiał się on w aktualnej temp.

Pozdrawiam

Łączenie z bazą udało mi się zrobić z PHP gorzej z kwestią którą omówiłem wyżej.

0

To daj jakiś kod może? Dopiszemy Ci tego SELECTA (boże, z czym na forum...)

0
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html>
 <head>
 <title>Odczyty temperatury</title>
 <meta http-equiv=content-type content="text/html; charset=iso-8859-2">
 <meta http-equiv="Content-Language" content="pl">
 </head>
 
 <body>
 <?php 
 
 ////////////////////////////////////////////////////////////
 //Przykład kodu wyświetlającego dane z bazy mysql (tabeli newsletter z
 //osobami zapisanymi na listę dystrybucyjną)
 //Wymagania
 //  1. Zalozona baza mysql na serwerze
 //  2. Tabela newsletter w bazie mysql z polami imie, nazwisko, mail
 ////////////////////////////////////////////////////////////
 
 ////////////////////////////////////////////////////////////
 //Definicje zmiennych
 
 //adres ip serwera mysql który zawiera bazę danych i tabele z osobami 
 //zapisanymi na listę dystrybucyjna newslettera
 $adres_ip_serwera_mysql_z_baza_danych = 'xxxxxxxx';
 
 //nazwa bazy danych z tabelą newsletter zawierającą osoby zapisane na 
 //listę dystrybucyjna newslettera
 $nazwa_bazy_danych = 'xxxxxxxxx';
 
 //nazwa uzytkownika bazy danych $nazwa_bazy_danych
 $login_bazy_danych = 'xxxxxxxx';
 
 //haslo uzytkownika bazy danych $nazwa_bazy_danych
 $haslo_bazy_danych = 'xxxxxxxxxx';
 
 ////////////////////////////////////////////////////////////
 //Kod programu
 
 //Ustanawiamy połączenie z serwerem mysql
 if ( !mysql_connect($adres_ip_serwera_mysql_z_baza_danych,
 
              $login_bazy_danych,$haslo_bazy_danych) ) {
    echo 'Nie moge polaczyc sie z baza danych';
 	 exit (0);
 }
 //Wybieramy baze danych na serwerze mysql ktora zawiera tabele
 //newsletter gdzie sa dane osob z listy dystrybucyjnej
 if ( !mysql_select_db($nazwa_bazy_danych) ) {
    echo 'Blad otwarcia bazy danych';
 	 exit (0);
 }
 
 //Definiujemy zapytanie pobierające wszystkie wiersze z wszystkimi
 //polami z tabeli newsletter
 $zapytanie = "SELECT * FROM `temperatura`";
 //wykonujemy zdefiniowane zapytanie na bazie mysql
 $wynik = mysql_query($zapytanie);
 
 //Wyświetlamy w tabeli html dane pobrane 
 //z tabeli newsletter bazy mysql
 //Najpierw definiujemy nagłówek tabeli html
 echo "<p>";
 echo "<table boder=\"1\"><tr>";
 echo "<td bgcolor=\"ffff00\"><strong>Rok</strong></td>";
 echo "<td bgcolor=\"ffff99\"><strong>Data</strong></td>";
 echo "<td bgcolor=\"ffff00\"><strong>Czas</strong></td>";
 echo "<td bgcolor=\"ffff99\"><strong>ID</strong></td>";
 echo "<td bgcolor=\"ffff99\"><strong>Temp</strong></td>";
 echo "</tr>";
 //Teraz wyświetlamy kolejne wiersze z tabeli newsletter
 //Pola tabeli newsletter pobieramy odwołując się do ich 
 //numerów jak poniżej:
 //   0 (rok)
 //   1 (data)
 //   2 (czas)
 //   3 (id)
 //   4 (temp)
 while ( $row = mysql_fetch_row($wynik) ) {
    echo "</tr>";
    echo "<td bgcolor=\"ffff00\">" . $row[0] . "</td>";
    echo "<td bgcolor=\"ffff99\">" . $row[1] . "</td>";
    echo "<td bgcolor=\"ffff00\">" . $row[2] . "</td>";
    echo "<td bgcolor=\"ffff99\">" . $row[3] . "</td>";
    echo "<td bgcolor=\"ffff99\">" . $row[4] . "</td>";
    echo "</tr>";
 }
 echo "</table>";

 
 
 //Zamykamy połączenie z bazą danych
 if ( !mysql_close() ) {
    echo 'Nie moge zakonczyc polaczenia z baza danych';
    exit (0);
 }
 
 ?>
 </body> 
 </html>

Ciesze się kolego, że Ty jesteś dobry w swojej dziedzinie. Ja za to jestem dobry w innej :)

Teraz jest tak, że całą bazę mi pokazuje. A ja chcę to zachować, tylko żeby na samej górze strony było to co napisałem.

0

Jeżeli pokazuje Ci całą tablicę to już nie jest tak źle ;)
Dodaj do selecta limit - <code class="php">$zapytanie = "SELECT * FROM temperatura` LIMIT 2";

W ten sposób pokaże tylko dwa ostatnie rekordy. 

Jeśli na jednej stronie chcesz mieć i tabelę i nazwijmy to podsumowanie, wówczas musisz zrobić tak:
Dla podsumowania
```php
$zapytanie = "SELECT * FROM `temperatura` LIMIT 2"; 

i dla tabeli:

$zapytanie2 = "SELECT * FROM `temperatura`"; 

Całkiem odrębna sprawa - mysql. Jeśli już, to zamień na mysqli. Jeśli zapytasz dlaczego, to odpowiem trochę wymijająco - poczytaj. Jest trochę zmian wprowadzonych, z czego najważniejsza to oczywiście bezpieczeństwo.

0

Niestety wyrażenie LIMIT 2 zwraca mi temperaturę ale pierwszego pomiaru tzn

2015	Aug 06	17:00:02	10D815CC02080022	39.31

tą. A dziś mamy 10.

//Definiujemy zapytanie pobierające wszystkie wiersze z wszystkimi
 //polami z tabeli newsletter
 $zapytanie = "SELECT * FROM `temperatura`";
 $zapytanie2 = "SELECT * FROM `temperatura` LIMIT 2"; 
 //wykonujemy zdefiniowane zapytanie na bazie mysql
 $wynik = mysql_query($zapytanie);
 $wynik2 = mysql_query($zapytanie2);
 
 $row2 = mysql_fetch_row($wynik2);
echo  $row2[4];
//echo "<td bgcolor=\"ffff99\">" . $row2[4] . "</td>";
0
$zapytanie2 = "SELECT * FROM `temperatura` ORDER BY `rok` DESC, `data` DESC LIMIT 2";

Powinno zadziałać

0

Niestety - pokazuje pierwszą temperaturę z danego dnia.
Tzn pokazało 23.13.

a wpis w bazie wyglada tak: 2015 Aug 10 0002 10D815CC02080022 23.13

poza tym pokazuje mi jedną temp. a ja chciałbym dwie ostatnie (2 czujniki).

0
 $zapytanie2 = "SELECT * FROM `temperatura` ORDER BY `rok` DESC LIMIT 2"; 

albo

 $czujnik1= "SELECT * FROM `temperatura` ORDER BY `rok` DESC where `id`='10D815CC02080022' LIMIT 1"; 
 $czujnik2 = "SELECT * FROM `temperatura` ORDER BY `rok` DESC where `id`='10FD0BCC020800A1' LIMIT 1"; 

._.

0

Niestety - nadal niewłaściwie wyświetla. Teraz 39.31
Wertość ta pochodzi z : 2015 Aug 06 1702 10D815CC02080022 39.31

0

Sekunda sprawdze te drugie co wstawiłeś - bo edytowałeś post

0

Pierwszy podaje pierwszy wpis z bazy 39.31.
Pozostałe dwa - nie wyświetlają nic.

0

Wyświetla 33.3 - ale ten wpis w bazie mam akurat błędny :

0 12:22 23we 33.3

bo bawiłem się GET żeby wpisać temp do bazy

1

Dlaczego nie zrobisz tego po ludzku tworząc pole DATETIME?

0

Dobrym wyjściem byłoby też pole id, które się automatycznie inkrementuje.

0

Tzn? Automatycznie gdy coś wejdzie do bazy zostanie dopisana data?
Wiązałoby się to z konfiguracją programu wysyłającego dane na bazę.

0

Czy dodając teraz pole id - wypełni się automatycznie - już dla istniejących pomiarów?

0

Niestety - po dodaniu pola przez kreator nie uzupełniła się liczba porządkowa.

0

Teraz zaznaczyłem i działa :)
Jaki typ dać? int?
Odczyty są co 5 minut. przez 4 dni nazbierało sie ponad 2500 rekordów

0

2500 rekordów to tak naprawdę nic :P
int spokojnie wystarczy.

0

Panowie nie będę owijał w bawełnę - strona którą obecnie zrobiłem jest czysto edukacyjna.
Ostatecznie dążę do tego - bbarwik.com/meteo

Mam nawet kod źródłowy - http://bbarwik.com/meteo/meteo.rar
I tu jest pies pogrzebany. Kod ze strony bbarwik korzysta z plików txt. Ja natomiast mam bazę- i nie wiem jak to dostosować żeby fajnie chodziło.

0

A dlaczego chcesz się upodabniać do kogoś i zrobić to tak samo?
Po co przechodzić z bazy do pliku tekstowego?

0

Tak samo - chodzi mi tylko i wyłącznie o funkcjonowanie wykresu.
Niestety jak widać moje pojęcie o PHP oraz mysql jest małe a wręcz znikome - dlatego postanowiłem wykorzystać gotowy kod - modyfikując go jakoś tak by działał z moją bazą.

Po co przechodzić z bazy na plik tekstowy - mi chodzi o odwrotność - kod zamieszczony powyżej korzysta z danych z .txt a ja mam dane w bazie danych

0

Źle się do tego zabierasz.
Marnie skończysz próbując naprawić auto nierozróżniając klucza francuskiego od śrubokręta.

0

Jeśli kolega ma inny pomysł jak taki ładny wykres narysować - chętnie poczytam. Jednak tak jak mówię - samemu raczej nic nie wskóram.

0

Polecam kurs php- mysql.
Szybko załapiesz o co w tym chodzi :p

0

Zacząć od kursu, to jest pomysł.

0

Czy moglibyście jakiś polecić? Wiadomo istnieje mnóstwo - a wy macie już jakieś rozeznanie który jest dobry a który zły :)

0

http://webmade.org/kursy-online/kurs-mysql.php

Jakakolwiek książka o PHP-MySQL z roku 2014~2015 :v

0

Jak już masz dane pobrane to czeka Cię trochę zabawy z tworzeniem wykresu w js, skorzystaj z jednej z bibliotek:
http://www.highcharts.com/stock/demo
http://www.chartjs.org/

1 użytkowników online, w tym zalogowanych: 0, gości: 1