Okna.  Wirusy.  Laptopy.  Internet.  Biuro.  Narzędzia.  Kierowcy

Postanowiłem zrobić sobie ściągawkę dotyczącą głównych metod wysyłania i odbierania danych z serwera WWW przy użyciu PHP i JS. Tak narodziła się ta notatka. Przyjrzałem się w nim najczęściej stosowanym metodom wymiany danych pomiędzy klientem WWW a serwerem WWW, z których korzystają programiści PHP.

Głównymi faworytami do wysyłania danych są php pobierzżądanie i post z żądaniem php, a następnie technologia AJAX. Jakie są więc różnice między żądaniami pobierania i wysyłania?

  • żądanie get jest przesyłane w pasku adresu (w nagłówku http) i jest widoczne dla użytkownika
  • żądanie post jest wysyłane w treści dokumentu
  • rozmiar żądania pobierania jest ograniczony (maksymalnie 276 znaków)
  • get nie przesyła plików
  • metoda post przesyła pliki
PHP pobierz żądanie

Aby uzyskać żądanie php, musimy najpierw utworzyć formularz HTML z polem do wprowadzania danych. W znaczniku formularza wskazujemy do jakiego pliku na serwerze mamy dostęp i jaką metodą wysłać. Nie zapomnij także ustawić pola atrybut nazwy, będzie to nazwa komórki tablicy GET $_GET["dane"]; z którego pobierzemy dane do pliku na serwerze. Myślę, że jest jasne, jak wysłać dane za pośrednictwem formularza, teraz spróbujmy je wysłać pasek adresu. indeks.php?data=1 jeśli wpiszemy takie żądanie w pasku adresu i wyślemy je, to w pliku w pliku Index.php otrzymamy wartość 1 z $_GET["data"]. Myślę, że dzięki temu to samo jest jasne, teraz przykład.

Zadanie: istnieje plik Index.php z formularzem umożliwiającym wysłanie żądania get do innego pliku, np. get.php. Po otrzymaniu żądania get plik get.php musi przekazać tablicę danych do pliku Index.php. Wynikową tablicę należy wyprowadzić w pliku Index.php.

Realizacja. plik indeks.php

//W formularzu metodą get wysyłamy przez ukryte pole wartość 1 Wyślij zapytanie

plik get.php

Post z prośbą o PHP

Żądanie postu w PHP jest również wysyłane przez formularz, tylko atrybutem w tagu formularza będzie method="post" . I odbieraj dane w określony plik użyjemy tablicy post $_POST["search"] i od razu podamy przykład.

Zadanie: wysłać dane z pliku Index.php metodą POST na serwer w pliku get.php i odebrać je z powrotem, jeżeli pole wysyłania danych jest puste, wyświetli się komunikat o pustym polu. Zacznijmy rozwiązanie od pliku Index.php

Zapytanie wyszukiwania

Wypełnij pole żądania

Wpisane zapytanie:

Wyślij prośbę

plik get.php

Przekazywanie tablicy AJAX

Wykonajmy to samo zadanie, używając ajax. Właściwie ajax to technologia powiązana z javascriptem, ale w ramach notatki dotyczącej przesyłania danych na serwer poruszymy również tę technologię. Oczywiście ajax to temat na osobny artykuł. Podczas procesu żądania wyświetlimy również gif wskaźnika ładowania. Mamy też dwa pliki Index.php i get.php. Plik Index.php. Nie zapomnij połączyć jquery. Pamiętaj, że aby ukryć gif przy pierwszym ładowaniu strony, przypisz styl display: none do bloku box

