Wpis z mikrobloga

Kilka dni temu zapytałem się na mirko o sposób połączenia czystego HTML i JS z PHP (bez żadnych frameworków) w celu wyświetlenia danych odebranych z PHP w przeglądarce internetowej, w sensie chodziło mi o to jak w poprawny sposób wysyłać dane z PHP i potem to wyświetlić na stronie HTML. Poprawny sposób, gdyż wiem, że można to robić różnie, np mieszając PHP z HTML w jednym pliku przez wstawianie fragmentów kodu w znacznikach <?php ?> jednak z tego co wiem jest to złą praktyką. Można też używać szablonów, np tworzyć swoje własne szablony lub użyć gotowego systemu jak Smarty czy Twig.

W tamtym wpisie jedna z osób powiedziała mi, że obecnie powinno się to robić tak, że PHP jest tylko i wyłącznie na backendzie jako API, czyli mamy totalną separację frontu od beckendu, więc PHP musi w jakiś sposób wysyłać te dane do frontu i następnie front musi je jakoś odpowiednio przerobić.

Trochę się rozeznałem w temacie i z tego co zrozumiałem, to można to zrobić tak, że np PHP pobiera dane z bazy danych, następnie za pomocą funkcji jsonencode() dane te są "przerabiane" z postaci tablicowej na obiekt JSON (to się chyba nazywa fachowo parsowaniem) i to jest wysyłane jako odpowiedź do frontu. Następnie po stronie frontu można te dane odebrać za pomocą Fetch API i odpowiednio wyświetlić w przeglądarce.

Znalazłem na YT krótki film pokazujący jak to powinno w uproszczeniu mniej więcej wyglądać i chciałbym się teraz zapytać:

1. Czy taki sposób na przesyłanie danych z PHP do HTML jest dobry? Tak jak napisałem, film jest bardzo krótki i wydaje mi się, że pokazuje to w dużym uproszczeniu, jednak bardziej mi chodzi tutaj o to, czy jest to dobry kierunek, żeby przesyłać dane z PHP do frontu?
2. Skoro PHP wysyła te dane w postaci JSON, a z tego co się zorientowałem jest to uniwersalny format danych, to czy te dane można byłoby odebrać za pomocą np aplikacji mobilnej napisanej w Android Studio? Czyli wychodzi na to, że cały backend mamy napisany w PHP, który wysyła dane w jednym, uniwersalnym formacie, i możemy je odbierać w aplikacjach różnego typu, czy to byłaby aplikacja webowa, desktopowa czy mobilna?
3. W tym filmiku zostało pokazane jedynie wyświetlanie danych. Jednak gdybym chciał przesłać dane z frontu do PHP, to mam rozumieć, że za pomocą Fetch API można też te dane wysyłać? I w takiej sytuacji też muszę pobrać te dane z fomularza HTML, następnie sparsować te dane do postaci JSON i wysłać do serwera i dopiero po stronie PHP sparsować je na inny format, prawdopodobnie za pomocą funkcji json_decode() i potem dodać je do bazy danych?

#php #javascript #webdev #naukaprogramowania #api
maciorqa - Kilka dni temu zapytałem się na mirko o sposób połączenia czystego HTML i ...
  • 18
1. Tak
2. Tak
3. Generalnie tak, nagłówkiem Content Type możesz sterować tym jakim formatem wysyłasz dane. Nie musi być to JSON. Jeśli na backendzie będziesz używał jakiegoś frameworka (np. Symfony) to wówczas wszystko wyciągniesz z obiektu Requesta.
  • 0
@nowiutki: Hej, jeszcze dopytam - gość w tym filmiku zaimportował bibliotekę jQuery, ale mam rozumieć, że on jej tutaj nie używa do pobrania tych danych? On te dane pobiera tylko i wyłącznie za pomocą Fetch API?
@maciorqa: nie wiem, nie oglądałem tego filmiku. jQuery generalnie się już nie używa, to archaiczna biblioteka, która kiedyś ułatwiała m.in. programowanie w javascripcie. Dzisiaj kompletnie niepotrzebna. Autor tego filmiku pewnie użył jej by skorzystać z ajaxa, ale równie dobrze możesz do tego użyć dużo lżejszego axiosa, albo wbudowanego w js fetcha
  • 0
@lobo: Dzięki, a mógłbyś mi jeszcze powiedzieć, czy dobrze zrozumiałem idee oddzielenia frontu od backendu i jak należy zapewnić komunikację między nimi (czyli to co napisałem w trzecim akapicie)?
@maciorqa: Ogólnie idea oddzielenia frontu od backendu polega na tym, że backend służy w zasadzie tylko do obsługi danych użytkownika czy to przez ich pobieranie czy wysyłanie, przeważnie sprowadza się to do tego, że BE wystawia api czy to JSON, czy XML czy np. Sockety do których łączy się strona html + js używając albo AJAX-a (czy to używając natywnych funkcji czy bibliotek które finalnie używają natywnych funkcji) czy socketów. Api
@maciorqa: Najpierw utworzymy proste API na serwerze, używając PHP, które będzie akceptować dane z formularza, przetwarzać je i zwracać odpowiedź w formacie JSON. W tym przypadku użyjemy wbudowanego w PHP superglobalnego $_POST do przechwytywania danych przesłanych z formularza:

php
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

$data = json_decode(file_get_contents("php://input"));

if (!empty($data->name) && !empty($data->email)) {
// tutaj można przeprowadzić logikę przetwarzania danych, np. walidację,
  • 0
@lobo: Dziękuje za bardzo wyczerpujący komentarz. :)

Jednak jeszcze tylko dopytam, czy ja jako początkujący, gdybym chciał napisać jakąś prostą aplikacje z wykorzystaniem czystego HTML, CSS, JS i PHP (pomijając to, czy opłaca się wszystko dzisiaj pisać bez żadnych frameworków), to czy taki sposób komunikacji między frontem a backiem, jaki opisałem w swoim wpisie, jest w miarę ok, przynajmniej na początek?

Po prostu jak nauczę się PHP to chciałbym sobie porobić
@maciorqa: Tak w zasadzie możesz sprowadzić całą apkę do jednego html serwowanego przez php który będzie zwracał podstawowy html + js i resztę już sobie js ogarniesz, ale najlepiej do tego użyć już jakiejś biblioteki js bo zabawa z routingiem po stronie frontu od zera jest upierdliwa
jest w miarę ok, przynajmniej na początek


@maciorqa: Dla własnych potrzeb i nauki, oczywiście, że tak.

W miarę rozwoju zapewne pojawią się nowe problemy. Na przykład dane przesyłane w JSON należy "walidować", zabezpieczyć się na ataki SQL Injection i wiele innych typów. Na przykład ktoś w formularzu tekstowym może Ci wpisać ";-- DELETE FROM users;" i jeżeli będziesz miał kod PHP podatny na taki atak, to mogą wyczyścić Twoją bazę danych.
  • 0
@Serghio: Okej, ale czy te same problemy z bezpieczeństwem występowałyby w przypadku, gdybym np mieszał kod html z php, zamiast zrobić to wszystko przy pomocy api?

Powiedzmy że mi póki co chodzi tylko o dobrą praktykę, jak połączyć html z phpem i tylko tyle na ten moment chciałem się dowiedzieć. Zdaję sobie też problem o kwestii bezpieczeństwa, ale o tym chciałem poczytać kiedy indziej.