PHPPamokos.lt


9. $_GET ir skripto parametrai

Šis trumpas skyrelis yra labai svarbus - jame sužinosite, kaip į kintamuosius perduoti parametrus, tiesiog įrašant juos kartu su puslapio adresu naršyklėje. Ir tada toliau su tais kintamaisiais galima daryti, ką tik norite.

Kaip su PHP gauti reikšmes iš URL adreso eilutės

Ar neteko kada naršyklėje pamatyti ilgą adresą, panašų į tokį kaip pavyzdyje: http://www.manopuslapis.lt/index.php?veiksmas=straipsniai&id=25&metai=2014

Būtent tame adrese ir slypi kintamieji su reikšmėmis. Išnagrinėkime adreso dalis:

  • http://www.manopuslapis.lt/ - domeno (projekto) pavadinimas
  • index.php - konkretaus PHP skripto pavadinimas
  • ?veiksmas=straipsniai&id=25&metai=2014 - skripto parametrai

Mus labiausiai domina trečia dalis. Viskas, kas parašyta po klaustuko ženklo, yra parametrai, kurie vienas nuo kito atskirti ženklu &.

Taigi, šiuo atveju turime tris parametrus:

  • veiksmas = straipsniai (kokia tinklalapio skiltis yra aktyvi)
  • id = 25 (straipsnio ID numeris)
  • metai = 2014 (straipsnio parašymo metai)

Dabar kitas klausimas - o kaipgi pačiame PHP skripte paimti tas reikšmes. Tam skirtas masyvas pavadinimu $_GET. Būtent į jį yra įrašomi tie parametrai su reikšmėmis. Pažiūrėkite:

echo "Veiksmas: " . $_GET['veiksmas'] . "<br />";
echo "Straipsnio ID: " . $_GET['id'] . "<br />";
echo "Straipsnio metai: " . $_GET['metai'] . "<br />";

Ekrane pasirodo mūsų parašyti tekstai ir jau minėtų trijų parametrų reikšmės.

GET panaudojimo pavyzdžių galima rasti labai daug kur. Turbūt dažniausias panaudojimas yra naujienų portaluose - URL adreso pabaigoje yra koks nors id=xxxx parametras, ir būtent pagal tą ID yra iš duomenų bazės traukiamas straipsnis.

  • http://www.delfi.lt/projektai/euras/gidas/kodel-lietuvoje-pabrango-ir-dar-brangs-picos.d?id=66103528 (id=66103528)
  • http://www.delfi.lt/verslas/verslas/klaipeda-idarbins-vandeni-soks-fontanai-o-jaunavedziai-bus-plukdomi-valtelemis.d?id=66113800 (id=66113800)
 

Pavyzdys - pasirinkto sąrašo elemento priskyrimas

Kad būtų lengviau įsisavinti, paimkime pavyzdį. Tarkime, jūsų puslapyje yra pildoma forma, kurioje yra laukas "Gimimo metai". Bet jūs tuos metus žinote iš anksto ir galite perduoti per naršyklėje įrašomą adresą, ir tada formoje metai bus parinkti automatiškai, ir vartotojui nereikės pildyti metų iš naujo. Taigi, kodas būtų toks:

$metai = $_GET['metai'];
echo "<form>";
echo "<select name=metai>";
for ($m = 1990; $m <= 2011; $m++) {
  echo "<option value=" . $m;
  if ($metai == $m) { echo " selected=selected"; }
  echo ">$m</option>";
}
echo "</select>";
echo "</form>";

Toks vaizdas pasirodo, jeigu naršyklės adrese mes įrašome kaip parametrą metai=1995.

 

Index.php - nebūtinas