$(document).ready(function())( //do przycisku wysyłania dołączamy zdarzenie $(.submit").click(function())( $.ajax(( //jak będziemy przesyłać typ danych : "GET", / /gdzie przekazujemy url: "get.php", //jakie dane przekazujemy dane: (flaga: 1), //zdarzenie przed wysłaniem ajax beforeSend:function())( //wyświetl gif $(.box").show( ); //zdarzenie po otrzymaniu odpowiedzi, //pobranie tablicy w przypadku powodzenia danych: funkcja(dane)( //ukryj gif $(.box").hide (); var html = ""; //f- i JSON.parse tłumaczy dane json na obiekt var dt=JSON.parse(data) for (var i = 0; i);

Plik get.php. Otrzymujemy dane z tablicy get do pliku i przekazujemy tablicę z php do javascript. Co przekazać tablica php w js należy go przekonwertować na format json. Do tego używamy php dla ciebie json_encode. Po konwersji wysyłany jest plik json php oznacza, a konkretnie wywołaj echo.

Pierwszą metodą wykonania żądania PHP POST jest użycie file_get_contents . Druga metoda użyje freada w połączeniu z kilkoma innymi funkcjami. Obie opcje wykorzystują funkcję stream_context_create do wypełnienia wymaganych pól nagłówka żądania.

Wyjaśnienie kodu

Zmienna $sPD zawiera dane do przesłania. Musi być w formacie ciągu żądania HTTP, więc niektóre znaki specjalne musi być zakodowany.

Zarówno w funkcji file_get_contents, jak i funkcji fread mamy dwa nowe parametry. Pierwsza to use_include_path . Ponieważ tworzymy żądanie HTTP, w obu przykładach będzie ono miało wartość fałszywa. Po ustawieniu na true odczytu zasobu lokalnego funkcja będzie szukać pliku w include_path .

Drugim parametrem jest kontekst, który jest wypełniany wartością zwracaną przez stream_context_create, która przyjmuje wartość tablicy $aHTTP.

Używanie file_get_contents do wysyłania żądań POST

Aby wysłać żądanie POST przy użyciu file_get_contents w PHP, musisz użyć stream_context_create, aby ręcznie wypełnić pola nagłówka i określić, które „opakowanie” zostanie użyte - w w tym przypadku HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // Dane POST $aHTTP = array("http" => // Opakowanie, które będzie używane array("method" => "POST", // Metoda żądania // Nagłówki żądań są ustawione poniżej "header" => "Treść - wpisz: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $zawartość;

Używanie freada do wysyłania żądań POST

Możesz użyć funkcji fread do wysyłania żądań POST. Poniższy przykład wykorzystuje stream_context_create do utworzenia niezbędnych nagłówków żądań HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // Dane POST $aHTTP = array("http" => // Opakowanie, które będzie używane array("method" => "POST", // Metoda żądania // Nagłówki żądań są ustawione poniżej "header" => "Treść - wpisz: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $uchwyt = fopen($sURL, "r", fałsz, $kontekst); $zawartość = ""; while (!feof($uchwyt)) ( $zawartość .= fread($uchwyt, 8192); ) fclose($uchwyt); echo $zawartość;

Tworzenie żądań GET za pomocą PHP

Skoncentrujemy się teraz na użyciu fread i file_get_contents do pobierania treści z Internetu za pośrednictwem protokołów HTTP i HTTPS. Aby skorzystać z metod opisanych w tym artykule, musisz włączyć opcję fopen wrappers. Aby to zrobić, musisz ustawić parametrallow_url_fopen na On w pliku php.ini.

Wykonywanie żądań POST i GET w PHP służy do logowania się na stronach internetowych, pobierania zawartości stron internetowych lub sprawdzania dostępności nowych wersji aplikacji. Omówimy, jak tworzyć proste żądania HTTP.

Używanie freada do pobierania lub odbierania plików przez Internet

Pamiętaj, że czytanie strony internetowej ogranicza się do dostępnej części pakietu. Musisz więc użyć funkcji stream_get_contents (podobnej do file_get_contents ) lub pętla while aby przeczytać zawartość w mniejszych fragmentach, aż do osiągnięcia końca pliku:

W tym przypadku przetwarzania żądania PHP POST ostatni argument funkcji fread jest równy rozmiarowi fragmentu. Z reguły nie powinna być większa niż 8192 (8*1024).

Mam strukturę adresu URL z ciągiem zapytania i parametrem o nazwie pozycja.

Http://computerhelpwanted.com/jobs/?occupation=administrator&position=network+administrator

Mam także listę rozwijaną wyboru formularza z pozycją wyboru nazwy formularza.

Wybierz stanowisko Administrator Wybierz pozycję Administrator sieci

Gdy użytkownik dokonuje wyboru, wysyła wartości parametrów do atrybutu akcji z parametrem wybierz nazwę="pozycja", który ma zostać użyty w ciągu zapytania.

Moje pytanie brzmi: jak uzyskać dostęp do wartości wyboru formularza oddzielnie od wartości ciągu zapytania?

Używam metody _GET do wywołania wartości z parametru ciągu zapytania.

$pozycja = isset($_GET["pozycja"]) ? ($_GET["pozycja"]): "";

Oczywiście czerpie to swoją wartość ze struktury adresu URL, a nie elementu formularza. A może tak jest, nie jestem pewien. Ale testując to, wydaje mi się, że doszedłem do wniosku, że pobiera go za pomocą adresu URL, a nie formularza.

Jak mogę uzyskać dostęp do wybranej wartości formularza podczas porównywania w moim PHP?

Aktualizacja

Mam problem z kanonicznym adresem URL określonym w nagłówku.

tak właśnie powinno być

jedyną różnicą są - i + w ciągu zapytania.

Nie wszystkie moje ciągi zapytań mają znak +. Niektórzy mają -. Ale wyświetlam treść pod obydwoma adresami URL, niezależnie od tego, czy ma ona - czy +. Tak czy inaczej, oba adresy URL otrzymują tę samą treść strony.

Ponieważ jednak znak kanoniczny jest tworzony dynamicznie na podstawie identyfikatora URI, a nie wartości elementu formularza, na obu stronach zawartości znajdują się 2 różne znaki kanoniczne.

Użycie _Get('value') pobiera wartość z ciągu zapytania zamiast z elementu formularza. Wiem o tym, ponieważ wartość elementu formularza zawiera spację pomiędzy administratorem sieci, która jest kodowana w formacie urlen, gdy formularz jest przesyłany jako sieć+administrator. Zatem jeśli mogę porównać z wartością elementu formularza, mogę ustawić poprawną wartość kanoniczną.



Jeśli zauważysz błąd, zaznacz fragment tekstu i naciśnij Ctrl+Enter
UDZIAŁ: