Skocz do zawartości

Arduino MEGA i BLYNK, LCD odchodzi do lamusa...


SOYER

Pomocna odpowiedź

Tak, bazę i całą stronę mam na malince, pracuję na laptopie gdzie w oknie przeglądarki mam wpisane adresIPmalinki/powietrze/index1.html, i sobie oglądam moją stronę, zmiany wprowadzam oczywiście na plikach znajdujących się na malince...

w phpmyadmin jestem zalogowany jako pi z jakimś tam hasłem i na tym koncie mam moją tabelkę, wszystko obsługuję z okna przeglądarki w moim laptopie adresIPmalinki/phpmyadmin

coś powinienem poprzestawiać?

Link do komentarza
Share on other sites

Jeśli robisz to w ten sposób to nic nie przestawiasz.

Jeśli chcesz pooglądać błędy, wywołaj z palca skrypt getData z odpowiednimi parametrami, np.:

adresIP/powietrze/getData.php?name=pm10&mian=kg

(chyba nie pomyliłem nazw parametrów?)

 

Link do komentarza
Share on other sites

Odpowiedź masz gdzieś w logach Apacza (nie mam go na malince więc pewnie mam trochę inaczej, u mnie to /var/log/apache2/error.log).

http error 500 to inaczej wewnętrzny błąd serwera, czyli właśnie w logach trzeba szukać odpowiedzi.

Odpal na malince coś w stylu

tail -f /var/log/apache2/error.log

i wtedy spróbuj wleźć na stronę

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

<?php
include 'logMeteo.php';
$typ = $_GET['nazwa'];
$b = $_GET['mian'];
$polaczenie = new mysqli($host, $db_user, $db_pass, $db_name);
if($polaczenie->connect_errno!=0){
    die("Error: ".$polaczenie->connect_errno."Opis: ".$polaczenie->connect_error);
}
   $typ = $_REQUEST['typ'];
    function getCurrentStatus($typ) {
      global $polaczenie;
      $typ = $mysqli->real_escape_string($typ);
      $sqlOdczyt="SELECT aktualna FROM meteo WHERE czujnik = '${typ}'";
      $odczyt=$polaczenie->query($sqlOdczyt);
$row = $odczyt->fetch_row();
      $odczyt->close();
      return $row[0];
    }

   $result = getCurrentStatus($typ);

echo $result.$b;
?>

dla tego pliku jest taki błąd:

2019-01-25 21:40:22: (mod_fastcgi.c.2543) FastCGI-stderr: PHP Parse error:  syntax error, unexpected '?' in /var/www/html/powietrze/getData.php on line 15
Gdzi on tam widzi "?" to ja nie wiem....

postawiłem kursor na końcu tej 12 lini i dałem delete, zniknął tamten bląd z pytajnikiem....ale pojawiły się takie:

2019-01-25 21:55:11: (mod_fastcgi.c.2543) FastCGI-stderr: PHP Notice:  Undefined index: typ in /var/www/html/powietrze/getData.php on line 9
2019-01-25 21:55:11: (mod_fastcgi.c.2543) FastCGI-stderr: PHP Notice:  Undefined variable: mysqli in /var/www/html/powietrze/getData.php on line 12
2019-01-25 21:55:11: (mod_fastcgi.c.2543) FastCGI-stderr: PHP Fatal error:  Uncaught Error: Call to a member function real_escape_string() on null in /var/www/html/powietrze/getData.php:12
2019-01-25 21:55:11: (mod_fastcgi.c.2543) FastCGI-stderr: Stack trace:
2019-01-25 21:55:11: (mod_fastcgi.c.2543) FastCGI-stderr: #0 /var/www/html/powietrze/getData.php(20): getCurrentStatus(NULL)
2019-01-25 21:55:11: (mod_fastcgi.c.2543) FastCGI-stderr: #1 {main}
2019-01-25 21:55:11: (mod_fastcgi.c.2543) FastCGI-stderr:   thrown in /var/www/html/powietrze/getData.php on line 12
 