Kaip jau žinote iš pirmųjų skyrelių, jei naršyklėje nenurodysime konkretaus PHP skripto ir įrašysime tiesiog domeno adresą (pvz http://www.jusupuslapis.lt/), automatiškai bus iškviečiamas pagrindiniame kataloge esantis skriptas index.php. Tai turint omenyje GET parametrus, pravartu žinoti kad ir su parametrais index.php vardo rašyti nebūtina.

www.puslapis.lt/?id=133
veiks lygiai taip pat kaip
www.puslapis.lt/index.php?id=133

Tiesa, atkreipkite dėmesį, kad visgi ženklo / reikia - pagal jį naršyklė nuspręs, kur yra adreso pabaiga, o kur skripto/parametrų pradžia. Taip pat turėkite omenyje, kad, nors abu šie adresai veiks identiškai - reikėtų realiuose projektuose naudoti tik vieną iš jų, nes kitaip bus sunku atsekti statistiką pagal Google Analytics, nes tai bus rodomi kaip du skirtingi adresai. Taip pat klausimas, ar Google iš SEO pusės netraktuos šių dviejų puslapių kaip skirtingų, kas gali reikšti bausmes už dublikuojamą turinį.

 

Dar vienas pavyzdys - Google Analytics nuorodos

Pažiūrėkime į dar vieną gyvenimišką pavyzdį, kur naudojami GET parametrai. Google Analytics, be visokios kitokios statistikos, siūlo projektų savininkams stebėti ir šaltinius, iš kur lankytojai ateina. Ir ne tik iš kokio puslapio, bet ir pagal kokią reklaminę kampaniją. Sakykime, jūs norite žinoti, kiek lankytojų pas jus atėjo ne apskritai iš Facebook, o būtent iš konkretaus posto jūsų Facebook sienoje. Tada darote taip - į Facebook įkeliate ne paprastą nuorodą, o gale pridedate tam tikrus parametrus su prefiksu utm_.

Google leidžia įdėti tris parametrus - utm_medium, utm_source, utm_campaign. Taigi iš paprastos nuorodos http://www.puslapis.lt jūs padarote http://www.puslapis.lt/?utm_source=social&utm_medium=facebook&utm_campaign=reklama2014 - ir būtent tokią nuotrauką įkeliate į Facebook. Pats atidaromas puslapis niekuo nepasikeis - naršyklė tiesiog nekreips dėmesį į tuos papildomus parametrus. Bet Google Analytics kodas juos aptiks ir išsaugos savo statistikoje.

Tada galėsite Analytics sistemoje užeiti į meniu punktą "Campaigns" ir matysite skaičius kaip ant delno - kiek žmonių į jūsų puslapį atkeliavo pagal vieną ar kitą reklaminę kampaniją.

 

.htaccess - adresų perrašymas

Ilgai dvejojau, ar šią temą dėti į PHP kursą, nes ji visai ne apie PHP. Bet profesionaliems tinklalapiams kurti jos tikrai reikia, tad trumpai papasakosiu. Esmė tokia, kad parametrai gali būti perduodami ne tik per GET bet ir pagal kitokį adresą - tiksliau, adresas gali būti "perrašomas", kad perduotų GET parametrus.

Sakykime, kas jeigu turime tokią adreso struktūrą:

http://www.puslapis.lt/[modelis]/[marke]
Pavyzdžiai:
http://www.puslapis.lt/audi/a6
http://www.puslapis.lt/toyota/yaris
http://www.puslapis.lt/volkswagen/golf

Na, ir panašiai. Kaip iš to adreso ištraukti mums reikiamus parametrus, kad būtų, sakykime, $modelis ir $marke? Tam į pagalbą ateina toks failiukas kaip .htaccess. Taip, failas be pavadinimo, ir tik su plėtiniu htaccess po taško. Jis talpinamas į projekto pagrindinį katalogą.

.htaccess failas turi daug paskirčių - iš esmės, tai yra visokie nustatymai, kaip mūsų web-projektas ir web-serveris turi veikti. Vienas iš tokių pritaikymų ir yra adresų perrašymas (URL rewrite). Į tą failą tiesiog įrašome dvi tokias eilutes:

RewriteEngine On
RewriteRule ^cars/(.*)/(.*)$ cars.php?company=$1&model=$2

Tada sukuriame failą cars.php su tokiu kodu:

echo $_GET['company'] . ' - ' . $_GET['model'];

Ir gauname naršyklėje rezultatą:

Dabar pasiaiškinkime, kaipgi veikia ta .htaccess taisyklė. Pirmoji ta failo eilutė RewriteEngine On tiesiog įjungia perrašymo funkciją, toje eilutėje nieko keisti nereikia. O vat antroje eilutėje yra daugiau nesuprantamų dalykų:

RewriteRule ^cars/(.*)/(.*)$ cars.php?company=$1&model=$2

Šios eilutės struktūra tokia:

RewriteRule ^adresas_naršyklėje$ musu_skriptas.php?parametrai

Trumpai apie atskiras dalis:

  • Simbolis ^ pradžioje reiškia adreso pradžią, o $ pabaigoje - pabaigą. Jeigu jų nebūtų, būtų apdorojamas šablonas, esantis ir viduje adreso.
  • Adresas naršyklėje ir realus skriptas atskiriamas paprastu tarpu
  • Adreso naršyklėje viduje gali būti (o gali ir nebūti) atskiros skiltys parametrams/kintamiesiems, jos atskiriamos į skliaustus (), kurių viduje yra to kintamojo "šablonas" pagal RegEx taisykles - jas truputį aptarėme pamokoje apie tekstines eilutes. Šablonas .* reiškia bet kokio ilgio bet kokių simbolių seką
  • Skripto parametruose kiekvienas toks kintamasis tarp skliaustelių tampa kintamuoju su dolerio ženklu - iš eilės $1, $2 ir t.t.

Čia yra tik paprasčiausias .htaccess pavyzdys - realiai šablonai gali būti užrašomi kitaip, gali būti sudėtingesnės RegEx struktūros, taip pat papildomi parametrai peradresavimui ir t.t. Bet čia nėra PHP kurso tema - plačiau apie .htaccess galite pasiskaityti internete, dabar svarbu tiesiog žinoti principą, kaip jis veikia.



(c) 2015-2018. Visais klausimais kreipkitės povilas@laraveldaily.com