Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




PHP Sola

Slovena


ALTE DOCUMENTE

PHP Sola

PHP Sola (3. del)

Do sedaj smo ze spoznali spremenljivke, odločitvene stavke, ter zanke. S tem znanjem smo lahko napisali skripto s katero glede na pogoj izpisemo določeno vsebino. Ampak ta vsebina mora biti shranjena v sami kodi. Danes si bomo ogledali, kako črpamo podatke iz zunanjih virov, kot so podatkovna baza, datoteke, spletni obrazci. Pred tem pa se bomo spoznali kaj je funkcija.

Funkcija

Funkcija je del kode, ki naredi določeno opravilo. Na koncu lahko vrne vrednost ali ne. Npr. vrne pravilno, če je opravilo bilo uspesno izvedeno oz. nepravilno v nasprotnem primeru. S pomočjo funkcije lahko za neko opravilo napisemo kodo samo enkrat in jo uporabimo koliko krat zelimo. Npr. imamo funkcijo, ki  kvadrira podano vrednost.



<?php

function kvadriraj ( $stevilo )

echo kvadriraj(2);

?>

S to kodo smo naredili funkcijo kvadriraj, ki sprejme argument stevilo katerega zelimo kvadrirati. Sama funkcija to stevilo pomnozi s seboj in vrne to vrednost. Funkcija se izvede sele, kadar jo pokličemo. V nasem primeru smo ji podali argument s konstantno vrednostjo 2. Za argument lahko podamo tudi konstanto, spremenljivko ali izraz.

Pomembna stvar, ki jo moramo razumeti pri  funkcijah je doseg spremenljivk. Spremenljivke, ki jih ustvarimo znotraj funkcije ne bodo vidne zunaj nje. Poglejmo si sledeči 24224m123y primer:

function funkcija()

$stevilo = 5;

echo 'Stevilo zunaj funkcije: ' . $stevilo;

funkcija();

echo 'Stevilo zunaj funkcije: ' . $stevilo;

Kot vidimo ima spremenljivka znotraj funkcije drugačno vrednost kot zunaj nje. To je odvisno od dosega spremenljivk. Če zelimo znotraj funkcije vplivati na vrednost spremenljivke zunaj nje, jo moramo označiti kot globalno ali jo podati kot argument po referenci. Za definiranje spremenljivke kot globalne lahko uporabimo dva načina. Prvi je beseda global, druga pa je spremenljivka $GLOBALS.

function funkcija()

function funkcija()

Pri prvi funkciji smo uporabili besedo global, v drugem pa spremenljivko $GLOBALS, katera je polje vseh globalnih spremenljivk. Rezultat obeh je enak.

Druga pomembna stvar funkcij je podajanje argumentov po vrednosti ali referenci. Če je argument podan po vrednosti se naredi kopija originalne spremenljivke in funkcija dela s kopijo, v primeru argumenta podanega po referenci pa funkcija dela z originalom in se ne naredi kopija. Recimo da imamo funkcijo, ki pomnozi stevilo z 10.

function mnozi_z_10( $st )

$stevilo = 5;

echo mnozi_z_10( $stevilo );

echo mnozi_z_10( $stevilo );

V tem primeru smo argument $st podali kot vrednost. Naslednji primer kaze uporabo argumenta podanega po referenci.

function mnozi_z_10( &$st )

$stevilo = 5;

echo mnozi_z_10( $stevilo );

echo mnozi_z_10( $stevilo );

Razlika v kodi je le pri implementaciji funkcije. Pri argumentu zraven stoji znak &, kateri pomeni, da je argument podan po referenci. To pomeni da se vsaka sprememba spremenljivke podane po referenci vidi izven funkcije tudi ko se ta zaključi. Isto kot zgoraj pokličemo to funkcijo in rezultat bo drugačen. Namreč pri prvi funkciji se je naredila kopija globalne spremenljivke $stevilo, v slednjem primeru pa je funkcija delala z globalno spremenljivko in ne kopijo.

Posebnost PHP jezika je spremenljivo stevilo argumentov pri funkciji. Npr. imamo funkcijo sestavine, katera sprejme kot argumente vse sestavine napitka. Vendar ne vemo koliko sestavin vsebuje napitek. S PHP-jem se da to enostavno resit.

function sestavine()

sestavine( 'Banana', 'Mleko', 'Sladkor' );

Kot vidimo, nismo v glavi funkcije podali nobenega argumenta, ampak smo jih dobili s posebno funkcijo. Funkcija func_num_args() vrne stevilo argumentov podanih funkciji - v nasem primeru 3. Funkcija func_get_arg(indeks) vrne argument na indeksu. Indeksi se začnejo z 0! Obstaja se funkcija func_get_args(), katera vrne polje vseh argumentov, vendar v nasem primeru je nismo uporabili.

