{"id":229079,"date":"2022-11-06T17:08:00","date_gmt":"2022-11-06T14:08:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229079"},"modified":"2022-11-09T05:27:26","modified_gmt":"2022-11-09T02:27:26","slug":"laius-ja-pikkuskraad-php-s-moned-kasulikud-tavad","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/laius-ja-pikkuskraad-php-s-moned-kasulikud-tavad\/","title":{"rendered":"Laius- ja pikkuskraad PHP-s: m\u00f5ned kasulikud tavad"},"content":{"rendered":"\n<p>Eelmistes postitustes kirjutasin h\u00e4sti <a href=\"https:\/\/tommcfarlin.com\/tag\/google-maps-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Google Mapsi API<\/a> -ga t\u00f6\u00f6tamise kohta. Ausalt \u00f6eldes pole ma p\u00e4rast seda postitust sellega t\u00f6\u00f6tanud.<\/p>\n<p>Siiski olen PHP-s pidanud t\u00f6\u00f6tama laius- ja pikkuskraadidega ning m\u00f5ned tavad, mida olen hakanud kasutama, v\u00f5ivad minu arvates meid koordinaatide v\u00f5i ujukomav\u00e4\u00e4rtustega \u00fcldiselt h\u00e4sti kasutada.<\/p>\n<p>J\u00e4rgmises koodiosas kirjeldan kasutatud l\u00e4henemisviisi ja p\u00f5hjuseid. Kuid ma tahan olla selge, et kui loete seda seoses Google Mapsi API-ga, ei saa ma selle toimimise ja nende API praeguse versiooni osas palju pakkuda.<\/p>\n<h2>Laius- ja pikkuskraad PHP-s<\/h2>\n<p>Kui t\u00f6\u00f6tate PHP-s laius- ja pikkuskraadidega, kasutate ujukoma v\u00e4\u00e4rtusi, eks? Nii et te ei soovi kunagi neid millekski v\u00e4hemaks s\u00f5eluda; vastasel juhul kaotate andmeid ja te ei suuda leida seda, mida proovite leida.<\/p>\n<p>Seega eeldame k\u00f5igi kavatsuste ja eesm\u00e4rkide jaoks, et teil on serverisse saabunud teave ja peate sellega t\u00f6\u00f6tama PHP-ga.<\/p>\n<p>Kaks asja, mida soovite meeles pidada, on j\u00e4rgmised:<\/p>\n<ol>\n<li>desinfitseerida sissetulevad andmed,<\/li>\n<li>veenduge, et see oleks teisendatud ujukoma v\u00e4\u00e4rtuseks.<\/li>\n<\/ol>\n<p>Seda saab teha PHP <a href=\"https:\/\/php.net\/manual\/en\/function.filter-var.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">filter_var<\/a> ja <a href=\"https:\/\/php.net\/manual\/en\/function.floatval.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">floatval<\/a> funktsioonide abil, millest ma r\u00e4\u00e4gin kohe. Pange t\u00e4hele, et kui <strong>floatvali<\/strong> tulemus ei tagasta ujukoma, peab teil olema graatsiline viis selle k\u00e4sitlemiseks.<\/p>\n<p>Juhendi kohaselt\u00a0 v\u00f5ib <strong>floatval<\/strong> tagastada j\u00e4rgmised andmed:<\/p>\n<blockquote>\n<p>Antud muutuja ujuvv\u00e4\u00e4rtus. T\u00fchjad massiivid tagastavad 0, mittet\u00fchjad massiivid tagastavad 1. Stringid tagastavad suure t\u00f5en\u00e4osusega 0, kuigi see s\u00f5ltub stringi k\u00f5ige vasakpoolsematest t\u00e4hem\u00e4rkidest. Kehtivad ujukiheite \u00fchised reeglid.<\/p>\n<\/blockquote>\n<p>Kuidas seda graatsilisemalt k\u00e4sitleda, vaatame hiljem postituses.<\/p>\n<h3>Sissetulevate laius- ja pikkuskraadi s\u00f5elumine<\/h3>\n<p>Oletame, et sissetulevad v\u00e4\u00e4rtused on PHP kogus <a href=\"https:\/\/php.net\/manual\/en\/reserved.variables.request.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$_REQUEST<\/a> (mis viitavad serverisse saabuvatele HTTP-p\u00e4ringutele), mis on v\u00f5tmega <strong>acme-demo-latitude<\/strong> ja <strong>acme-demo-longitude.\u00a0<\/strong><\/p>\n<p>Saame need k\u00e4tte saada <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-00-retrieving-floating-point-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">j\u00e4rgmiselt<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$latitude  = $_REQUEST['acme-demo-latitude'];\n$longitude = $_REQUEST['acme-demo-longitude'];<\/code><\/pre>\n<p>Kuid sellest ei piisa. Esiteks peame kasutama <strong>filtrit filter_var<\/strong>, et veenduda, et andmed on puhastatud ja j\u00e4rgivad <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-01-filtering-floating-point-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ujukoma skeemi<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$latitude  = filter_var(\n    $_REQUEST['acme-demo-latitude'],\n    FILTER_SANITIZE_NUMBER_FLOAT\n);\n\n$longitude = filter_var(\n    $_REQUEST['acme-demo-longitude'],\n    FILTER_SANITIZE_NUMBER_FLOAT\n);<\/code><\/pre>\n<p>J\u00e4rgmisena leian, et on kasulik kasutada <strong>floatvali<\/strong>, et s\u00f5eluda tulemus ujukoma v\u00e4\u00e4rtusena. See j\u00e4tab j\u00e4rgmise koodiploki <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-02-parse-the-floating-point-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selliseks<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$latitude  = floatval(\n  filter_var(\n    $_REQUEST['acme-demo-latitude'],\n    FILTER_SANITIZE_NUMBER_FLOAT) );\n\n$longitude = floatval(\n  filter_var(\n    $_REQUEST['acme-demo-latitude'],\n    FILTER_SANITIZE_NUMBER_FLOAT) );<\/code><\/pre>\n<p>P\u00e4rast mida saate seda vabalt kasutada. Kuid pidage meeles, et me peame siiski veenduma, et tagastatud v\u00e4\u00e4rtused on ujukoma v\u00e4\u00e4rtused.<\/p>\n<h3>Andmete kinnitamine<\/h3>\n<p>N\u00fc\u00fcd, kui meil on teave, peame veenduma, et see n\u00e4eb hea v\u00e4lja. Ja kui see nii ei ole, peame sellega \u00f5igesti tegelema. Kui ei, siis saame lihtsalt:<\/p>\n<ol>\n<li>tagastab vale funktsioonist, millest see sisaldub,<\/li>\n<li>teha erand ja lubada helistajal seda oma \u00e4ran\u00e4gemise j\u00e4rgi k\u00e4sitleda.<\/li>\n<\/ol>\n<p>K\u00f5ik need n\u00e4ited v\u00f5ivad v\u00e4lja n\u00e4ha <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-03-validating-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selline<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Return false...\nif (! (is_float( $latitude) &amp;&amp; is_float( $longitude) )) {\n  return false;\n}\n\n\/\/ Or throw an exception...\nif (! (is_float( $latitude) &amp;&amp; is_float( $longitude) )) {\n  throw new Exception('Latitude and longitude are not valid floating point values.');\n}\n<\/code><\/pre>\n<p>L\u00f5ppkokkuv\u00f5ttes on siiski teie otsustada, kuidas v\u00e4\u00e4rtusi k\u00e4sitleda, kui need pole p\u00e4rast s\u00f5elumist \u00f5iges vormingus.<\/p>\n<h2>Kas need on parimad tavad?<\/h2>\n<p>Ausalt \u00f6eldes ma kahtlen selles. Ma tean, et need on asjad, mida olen kasutanud ja mis on mulle kasulikud olnud. See on ka kaitsev ja vastupidav viis veendumaks, et teie v\u00e4\u00e4rtused on \u00f5iged.<\/p>\n<p>Aga kui selleks on paremaid viise, siis olen valmis neid kommentaarides kuulma.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Olen t\u00f6\u00f6tanud PHP-s pikkus- ja laiuskraadidega. On tavasid, mis minu arvates aitavad meid h\u00e4sti ujukomav\u00e4\u00e4rtustega t\u00f6\u00f6tamisel.<\/p>\n","protected":false},"author":1,"featured_media":166466,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[916,842,863],"tags":[1165],"class_list":["post-229079","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-muud","category-opetused","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229079","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=229079"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229079\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/166466"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=229079"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=229079"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=229079"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}