Link do komentarza
Share on other sites

30 minut temu, SOYER napisał:

postawiłem kursor na końcu tej 12 lini i dałem delete, zniknął tamten bląd z pytajnikiem...

Jakiś śmieć - jakiego edytora używasz? Polecam Komodo Edit

32 minuty temu, SOYER napisał:

2019-01-25 21:55:11: (mod_fastcgi.c.2543) FastCGI-stderr: PHP Notice:  Undefined index: typ in /var/www/html/powietrze/getData.php on line 9

A czy w wywołaniu podałeś parametr typ? Nie? I się dziwisz?

W ogóle masz nie wiadomo dlaczego na początku $_GET (ajax tego nie złapie), a potem $_REQUEST, tyle że pierwszy raz typ to name a drugi raz typ to typ... może trochę porządku w kodzie by się przydało?

34 minuty temu, SOYER napisał:

2019-01-25 21:55:11: (mod_fastcgi.c.2543) FastCGI-stderr: PHP Notice:  Undefined variable: mysqli in /var/www/html/powietrze/getData.php on line 12

Nic dziwnego, bo mysqli to klasa a obiekt u Ciebie nazywa się $polaczenie. Nie ma jak bezmyślne kopiowanie...

35 minut temu, SOYER napisał:

2019-01-25 21:55:11: (mod_fastcgi.c.2543) FastCGI-stderr: PHP Fatal error:  Uncaught Error: Call to a member function real_escape_string() on null in /var/www/html/powietrze/getData.php:12

No nic dziwnego - jeśli $typ jest null )parrz błąd numer jeden) to raczej ciężko się go eskejpuje...

Zrób porządek z kodem, pomyśl co znaczy każda linijka, ja Ci te linijki mogę napisać ale podobno chcesz się uczyć a nie dostać gotowy kod, prawda?

 

Link do komentarza
Share on other sites

(edytowany)

@ethanak mój przyjacielu;-) teraz proszę chociaż o słowo komentarza i wytłumaczenia dlaczego tak... powyższy kod nie chce działać za chiny ludowe ale ten(jakby prostszy) działa bez problemu:

<?php
include 'logMeteo.php';
$typ = $_GET['nazwa'];
$b = $_GET['mian'];
$polaczenie = new mysqli($host, $db_user, $db_pass, $db_name);
if($polaczenie->connect_errno!=0){
    die("Error: ".$polaczenie->connect_errno."Opis: ".$polaczenie->connect_error);
}
$sqlOdczyt="SELECT aktualna FROM meteo WHERE czujnik = '$typ'";
$odczyt=$polaczenie->query($sqlOdczyt);
$row = $odczyt->fetch_row();
$odczyt->close();
$result = $row[0];

echo $result." ".$b;
?>

to zrobiłem ja;-D, dzięki za cynk z tymi logami błędów.... parę elementów było zbędnych? żle zdefiniowanych? o co chodzi?

 

Ok, dla pokazania tym co nie wiedzą o czym mowa

Poprzednia wersja strony z losowymi danymi:

aktualna z danymi pobieranymi z serwera:

Różnica niby żadna, ale ile mnie to czasu kosztowało, a ile cierpca u ethanaka;-) 

 

No nareszcie jakieś serducho od @Treker ;-), myślałem, że już nie doczekam:-D...

Edytowano przez SOYER
  • Lubię! 1
Link do komentarza
Share on other sites

A teraz wyobraź sobie, że ktoś złośliwy wywoła Twoją stronę w ten sposób:

http://twójIP/powietrze/getData.php?nazwa=pm10%27%2Bdelete+from+meteo%3Bselect+%275&mian=kg

Jak myślisz, gdzie będą Twoje dane?

Której ważnej linijki się pozbyłeś?

 

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

(edytowany)

@ethanak teraz:

<?php
include 'logMeteo.php';
$typ = $_GET['nazwa'];
$b = $_GET['mian'];
$typ = $_REQUEST['nazwa'];

$polaczenie = new mysqli($host, $db_user, $db_pass, $db_name);

if($polaczenie->connect_errno!=0){
    die("Error: ".$polaczenie->connect_errno."Opis: ".$polaczenie->connect_error);
}

      $typ = $polaczenie->real_escape_string($typ);
      $sqlOdczyt="SELECT aktualna FROM meteo WHERE czujnik = '${typ}'";
      $odczyt=$polaczenie->query($sqlOdczyt);
      $row = $odczyt->fetch_row();
      $odczyt->close();
      $result = $row[0];

echo $result." ".$b;

?>

Choć nie do końca rozumiem co ta funkcja robi(real_escape_string())... funkcja dodaje znaki do stringa po to żeby zabezpieczyć dane...

coś więcej?

a może powinno być również:

 $typ = $polaczenie->real_escape_string($typ);
      $b = $polaczenie->real_escape_string($b);


 

Edytowano przez SOYER
Link do komentarza
Share on other sites

3 godziny temu, SOYER napisał:

funkcja dodaje znaki do stringa po to żeby zabezpieczyć dane...

 

Dokładnie tak. Na stronie którą Ci podałem był przykład ze stringiem zawierającym cudzysłów.

Gdybyś wywołał swój skrypt bez eskejpowania z takim parametrem jak podałem wcześniej, mySQL otrzymałby zapytanie:

"select aktualna from meteo where typ = 'pm10';delete from meteo; select '5'"

Wykonałby bardzo grzecznie wszystkie polecenia po kolei.. przy czym po wykonaniu drugiego nie miałbyś już danych w bazie.

Po zastosowaniu real_escape_string zapytanie byłoby inne - mianowicie do klauzuli where przekazanyby został string:

"pm10';delete from meteo;select '5"

Oczywiście wykonanie skryptu skończyłoby się (zupełnie niegroźnym) błędem (ponieważ żaden z rekordów w bazie nie zawiera takiej wartości) i to wszystko.

3 godziny temu, SOYER napisał:

a może powinno być również:


 $typ = $polaczenie->real_escape_string($typ);
      $b = $polaczenie->real_escape_string($b);

 

Nie. Ponieważ zmiennej $b nie przekazujesz do żadnego zapytania MySQL - żadna jej wartość nie jest groźna; po prostu zostanie wypisana na ekranie w tej postaci, jaka została podana jako parametr. Natomiast na pewno pouczające by było zastosowanie eskejpowania również do zmiennej $b i obserwowanie, jak skrypt będzie reagować na różne parszywe znaczki typu apostrof. Na pewno pomoże to w zrozumieniu, na czym cały pic polega.

 

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Kompletna przebudowa, ale to już nie dzisiaj bo niespecjalnie mam czas (chyba że wieczorem coś tam urwę).

Możesz w międzyczasie jeszcze dopieścić ten kod (będzie to potrzebne później): jeśli w bazie danych nie ma aktualnej wartości dla danego typu, powinien zwrócić tekst "Brak danych".

Bazujesz na tym, że mysql_result::fetch_row() zwraca FALSE jeśli nie ma już więcej danych do pobrania.

A ja sobie pomyślę jak tu najprościej i najefektywniej zrobić tę tabelkę w MySQL-u (wybacz, ja raczej jestem spec od PostgreSQL-a, MySQL-em zajmuję się tylko jeśli muszę i to też na zasadzie podręcznika otwartego w zakładce obok).

Link do komentarza
Share on other sites

Generalnie to wiele więcej mi nie trzeba, z tego co przychodzi mi do głowy, to pamięć wartości na tyle by móc później budować wykresy, wartości max i min z określonego czasu... 

nie ma co wariować... tyle żeby poćwiczyć różne opcje... 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.