Druga posebnost PHP-ja je klic funkcije preko spremenljivke. Imamo spremenljivko, katere vrednost je ime funkcije. Če to spremenljivko pokličemo kot funkcijo se bo izvedla ta funkcija.

$ime_funk = 'sestavine';

$ime_funk('Jajca', 'Sol');

Spremenljivki ime_funk smo priredili vrednost sestavine in jo poklicali kot funkcijo. Ker ta funkcija obstaja se izvede. V primeru, če funkcija ne bi obstaja se izpise napaka. Ali funkcija obstaja lahko preverimo s sledečo funkcijo.

function_exists( $ime_funk );

Funkcija vrne pravilno v primeru, da funkcija obstaja oz. nepravilno v nasprotnem primeru. Ta funkcija nam pride prav, če zelimo preverit ali je nalozen določen dodatek. Npr. GD knjizica.

<slika3>

Nekatere primere lahko najlazje resimo z rekurzijo. Rekurzivna funkcija je funkcija, ki kliče v določenih primerih sama sebe. Pri taksnih funkcijah moramo paziti, da se bo funkcija v določenem primeru končala - da se ne zazankamo.

function stej( $num )

echo $num . ',';

stej( 10 );

Funkcija steje od 1 do 10, čeprav je na prvi pogled videt da steje od 10 do 1, ampak, ker se najprej pokliče rekurzija in se sele nato izpise v narasčajočem zaporedju.

Podatkovna baza

Podatkovna baza nam omogoča shranjevanje podatkov in vračanje le teh na enostaven način. S preprostim ukazom - SQL stavkom povemo kaj zelimo iz baze. Podatkovne baze ne omogočajo samo shranjevanja in vračanja podatkov, ampak se mnogo več, kot so iskanje, relacije, različne znakovni nabori itd. Tukaj se bomo osredotočili na uporabo baze s PHP jezikom. Kot smo omenili v prvem delu bomo uporabili podatkovno bazo MySQL. Naj opozorim, da v novejsih verzijah PHP-ja, MySQL podpora ni več privzeto omogočena, ampak je potrebno nastaviti avtomatsko nalaganje MySQL modula za PHP. To storimo v datoteki php.ini v razdelku "Dynamic Extensions" oz. z ukazom ./configure. Podatke o PHP-ju in katere module imamo nalozene dobimo s sledečim ukazom.

<?php

phpinfo();

?>

Izpisejo se nam informacije o PHP jeziku, kot tudi nalozeni moduli. Drugi način, ki smo ga spoznali danes je z uporabo funkcije function_exists, s katero preverimo, če obstaja funkcija mysql_connect. Za upravljanje z bazo bomo uporabili orodje phpMyAdmin. Od bralca pričakujem osnovno razumevanje in znanje o podatkovnih bazah in SQL jezika. Vendar tudi začetniku ne bi smel biti problem.

Naredili bomo preprosti dnevnik, v katerega lastnik spletne strani vpisuje svoje dogodke. Najprej bomo naredili podatkovno bazo in tabelo, v katero bomo vpisovali dogodke.

<slika1>

CREATE DATABASE planetpc;

CREATE TABLE `blog` (

`id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT ,

`vsebina` TEXT NOT NULL ,

`datum` DATETIME NOT NULL ,

PRIMARY KEY ( `id` )

Sedaj se bomo vnesli nekaj dogodkov v bazo, da jih bomo lahko pozneje brali s PHP-jem. To storimo s pomočjo phpMyAdmin orodja.

<slika2>

Sedaj pa si poglejmo kako te podatke prikazemo s pomočjo PHP-ja.

<?php

$db_host = 'localhost';

$db_user = 'root';

$db_pass = '';

$db_baza = 'planetpc';

mysql_connect($$db_host, $db_user, $db_pass);

mysql_select_db($db_baza);

$sql = 'SELECT vsebina,datum FROM blog';

$rezultat = mysql_query($sql) or print 'Napaka baze: ' . mysql_error();

while ( $vrstica = mysql_fetch_assoc($rezultat) )

?>

Na začetku določimo podatke o bazi. Ime streznika, uporabnisko ime, geslo, ter ime baze. Nato se povezemo z bazo s funkcijo mysql_connect() in izberemo bazo. V spremenljivko vnesemo SQL stavek, s katerim bomo dobili vnose iz baze. S funkcijo myqsl_query izvedemo ta stavek, ob enem preverimo, če je prislo do napake le to izpisemo. Zadnja funkcija vrača resource tip, kateri kaze na rezultat poizvedbe. Tega pripnemo funkciji mysql_fetch_assoc, ki vrne vrstico rezultata v asociativno polje in se pomakne na naslednji zapis. Če več ni zapisov vrne funkcija nepravilno. Zatorej lahko uporabimo while zanko, katera bo tekla za vse vrstice. Znotraj zanke pa samo izpisemo vrednosti vrstice - asociativnega polja.

Vidimo, da se lahko povezemo in izpisemo podatke iz baze le z nekaj vrsticami kode, kar je v nasprotju ostalimi jeziki mnogo manj. V primeru smo uporabili le nekaj funkcij z delom z bazo. Za točen seznam le teh je najboljse pogledati v priročnik, kajti jih je precej. Poglejmo si se nekaj največ krat uporabljenih.

Če zelimo izvedet koliko vrstic smo dobili s poizvedbo uporabimo funkcijo mysqli_num_rows( rezultat ), katera vrne stevilo vrstic v rezultatu. Opozoril bi, da SQL jezik podpira stetje vrstic z vgrajeno COUNT() funkcijo, če zelimo izvest le stevilo vrstic in nas podatki ne zanimajo. Namreč nima smisla poizvedovat nepotrebnih podatkov.

Funkcija, ki filtrira podani niz, tako da ga lahko varno vključimo v SQL stavek je mysql_real_escape_string(niz). Ta funkcija bi morala biti uporabljena vsepovsod, kjer podatki prihajajo iz zunanjih virov. Z uporabo te funkcije preprečimo t.i. SQL Injection. Več o tem prihodnjič.

Včasih kadar vstavljamo ali popravljamo podatke zelimo izvedet koliko vrstic smo dejansko vstavili oz. kaksen je vstavljen id. Ob vstavljanju, popravljanju ali brisanju podatkov lahko izvemo koliko vrstic smo spremenili. Klic funkcije mysql_affected_rows() nam vrne to stevilko. S funkcijo mysql_insert_id() lahko poizvemo id polja AUTO_INCREMENT ob vstavljanju vrstice.

Datoteke

Podatke lahko črpamo tudi iz datoteke. Poglejmo si kratek primer, kako preberemo vsebino datoteke.

<?php

$ime = 'test.txt';

$f = fopen( $ime, 'r' );

echo fread( $f, filesize( $ime ) );

fclose( $f );

?>

Najprej določimo ime datoteke, ki jo zelimo prebrati. S funkcijo fopen(ime_datoteke, tip) odpremo datoteko. Glede na tip določimo kaj lahko počnemo z datoteko. Ali jo lahko beremo, pisemo, oboje hkrati itd. Funkcija vrne vir (resource) datoteke. Funkcija filesize( ime_datoteke) vrne velikost datoteke v bajtih. S funkcijo fread(vir, x) preberemo x bajtov iz vira. Na koncu ne smemo pozabiti zapret datoteke s funkcijo fclose(vir). Poudariti je treba, da PHP privzeto smatra da je datoteka tekstovna, torej če zelimo delati z binarno datoteko, jo moramo pravilno odpreti. Poglejmo si se kratek primer kako zapisemo vsebino v datoteko.

$f = fopen( $ime, 'w' );

fwrite($f, 'Vsebina datoteke');

fclose( $f );

Odpremo datoteko za pisanje in s funkcijo fwrite(vir, niz), zapisemo niz v datoteko.

Obrazci

Na kratko si se poglejmo kako preberemo podatke iz spletnega obrazca. Ločimo dva načina posiljanje podatkov. Preko metode GET se podatki posljejo preko URL naslova. Preko metode POST pa se podatki posiljajo v glavi zahtevka. V nasprotju z GET metodo je POST zahteva lahko poljubne velikosti. Zato bomo v nasem primeru uporabili POST metodo. Najprej naredimo obrazec.

<form action="izpisi.php" method="POST">

<input type="text" name="polje"><br>

<input type="submit">

</form>

Sedaj si poglejmo kako vsebino, ki jo je vpisal uporabnik v obrazec, preberemo s pomočjo PHP-ja.

<?php

echo 'Uporabnik je vpisal: ' . $_POST['polje'];

?>

Ime te skripte mora biti izpisi.php, saj smo v obrazcu tako določili, uporabljamo POST metodo. Kot vidimo iz primera ima PHP globalno spremenljivko $_POST katera vsebuje vse vrednosti, ki so prisle iz obrazca po metodi POST. V primeru, da bi uporabili GET metodo bi vzeli globalno spremenljivko $_GET.

Naslednjič si bomo podrobneje pogledali kako povezemo spletne obrazce z bazo in datotekami, ter rekli bomo dve besedi, kako preprečiti SQL injection napad. Do takrat pa lahko s tem znanjem in malo domisljije naredite svojo prvo knjigo gostov. J


Document Info


Accesari: 1881
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )