traži:  
 php.com.hr >

(...nastavak)
 


Objašnjenje :

Idemo pogledati dio koji smo dodali postojećoj skripti :

// brisanje novosti

if ($_GET["action"]=="obrisi")

{

if ($_GET["idnovost"])

{

$sql="DELETE FROM novosti WHERE idnovost=" . $_GET["idnovost"];

if (mysql_query($sql))

{

echo "Novost je uspješno obrisana";

} else {

echo "Nastala je greška pri brisanju novosti<br>" . mysql_error();

}

}

}

Kao što vidite, prije nego obavljamo samo brisanje moramo provjeriti da li su ispunjeni svi uvijeti za obavljanje brisanja. U našem slučaju smo si rekli da moraju postojati dvije varijable u query stringu da bi se pokrenulo brisanje novosti. Prvo je varijabla koja opsije koju operaciju želimo obaviti. Mislim na $_GET["action"] varijablu. Nju smo komotno mogli izostaviti pošto je jedina dodatna opercija koju obavljamo u ovoj skripti uz pribavljanje i izlistavanje novosti brisanje novosti. No, radi eventualnog proširivanja ove skripte da može obavljati dodatne operacije, te radi dodatne razumljivosti samog koda ubacili smo taj dodatni uvijet pošto nas ništa ne košta napisati tu dodatnu liiniju koda.

Nakon ustanovljavanja da se radi o pokretanju brisanja moramo provjeriti da li imamo ID novosti koju želimo obrisati pošto njega ubacujemo ravno u SQL naredbu za brisanje, te ukoliko ona fali greška pri obavljanju upita je neizbježna. U našoj skripti je to učinjeno vrlo jednostavnom provjerom postojanja neke vrijednosti razližite od 0 u varijabli $_GET["idnovost"]. Tu bi se želio malo zadržati i napomenuti da ovo nije niti približno dovoljna provjera. Siguran sam da pogađate i zašto. Vrlo je očito da se id novosti koja se šalje na brisanje može ručno upisati u adresu tj query string kojim otvaramo skriptu te na taj način obrisati novost kojoj pogodimo ID. No, iz istog razloga se u query string može upisati i neka tekstualna vrijednost koja ne može biti validan Id novosti, što će sigurno izazvati grešku pri obavljanju upita. Iz tog razloga bi tu trebalo provjeriti da li je vrijendost u $_GET["idnovost"] numerička, te po mogućnosti veća od nule pošto su naši ID-evi svi veći od nule.

No, sva ova priča spada u temu sigurnosne teorije, tako da više neću iću u njenu dubinu radi koncentriraanj na stvari koje su nama trenutno bitne, no prije nego se bacite na izradu velikih siteova sa potencijalnom širom publikom otvorenog / public tipa predlažem da dobro promislite kako se osigurati od militantnih korisnika koji će pokušati na bilo koji način „srušiti“ vaše sigurnosne postavke. No, mi idemo dalje.

Nakon provjera ispunjenja svih uvijeta brisanja krećemo na samo brisanje.

$sql="DELETE FROM novosti WHERE idnovost=" . $_GET["idnovost"];

if (mysql_query($sql))

{

echo "Novost je uspješno obrisana";

} else {

echo "Nastala je greška pri brisanju novosti<br>" . mysql_error();

}

Detalje SQL upita smo obradili prije primjera tako da ćemo ih sada preskočiti. Ono što bih samo želio istaknuti je da smo u ovom primjeru po prvi put dinamički generirali sam SQL upit sa dinamičkim podacima. Iako ovo zvuči vrlo high-tech radi se o čistom ljepljenju varijable u SQL upit, no kasnije u vodiču će biti puno kompleksnijih primjera, tako da ste sada vidjeli što znaći napraviti dinamički upit.

Samo izvršavanje upita je vrlo slično kao kod INSERT upita. Dovoljno je obaviti upit pomoću mysql_query() funckije. Čak nije obavezno pohraniti njen rezultat u neku varijablu pošto nemamo potrebe za njenim korištenjem kasnije u skripti.

Očito, ukoliko je mysql_query() vratio true možemo predpostaviti da je novost obrisana a ukoliko je vratio false znaći da je nastala neka greška koju će nam mysql_error() opisati.

Tu sada dolazimo do jedne zanimljive stvari. Pokušajte obrisati jednu vijest, te kada vam se opet otvori stranica sa porukom o uspješnom brisanju vijesti refreshajte stranicu (tako da opet otvorite starnicu sa istim query stringom). Kao što vidite, opet nam se javila ista poruka o uspješnom brisanju novosti, no mi znamo da ta novost više ne postoji u bazi. Što se tu dogodilo? Kao što sma već rekao, mysql_query() samo izvršava upit te vraća true ukoliko je on uspješno obavljen, a ne zna detalje njegovog obavljanja, tj. u ovom slučaju ne zna da li je neki redak stavrno obrisan u tablici.

Da bi provjerili da li je naša novost stvarno obrisana možemo koristito još jednu mysql funkciju koja se nalazi u PHP-u. Radi se o mysql_affected_rows() funckiji. Kao što joj ime kaže, ona vraća broj redaka koji su bili utjecani posljednjom operacijom. Ona se može koristiti samo nakon DELETE, UPDATE i INSERT upita, tj. upita koji rade izmjene nad podacima tablica.

Idemo vidjeti kako bi ju implementirali u našu skriptu.

$sql="DELETE FROM novosti WHERE idnovost=" . $_GET["idnovost"];

if (mysql_query($sql))

{

if (mysql_affected_rows() > 0 )

{

echo "Novost je uspješno obrisana";

} else {

echo "Nije obrisana niti jedna novost!";

}

} else {

echo "Nastala je greška pri brisanju novosti<br>" . mysql_error();

}

Znaći, dodali smo još jednu provjeru nakon obavljanja upita brisanja koja ispituje da li je broj obrisanih redaka veći od nule. Ako sada pokušate refreshati stranicu nakon brisanja, ili ručno izmjeniti idnovost u query stringu na neki nepostojeći ID novosti prikazat će vam se pravilna poruka.

I to je to. Polako ali sigurno se približavama kraju naše skripte. Ostalo nam je još samo upoznati se kako urediti postojeći podatak čime ćemo zaokružiti osnove SQL-a te time i osnove korištenja MySql-a u PHP skriptama. Nakon toga ćemo se na trenutak vratiti na postojeće gradivo da bi izradili dio sitea koji će vidjeti i naši korisnici, te ćemo malo doraditi postojeće alate da budu dodatno jednostavniji i pregledniji. Tu ćemo već početi uranjati u malo naprednije vode, no u njih ćemo do grla zaroniti u slijedećem poglavlju vodiča.  



PHP i MySQL
 © 2004 - 2008 php.com.hr