traži:  
 php.com.hr >

(...nastavak)
 


Objašnjenje :

Kao što vidite, sedamdeset linija koda u PHP-u nije mnogo kada se uzme u obzi da se radi o ponešto jednostavnoj operaciji. Tako da se ne začudite kada vam prvi malo veći projekt pređe broj od par tisuća linija. Ali idemo se baciti na bitne stvari.

Kao i u dosadašnjim primjerima, na samom početku skripte smo includali dbspoj.php. Nadam seda je razlog tome već poznat pa vas neću opet gnjaviti sa tim objašnjenjem već prelazim na prvi kora, a taj je popunjavanje forme sa postojećim podacima iz baze.

Primjećujete varijablu $err? Ona nam služi kao zastavica koja govori da li su podaci uspješno pribavljeni iz baze te da li je sigurno prikazati formu. Kao i svaka zastavica, ova može biti dignuta ($err=true) ili spuštena ($err=false). Ako pogledate ostatak koda koji slijedi vidjet ćete da zastavicu dižemo kada nešto pođe po zlu, te formu ne prikazujemo u slučaju da je zastavica dignuta. Normalno, na početku skripte moramo stvoriti zastavicu u njenom spuštenom stanju iz razloga koje diktira zdrav razum. Na početku skripte nije još ništa pošlo po zlu.

Prije samog pribavljanja podataka iz baze moramo obaviti neke provojere.

if (!$_GET["idnovost"])

{

echo "Nepotpuni ulazni podaci";

$err=true;

} else {

...

Ovime provjeravamo da li je skripti prolijeđena informacija ID-a novosto koju želimo urediti kroz formu. Očito je da nam je ovo ključna informacija jer na osnovu nje prihvaćamo novost sa kojom ćemo popuniti formu, te ju u slijedećm koraku koristimo za određivanje koju vijest uređujemo unutar UPDATE upita.

Nakon što smo se uvjerili da imamo sve potrebne podatke za obavljanje željenih operacija možemo prihvatiti novost.

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

if (!$q=mysql_query($sql))

{

echo "Nastala je greška pri izvođenju upita<br>" . mysql_query();

$err=true;

} elseif (mysql_num_rows($q)==0) {

echo "Nepostojeća novost";

$err=true;

} else {

$novost=mysql_fetch_array($q);

}

Ovaj dio bi već trebao biti poznat, samo što smo ga ovog puta malo drugačije napisali. Umjesto serije if-ova je korištena if ... elseif ... else struktura. Ona nam ovdje više odgovara zbog svoje osobine da se može spuštati po uvijetima sve dok se ne dođe na nekog koji je uzrokovao grešku ili ukoliko nije došlo do greške se obavlja else grana strukture. Ovo zadovoljava naš uvijet da se niže operacije ne smiju obaviti ukoliko je neka od viših operacija završila sa greškom. Znaći, ne možemo izvršiti mysql_num_rows() funckiju ukoliko je mysql_query vratio false, tj. ukoliko postoji greška u upitu ili je nastala neka druga greška na samom serveru.

$novost=mysql_fetch_array($q);

Sada se sigurno pitate zašto nije korištena while petlja za pribavljanje retka rezultata upita. Razlog je zapravo prilično očit. Naš upit može vratiti samo jedan rezultat kojeg prihvaćamo samo jednim pozivanjem mysql_fetch_array() funckije tako da bi isti rezultata postigli i korištenjem while petlje.

Nakon pribavljanja novosti možemo krenuti na prikaz forme. No prije samog prikaza forme moramo provjeriti našu zastavicu, tj. provjeriti da li je bilo grešaka u dosadašnjim obavljneim operacijama.

U samoj formi bih želio samo izdvojiti jedna detalj :

<input type="hidden" name="idnovost" value="<?=$_GET["idnovost"]?>">

Za razliku od forme za unos novosti, ovog puta smo dodali novo polje za pohranu id novosti koju uređujemo. Za takve informacije koje se ključne za funkcioniranje skripte, ali ne želimo ostaviti mogućnost da ih korisnik izmjeni u procesu korištenja skripte obično koristimo hidden polja.

Nakon prikaza forme prestaje prvi korak naše skripte korisnik mora ispuniti i submitati formu da bi prešao na slijedeći korak u kojem se pohranjuju učinjene izmjene.

$sql="UPDATE novosti SET naslov='". $_POST["naslov"] ."', tekst='".$_POST["tekst"] ."' WHERE idnovost=". $_POST["idnovost"];

if (mysql_query($sql))

{

if (mysql_affected_rows() > 0 )

{

echo "Novost je uspješno uređena.";

} else {

echo "Novost nije izmjenjena.";

}

} else {

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

}

Prvi korak je dinamički popuniti SQL upit. Pošto je UPDATE upit već obrađen na njemu se nećemo zadržavati. Ostatak koda bi vam također već trebao biti poznat. Identičan je kao i kod izvršavanja DELETE upita. Nakon izvršavanja upita sa mysql_query() funckijom provjeravamo da li izmjenjen koji redak u tablici te na osnovi te informacije ispisujemo odgovarajuću poruku.

Ovdje bih želio istaknuti jednu zanimljivu stvar. U našem pregledniku otvorite uređivanje neke novosti te submitajte formu za uređivanje a da ne učinite nikakve izmjene na podacima novosti. Koja poruka vam se javila?

Trebala se javiti poruka „Novost nije izmjenjena“. O čemu se radi. Ukoliko izvršite UPDATE upit u kojem su novi podaci identični onima koji već postoje u tablici unutar tog retka (ili redaka) koji mijenjamo MySQL neće napraviti nikakve izmjene nad tim retkom (ili redcima) tako da mysql_affected_rows() vraća nulu kao rezultat.

Evo nas. Sa ovim primjerom smo završili sa osnovnim znanjem potrebnim za izradu web aplikacija pomoću MySql-a i PHP-a. Istina, znanje koje ste stekli nije dovoljno za neke kompleksnije aplikacije. No prošli smo kroz temelje izrade aplikacija ovakvog tipa. Ostalo nam je samo još bolje se upoznati sa SQL jezikom, posebno njegovim naprednijim opcijama i mogučnostima te vidjeti kako ubacivanje dodatnih, povezanih tablica utječe na izradu aplikacije. I time ćemo se baviti u ostatku vodiča. Ali, prije nego krenemo sa tim predložio bi da sami pokušate napraviti novi dio aplikacije iz gornjih primjera koji će služiti posjetiteljima sitea za čitanje novosti čiji smo administracijski dio upravo napravili.

   



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