{"id":231269,"date":"2023-01-02T10:23:00","date_gmt":"2023-01-02T07:23:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231269"},"modified":"2023-01-02T11:09:53","modified_gmt":"2023-01-02T08:09:53","slug":"powinienes-uzywac-funkcji-filtrowania-php-czesc-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/powinienes-uzywac-funkcji-filtrowania-php-czesc-2\/","title":{"rendered":"Powiniene\u015b u\u017cywa\u0107 funkcji filtrowania PHP, cz\u0119\u015b\u0107 2"},"content":{"rendered":"\n<p>W <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/powinienes-uzywac-funkcji-filtrowania-php-czesc-1\/\" title=\"poprzednim po\u015bcie\">poprzednim po\u015bcie<\/a> m\u00f3wi\u0142em o tym, dlaczego u\u017cywanie funkcji filtrowania PHP jest bardziej przydatne ni\u017c nie.<\/p>\n<p>Kr\u00f3tko m\u00f3wi\u0105c, pomaga to zapewni\u0107 poziom walidacji wbudowany w j\u0119zyk, dzi\u0119ki czemu nie musimy niczego przepisywa\u0107. Oczywi\u015bcie s\u0105 pewne zastrze\u017cenia.<\/p>\n<p>Na przyk\u0142ad, je\u015bli musisz sprawdzi\u0107 poprawno\u015b\u0107 warto\u015bci, kt\u00f3ra nie zawiera znak\u00f3w nie\u0142aci\u0144skich, b\u0119dziesz musia\u0142 przej\u015b\u0107 sam i zaimplementowa\u0107 walidacj\u0119 za pomoc\u0105 wyra\u017cenia regularnego.<\/p>\n<p>Ale je\u015bli u\u017cywasz adres\u00f3w e-mail, adres\u00f3w URL, numer\u00f3w, adres\u00f3w IP i wielu innych rzeczy, mo\u017cesz <a href=\"https:\/\/www.php.net\/manual\/en\/filter.filters.validate.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">u\u017cy\u0107 czego\u015b, co ju\u017c istnieje<\/a>.<\/p>\n<p>W ka\u017cdym razie wszystko powy\u017csze dotyczy filtrowania zmiennych. A co z danymi wej\u015bciowymi? To znaczy te, kt\u00f3re pochodz\u0105 z <code>$_POST<\/code>lub <code>$_GET<\/code>. Mo\u017cliwe jest u\u017cycie podobnej strategii z inn\u0105 funkcj\u0105 i innym zestawem filtr\u00f3w.<\/p>\n<p>Ale je\u015bli rozumiesz podstawy przedstawione w ostatnim po\u015bcie, ten post nie b\u0119dzie si\u0119 bardzo r\u00f3\u017cni\u0142.<\/p>\n<h2>Funkcje filtrowania PHP, cz\u0119\u015b\u0107 2: Wej\u015bcia<\/h2>\n<p>Filtrowanie wej\u015b\u0107 odbywa si\u0119 za pomoc\u0105 <code>filter_input<\/code>funkcji. Definicja tej konkretnej funkcji to:<\/p>\n<blockquote>\n<p>Pobiera okre\u015blon\u0105 zmienn\u0105 zewn\u0119trzn\u0105 wed\u0142ug nazwy i opcjonalnie j\u0105 filtruje<\/p>\n<p><a href=\"https:\/\/www.php.net\/manual\/en\/function.filter-input.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Podr\u0119cznik PHP<\/a><\/p>\n<\/blockquote>\n<p>I, jak wspomnia\u0142em ostatnio, brzmi to troch\u0119 dziwnie, dop\u00f3ki nie zrozumiesz, czym s\u0105 filtry. Na szcz\u0119\u015bcie om\u00f3wili\u015bmy to w poprzednim po\u015bcie. I chocia\u017c ten post skupi si\u0119 konkretnie na <code>POST<\/code>(i bardzo kr\u00f3tko <code>GET<\/code>).<\/p>\n<p>Istniej\u0105 jednak inne filtry. Nale\u017c\u0105 do nich:<\/p>\n<ul>\n<li><code>INPUT_COOKIE<\/code><\/li>\n<li><code>INPUT_SERVER<\/code><\/li>\n<li><code>INPUT_ENV<\/code><\/li>\n<\/ul>\n<p>W ka\u017cdym razie, poniewa\u017c dwie najcz\u0119stsze operacje, kt\u00f3re widz\u0119 w WordPressie, to <code>POST<\/code>i <code>GET<\/code>, wydaje si\u0119 wa\u017cne, aby uwzgl\u0119dni\u0107 te dwie tutaj.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159070-61e6ebe70068d.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159070-61e6ebe70068d.png\" alt=\"Powiniene\u015b u\u017cywa\u0107 funkcji filtrowania PHP, cz\u0119\u015b\u0107 2\"><\/a><\/p>\n<p>Korzystanie z tych funkcji jest banalnie proste. Za\u0142\u00f3\u017cmy, \u017ce masz warto\u015b\u0107 pochodz\u0105c\u0105 z czego\u015b, co u\u017cytkownik poda\u0142 w formularzu i przesy\u0142a j\u0105 do serwera za pomoc\u0105 <code>POST<\/code>\u017c\u0105dania z kluczem, takim jak <code>firstname<\/code>.<\/p>\n<p>Kod do weryfikacji mo\u017ce wygl\u0105da\u0107 mniej wi\u0119cej tak:<\/p>\n<ul>\n<li><code>filter_input(INPUT_POST, 'firstname');<\/code><\/li>\n<\/ul>\n<p>Co jest do\u015b\u0107 \u0142atwe do zrozumienia, poniewa\u017c po prostu pobiera klucz, filtruje go, a nast\u0119pnie zwraca warto\u015b\u0107. A poniewa\u017c zwraca warto\u015b\u0107, mo\u017cemy ustawi\u0107 klauzul\u0119 Guard przed przej\u015bciem do dalszej pracy:<\/p>\n<pre><code>1if (false === filter_input(INPUT_POST, 'firstname')) {\n2\u00a0\u00a0return;\n3}\n<\/code><\/pre>\n<p>Je\u015bli wszystko si\u0119 sprawdzi, mo\u017cemy przej\u015b\u0107 dalej, robi\u0105c wszystko, co musimy zrobi\u0107 z informacjami o u\u017cytkowniku. By\u0107 mo\u017ce z jakiego\u015b powodu musimy powi\u0105za\u0107 go z aktualnym postem:<\/p>\n<pre><code>1if (false === filter_input(INPUT_POST, 'firstname')) {\n2\u00a0\u00a0return;\n3}\n4\u00a0\n5$firstname = filter_input(INPUT_POST, 'firstname');\n6update_post_meta(get_the_ID(), 'acme-firstname', $firstname);\n7\u00a0\n8\/\/ Other code you may use...\n<\/code><\/pre>\n<p>Co wi\u0119cej, mo\u017cesz jeszcze bardziej zabezpieczy\u0107 informacje, korzystaj\u0105c z <a href=\"https:\/\/www.php.net\/manual\/en\/filter.filters.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">r\u00f3\u017cnych istniej\u0105cych filtr\u00f3w<\/a>. S\u0105 one przekazywane do <code>filter_input<\/code>funkcji jako trzeci parametr.<\/p>\n<h3>A co z <code>GET<\/code>?<\/h3>\n<p>Zalet\u0105 tej funkcji jest to, \u017ce og\u00f3lnie rzecz bior\u0105c, obowi\u0105zuj\u0105 te same zasady, co w przypadku, z <code>POST<\/code>wyj\u0105tkiem tego, \u017ce zamiast u\u017cywa\u0107 <code>INPUT_POST<\/code>, u\u017cyjesz <code>INPUT_GET<\/code>.<\/p>\n<p>Nast\u0119pnie mo\u017cesz pracowa\u0107 nad swoim kodem, jakkolwiek najlepiej odpowiada potrzebom twojego projektu.<\/p>\n<h3>Bezpiecze\u0144stwo, Nonces itp.<\/h3>\n<p>Pami\u0119taj, to nie jest co\u015b, co mo\u017cna wykorzysta\u0107 zamiast zabezpieczenia. S\u0142u\u017cy to wy\u0142\u0105cznie zabezpieczeniu danych, zanim cokolwiek z nimi zrobisz.<\/p>\n<p>Nie zast\u0119puj weryfikacji warto\u015bci jednorazowych tylko dlatego, \u017ce weryfikujesz dane w inny spos\u00f3b.<\/p>\n<h2>Zmienne i wej\u015bcia<\/h2>\n<p>Pami\u0119taj, chocia\u017c te funkcje s\u0105 bardzo podobnymi zmiennymi, a dane wej\u015bciowe s\u0105 r\u00f3\u017cne. Innymi s\u0142owy, nie pr\u00f3buj u\u017cywa\u0107 <code>filter_var<\/code>podczas pracy z danymi wej\u015bciowymi pochodz\u0105cymi od u\u017cytkownika lub przegl\u0105darki. U\u017cywaj go za ka\u017cdym razem, gdy pracujesz ze zmiennymi. I podobnie u\u017cyj ht e<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Istniej\u0105 natywne funkcje WordPressa u\u0142atwiaj\u0105ce walidacj\u0119, ale s\u0105 te\u017c wbudowane funkcje filtrowania PHP do wprowadzania danych przez u\u017cytkownika.<\/p>\n","protected":false},"author":1,"featured_media":235336,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,897,805,836,845,866],"tags":[1169,1169],"class_list":["post-231269","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-php-7","category-przewodnik-dla-poczatkujacych","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/231269","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=231269"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/231269\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/235336"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=231269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=231269"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=231269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}