traži:  
 php.com.hr > Brisanje podataka

Brisanje podataka
 


Kao i do sada, prije nego li se bacimo na PHP primjer izvedne brisanja podataka prvo ćemo proći kroz osnove SQL upita kojim brišemo podatke.

DELETE FROM tablica

Kao što vidite, sam upit je poprilično jednostavan i lako ga se pamti. U prijevodu gornja naredba znači „Obriši sve iz tablice imena tablica“. No ovo je očito situacija koja će se rijetko događati u nekim realnim skriptama, već se obično radi o brisaju jednog ili manje grupe podataka, te je to brisanje obično uzrokovano direktnom naredbom samog korisnika kroz grafičko sučelje.

U našoj skripti koju gradimo kroz zadnjih par primjera imamo potrebu za brisanjem jedne novosti na osonovi njezinog ID-a. Idemo pogledati kako bi izgledao upit koji obavlja tu operaciju.

DELETE FROM novosti WHERE idnovost=1

Gornji upit će obrisati samo onu novost koja ima idnovost jednak 1. Kao što primjećujete, upoznali smo novu klazulu SQL jezika. Mislim na WHERE klazulu. Where služi za naznačivanje da nakon njega slijede uvijeti pomoću kojih se ograničava skup podataka nad kojima će se obaviti neka operacija. U ovom slučaju smo odabrali skup od jedne novosti koju želimo obrisati. Where se može koristiti i u ostalim vrstama SQL upita, a najčešće se koristi u SELECT upitima, no o upotrebi where-a u njima će biti puno više govora kasnije u ovom poglavlju. Za sada ćemo biti jendostavni te ćemo samo malo preraditi gornji primjer tako da briše sve novosti koje su između dva datuma.

DELETE FROM novosti WHERE datum>='2004-03-01' AND datum <'2004-04-01'

U prijevodu, zadali smo MySql-u da obriše sve novosti iz trećeg mjeseca. Kao što vidite, unutar WHERE klazule je moguće kombinirati više uvijeta koji ograničavaju skup podataka nad kojima se obavlja operacija kombiniranjem logičkim operatorima. Praktički se WHERE može shvatiti kao if u PHP-u koji se obavlja nad svakim retkom tablice. Normalno, nemojte me tu doslovce shvatiti jer se ne radi o tome, ali ilustracije radi se može tako shvatiti.

Također, pomoću DELETE naredbe nije moguće obrisati pojedinu vrijednost unutar nekog polja tablice. Recimo, nije moguće obrisati naslov novosti čiji je idnovst jednak 1. Za to se koristi UPDATE naredba koju ćemo upoznati odmah nakon slijedećeg primjera.

Prije nego krenemo na sam primjer želio bih nešto istaknuti. Pošto mi trenutno radimo vrlo jednostavnu skriptu koja koristi samo jednu tablicu u bazi operacija brisanja je poprilično jednostavna operacija. No ukoliko bi se naš projekt sačinjavao od više, međusobno povezanih tablica morali bi paziti da kada brišemo podatke iz jedne tablice obrišemo ili na naki drugi način ukinemo vezu sa podacima koji su u relaciji sa obrisanim podatkom u ostalim tablicama baze. Kasnije u vodiču ćemo se upoznati sa nekim mehanizmima koji će se sami brinuti o tim problemima za nas, no nerijetka početnička greška je brisati podatke samo iz jedne tablice, dok se vezani podaci ostavljaju neizmjenjeni, što sa vremenom dovodi do narušavanja integriteta podataka, te time sama relacijska baza tj njena podatkovna struktura gubi svoj smisao. No trenutno zaboravite da sam išta rekao, sa ovom problematikom ćete biti upoznati nešto kasnije.

Primjer 4 : Brisanje novosti

Kao što je već rečeno, brisanje novosti ćemo izvesti u istom dokumentu / skripti iz prošlog primjera. Iz tog razloga je ubačeni kod posebno naglašen u donjoj skripti. Nenaznačeni kod je identičan onome iz prošlog primejra, te ga se u objašnjenju primjera nećemo opet doticati.

<html>

<head>

<title>Preglednik novosti</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">

</head>

<body>

<h1>Administracija novosti</h1>

<hr>

<a href="unosvijesti.php">Dodaj novost</a>

<hr>

<?

/*

Funkcija koja pretvara datum iz MySql oblika u obični format

*/

function pretvoriDatum($mysqlDatum)

{

$tmp=explode("-", $mysqlDatum);

$datum=$tmp[2] . "." . $tmp[1] . "." . $tmp[0];

return $datum;

}

include "dbspoj.php";

// 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();

}

}

}

$sql="SELECT idnovost, naslov, datum FROM novosti ORDER BY datum DESC";

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

{

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

die();

}

if (mysql_num_rows($q)==0)

{

echo "Nema novosti";

} else {

?>

<table width="760" border="0" cellpadding="1" cellspacing="1">

<tr>

<td><b>Naslov</b></td>

<td><b>Datum</b></td>

<td><b>Opcije</b></td>

</tr>

<?

while ($redak=mysql_fetch_array($q))

{

?>

<tr>

<td><?=$redak["naslov"]?></td>

<td><?=pretvoriDatum($redak["datum"])?></td>

<td>

<a href="uredivanjenovosti.php? idnovost=<?=$redak["idnovost"]?>">Uredi</a>

<a href="?action=obrisi&idnovost=<?=$redak["idnovost"]?> ">Obriši</a>

</td>

</tr>

<?

}

?>

</table>

<?

}

?>

</body>

</html>

 



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