Skocz do zawartości

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


SOYER

Pomocna odpowiedź

Wcześniej sugerowałem się tym:

https://www.w3schools.com/php/php_mysql_select.asp

a teraz przekopiowałem i pozmieniałem nazwy:

<?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);
      
if ($odczyt->fetch_row > 0) {
    while($row = $odczyt->fetch_row()) {
        $result = $row[0];
        echo $result." ".$b;
    }
} else {
    echo "0 results";
}
?>

Tyle że masz rację, to "0" to taki sobie pomysł, tym bardziej, że domyślnie w pustych polach mojej tabelki są zera....

Link do komentarza
Share on other sites

No to trzeba było tak od razu powiedzieć a nie zachowywać się jak małpa przy maszynie do pisania.

Wspomniałem już, że zwracany przez mysqli::query mysqli_result to iterator. Metody fetch_row, fetch_array i fetch_all pobierają kolejne wyniki z owego iteratora i zwracają tablicę (po phpowemu "array"), a nie jakieś wartości numeryczne które sobie możesz do zera porównywać. A jeśli wyników więcej nie ma, zwraca null (którego porównywanie z zerem nie ma większego sensu).

Stąd nie możesz użyć dwa razy fetch_row() mając nadzieję, że zwróci dwa razy ten sam wiersz wyniku. czyli - jeśli w swoim programie pobierasz dokładnie jeden wiersz - musisz użyć fetch_row() dokładnie raz.

A więc nie dlatego pisałem o niespecjalnie dobrym pomyśle porównywania fetch_row() z zerem, że w tabeli mogą wystąpić wartości zerowe.

Natomiast wynik fetch_row() (czyli tablica o większej niż zero ilości elementów lub null) idealnie się nadaje jako warunek w instrukcji if...

Tak przy okazji: objaśnij mi wreszcie co mają znaczyć te linijki:

$typ = $_GET['nazwa'];
$b = $_GET['mian'];
$typ = $_REQUEST['nazwa'];

szczególnie co tam robi $_GET (przecież AJAX leci przez POST a nie GET, nie mów że nie znasz podstaw protokołu HTTP).

  • Pomogłeś! 1
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

5 minut temu, ethanak napisał:

Tak przy okazji: objaśnij mi wreszcie co mają znaczyć te linijki:

Przecież jak pytałem o to jak php ma pobrać dwie dane, to sam spokojnym i stonowanym głosem kazałeś mi sobie przypomnieć swoją lekcję z ?factor w adresie...

To co robią te przykłady które Ci pokazałem tu: https://www.w3schools.com/php/php_mysql_select.asp

Link do komentarza
Share on other sites

Ale ja nie rozumiem, dlaczego pobierasz 'nazwa' dwa razy i dlaczego 'mian'  szukasz w $_GET a nie $_REQUEST...

A co do przykładów to one są akurat prawidłowe - tyle że num_rows() a fetch_row to dwie różne rzeczy.

Edytowano przez ethanak
Link do komentarza
Share on other sites

Czyli $_REQUEST to zmienna pobierana ze źródeł zewnętrznych, tak samo jak $_GET i $_POST, tylko, że dodatkowo jest zmienną globalną, dostępną w każdym miejscu skryptu, choć nie wiem co to w praktyce oznacza...

Czyli ma być

$typ = $_REQUEST['nazwa']; 

$b = $_REQUEST['mian'];

 

Link do komentarza
Share on other sites

Ogólnie $_REQUEST to tak jakby $_GET i $_POST w kupie - nie pamiętam w której wersji PHP to się pokazało (kiedyś było tylko $_GET i $_POST), ale to bardzo wygodne bo masz dostęp do parametrów niezależnie od tego, czy zostały przesłane przez URL (GET) czy przez ciało requestu (POST). A "dostępne w każdym miejscu skryptu" to mniej więcej oznacza, że nie trzeba ich deklarować jako globalnych np. wewnątrz funkcji.

I tak, tak powinno być.

Zrobisz to z tym "Brak danych" czy czegoś jeszcze potrzebujesz?

 

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

<?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];
if ($row[co tu ma być? "1"?] > 0) {
     echo $result." ".$b;
    }
} else {
    echo "0 results";
}

?>

 

Link do komentarza
Share on other sites

nie nie nie nie nie nie nie nie...

Nic nie zrozumiałeś.

Przede wszystkim: wykonujesz $result=$row[0]  nie sprawdzając, czy $row jest faktycznie tablicą a nie nullem. Owszem, PHP jest (niestety) na tyle tolerancyjny że nie wykrzaczy się na takej instrukcji (bo gdyby się wykrzaczał to jakieś 99.9% stron pisanych przez Wybitnych Specjalistów od PHP by nie działało) - ale nie znaczy to że tak można!

Kawałek kodu:

if ($row = $odczyt->fetch_row()) {
  $result = $row[0];
  $odczyt->close();
  echo $result . " " . $b;
} else {
  echo "Brak danych";
}

Rozumiesz o co tu biega?

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

no to chyba załapałem, szkoda, że dopiero jak pokazałeś mi gotowca. 

Teraz to zrozumiałem, że fetch_row zwraca tablicę z zapytania query, zapisuję tę tablicę do $row, a wyciągamy z tej tablicy pierwszy zapis do $result przez $result = $row[0]; , a [0] bo ta tablica jest numerowana od zera....

Dzięki.

Link do komentarza
Share on other sites

a może byc tak?

<?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();
if ($row) {
    $result = $row[0];
     echo $result." ".$b;
    }
} else {
    echo "0 results";
}

?>

?

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.