Upotreba $_POST i $_GET u klasi

Upotreba $_POST i $_GET u klasi

offline
  • Niko E
  • Software & Information Engineering
  • Pridružio: 05 Maj 2009
  • Poruke: 135
  • Gde živiš: Wien

Interesuje me koji je najbolji način tj. rešenje za upotrebu $_POST i $_GET variabli u klasi kada je u pitanju OOP. Da bih bio jasniji napisaću ispod primer koda koji planiram na implementiram:

+ Job.php

+ dodajPosao.php

Da li je ovo ok? Da li postoji bolje rešenje u praksi? I da je je u redu da se koriste gore napomenute variable u konstruktoru? Hvala unapred.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Vodi računa da ovo zaštitiš od SQL injection i cross-site scripting-a. To generalno najviše zavisi od toga šta hoćeš da postigneš: ja recimo GET parametre koristim samo u slučaju kada to može znatno da poboljša korisničko iskustvo - recimo kod upita za pretragu ili profila određenog korisnika, pa da te URL adrese može da sačuva za ubuduće. Ovde konkretno bih pre koristio POST parametre.



offline
  • Pridružio: 25 Jan 2004
  • Poruke: 2784
  • Gde živiš: Niš

@Nikola04

Objektno orijentisano programiranje je stvoreno sa idejom da bi se lakše upravljalo velikim softverskim projektima.

Nisam došao da ti to kažem jer imaš samo jednu formu i php klasu koja radi sa njom, već sam došao da ti kažem da imaš samo jednu formu i php klasu Very Happy

... Pretpostavljam da si krenuo isuviše rano da razmišljaš o tome "kako se stvari programiraju na OOP način" i da pritom pokušavaš da pristupiš tome bez dovoljno funkcionalnih celina koje je potrebno razdvojiti na objekte. Te tako, kada budeš imao ceo web sistem skiciran i planski razrađen, shvatićeš da si već zakrčio dva objekta u jednom i da je HTTP parametre logičnije hvatati na jednom mestu, u zasebnom objektu (tzv. http router), gde ćeš takođe vršiti proveru ispravnosti unosa i obezbediti ga od loših namera, a potom podatke prosleđivati drugim objektima (funkcionalnostima / kontrolerima) u zavisnosti od toga koji URL/paket je router dobio (recimo pattern matching tehnikom).

Dakle, tvoja klasa Job treba samo da radi svoj job posao i da se ne hvata uopšte sa globalnim promenljivama, a takav način razmišljanja treba da primenjuješ kasnije i na sve ostalo ... i kroz ceo život Very Happy

offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

Nemas tu mnogo matematike, mozes da napravis neku Request class-u koja ce da sadrzi tvoje get, post, request, server podatke.
Nesto od jednostavnijih primera je da definises private clanove klase kojima ces podatke da prosledis kroz konstruktor ili neki setter. Ako ides kroz konstruktor bitni je da kazes klasi kojom vrstom metoda barata (POST, GET, itd..), i naravno prosledis joj taj objekat. Taj objekat se onda predaje tvom privatnom clanu klase i tako ti dobijas post podatke dostupene u celoj klasi da radis sa njima sta ti je volja...

class Request {    private $_post;    private $_get;            public function __construct($method = "POST", array $data)    {       if ($_SERVER['REQUEST_METHOD'] === 'POST') {          $this->$_post = $data;       }              /// bla bla    } } $r = $_POST; $obj = new Request($r)

Mada moj ti je savet da se batalis pisanja svojih Request, Response klasa i vec da pogledas kako je Symfony uradio perfektno svoju komponentu Symfony\Component\HttpFoundation\Request.
Mozes da je koristis u svim tvojim projektima uz samo 2 klika i bez dodatnih konfigurasanja i bez jezgra SF frameworka.

http://api.symfony.com/2.8/Symfony/Component/HttpFoundation/Request.html

Takodje obrati paznju na njihov konstruktor i na metodu createFromGlobals() pa onda mozes da izmiksujes sam nesto.

offline
  • Niko E
  • Software & Information Engineering
  • Pridružio: 05 Maj 2009
  • Poruke: 135
  • Gde živiš: Wien

Ok, hvala na odgovorima. Radim na jednom manjem projektu, tako da se nisam odlucio za neki framework. Ulozio sam nesto vise truda i vremena za pisanje nekih svojih klasa ali isplatio se jer tako ucim OOP.

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Kad već vežbaš OOP, uči i design patterns, biće ti korisni ukoliko planiraš da pređeš na neki framework, a i generalno će te navići da pišeš bolji kod.

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Nikola04 ::Ok, hvala na odgovorima. Radim na jednom manjem projektu, tako da se nisam odlucio za neki framework. Ulozio sam nesto vise truda i vremena za pisanje nekih svojih klasa ali isplatio se jer tako ucim OOP.

Sada da ne dužim, ajmo par stvari:

1) Ne koristi direktno GET i post sa proverama u SQL, posebno kada radiš sa ID i bitnim podatcima.
2) Kada radiš upoređivanja sa nečim, GET ili POST mogu vratiti enkodovane podatke ili da ima negde bar razmak koji nisi očekivao
3) Moraš znati šta da očekuješ od GET ili POST, da li je varijabla, integer, float, boolean itd, odnosno tip informacije.
4) Ako radiš OOP, onda napravi sebi jednu funkciju u kojoj ćeš unutar klase snimiti GET ili POST u objekat ako ćeš ga koristiti na više mesta. Ta funkcija neka je private uvek.
5) Imaš pametnije rešenje od GET ili POST, PRIMER:

// propusti samo okrugli broj integer ili vrati 0 if (isset($_GET['id'])) {    $id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, array('options'=>array(       'default' => 0, // PRIMER       "min_range" => 1, // PRIMER                 "max_range" => 99999999999 // PRIMER    ))); } // propusti samo email ili vrati false if (isset($_GET['email'])) {    $email= filter_input(INPUT_GET, 'email', FILTER_VALIDATE_EMAIL); } // Ako u POST postoji neki array ili false if (isset($_POST['var'])) {    $array= var_dump(filter_input(INPUT_POST, 'var', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY)); }

Ovo je jako moćna i korisna funkcija.

REFERENCE:

http://php.net/manual/en/function.filter-input.php
http://php.net/manual/en/filter.filters.validate.php
http://php.net/manual/en/filter.filters.sanitize.php
http://php.net/manual/en/filter.filters.misc.php
http://php.net/manual/en/filter.filters.flags.php

Ko je trenutno na forumu
 

Ukupno su 730 korisnika na forumu :: 3 registrovanih, 0 sakrivenih i 727 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Bluper, Dorcolac, ruma