OS Kastanjer
Would you like to react to this message? Create an account in a few clicks or log in to continue.
OS Kastanjer

za sve kojima je pomoc potrebna
 
Početna stranicaPretraľnikLatest imagesRegistracijaLogin

 

 Korištenje baze

Go down 
Autor/icaPoruka
crna-guja
Administrator
Administrator
crna-guja


Broj postova : 187
Age : 30
Lokacija : Pula
Registration date : 04.03.2008

Korištenje baze Empty
PostajNaslov: Korištenje baze   Korištenje baze Icon_minitimečet oľu 06, 2008 9:16 pm

Naša baza će se sada nalaziti na listi ako upišemo naredbu za prikaz svih baza na serveru, ali moramo reći mySQL-u da ćemo sada koristiti tu bazu.

Kod:
mySQL> USE site_vijesti;
Database changed

Nakon obavljanja ove naredbe svi MySQL upiti koje upisujemo u komandnu liniju će se odnositi na izabranu bazu.

Stvaranje tablica:

Sada ćemo stvoriti tablicu u kojoj ćemo raditi. Napraviti ćemo sistem novosti i to će biti jedini dinamički dio ove stranice.
Struktura tablice:
Tablica se sastoji od više polja:

PK (primary key) je polje tablice koje sadrži jedinstvenu vrijednost svakog retka.
Autoincrement- u Mysqlu postoji mehanizam koji svakom novom retku u tablici automatski dodaje novu vrijednost. Polja autoincremet sadrže te vrijednosti.
Naslov- u našem slučaju naslov će biti varchar tipa (ograničen na 150 znakova)
Tekst- tip text (nije ograničen)
Datum- tipa date

Naredba za stvaranje tablice :
Kod:

CREATE TABLE vijesti (
idvijest INT( 11 ) NOT NULL AUTO_INCREMENT ,
naslov VARCHAR( 150 ) NOT NULL ,
tekst TEXT NOT NULL ,
datum DATE NOT NULL ,
PRIMARY KEY ( idvijest )
);


Sada moramo provjeriti jeli tablica stvarno stvorena:

Kod:
mySQL> SHOW TABLES;
+----------------------------+
| Tables_in_site_vijesti |
+----------------------------+
| vijesti |
+----------------------------+
1 row in set (0.01 sec)


Izlazak is shell klijenta::

Kod:
mySQL>quit;
[Vrh] Go down
https://oskastanjer.forumcroatian.com
crna-guja
Administrator
Administrator
crna-guja


Broj postova : 187
Age : 30
Lokacija : Pula
Registration date : 04.03.2008

Korištenje baze Empty
PostajNaslov: Spajanje na MySQL server   Korištenje baze Icon_minitimečet oľu 06, 2008 9:27 pm

Spajanje na MySQL server je prvo što moramo napraviti u skriptama koje ovise o podacima u bazi. Važnost spajanja na MySQL server se može usporediti sa time da moramo prvo pokrenuti računalo da bi mogli npr. surfati internetom na njemu. Zbog toga je važno provjeravati svaki korak da se provjeri jeli operacija uspješno obavljena.

Za naše potrebe koristiti ćemo korisnika root te lozinku koju smo stvorili na početku ovog vodiča. Stvoriti ćemo direktorij na našem lokalnom (HTTP) serveru i u njega ćemo spremati sve naše primjere i kroz njih stvoriti cijelu aplikaciju.

Zbog mogućih razlika u mjestu spremanja različitih servera, nećemo navoditi točne putove do tih direktorija. Također svi primjeri će biti pisani na taj način da vam neće biti potreban nikakav code editor već ćete primjere moći pisati i u notepadu, ali zbog kompliciranosti kodova i za lakše ispravljanje greški preporučamo vam neki code editor.
U svojem web root folderu web servera stvorite direktorij imena PHP i MySQL u kojeg ćemo spremati sve primjere.

Sada ćemo stvoriti file spoj.php te ga pohraniti u gore navedeni direktorij. U njemu će se nalaziti kod koji će se spajati na MySQL server.

Kod:
<?
if (!$db=@mySQL_connect("localhost", "root", "lozinka"))
{
die ("<b>Nismo se mogli spojiti na MySQL server</b>");
}
if (!mySQL_select_db("site_vijesti", $db))
{
die ("<b>Greska pri odabiru baze</b>");
}
?>


Ukoliko ste MySQL funkcijama dali točne podatke rezultat skripte bi trebala biti prazna stranica.

mySQL_connect funkcija - njoj se prosljeđuju tri argumenta: prvi je host na kojem se nalazi server, drugi je korisničko ime s kojim se spajamo na server, a treći lozinka za tog korisnika.
@ - onemogućuje PHP-u da ispisuje greške koje se dogode u naredbi iza njegovog pojavljivanja.
die - funkcija koja ispisuje grešku, u ovom slučaju funkcija će prekinuti izvršavanje skripte ako je spajanje na server bilo neuspješno. Ona će nam također ispisati grešku koja nam govori u kojem je koraku nastala greška.
mySQL_select_db - funkcija koja odabire bazu sa čijim ćemo tablicama raditi. Ima dva argumenta: prvi dobija ime baze koju želimo koristiti, a drugi sadržava spoj na MySQL-ov server gdje se ta baza nalazi. Drugi argument smo pohranili u varijablu $db. Drugi argument nije obavezan, ali naveli smo ga zato što PHP automatski pamti posljednju otvorenu vezu na MySQL server te nju automatski koristi u svim MySQL funkcijama gdje je taj argument izostavljen.

Također, opet je važno provjeravati uspjeh odabira baze jer će se skripta nastaviti obavljati iako je nastala greška. Zbog toga je potrebno prekinuti rad skripte ako je nastala greška.
[Vrh] Go down
https://oskastanjer.forumcroatian.com
crna-guja
Administrator
Administrator
crna-guja


Broj postova : 187
Age : 30
Lokacija : Pula
Registration date : 04.03.2008

Korištenje baze Empty
PostajNaslov: Unos podataka   Korištenje baze Icon_minitimečet oľu 06, 2008 9:32 pm

Unosa podataka u bazu sastoji od dva koraka: prvi je prikupljanje podataka kroz formu, a drugi pohrana tih podataka u bazi.

Za unos podataka koristimo INSERT naredbu.

Kod:
INSERT INTO vijesti (naslov, tekst, datum) VALUES ("Prva vijest ", "Ovo je tekst prve vijesti", "2005-09-12");

Kao što već znate sve SQL naredbe počinju nazivom naredbe. Nakon toga smo koristili INTO prije imena tablice u koju želimo pohraniti podatke. Također, važno je napomenuti da su imena baza, tablica i polja osjetljiva na veličinu slova (case sensitive).
VALUES- njome naznačujemo da slijedi lista vrijednosti koja se pohranjuje u tablicu.

Važno je opaziti neuobičajen način pisanja datuma. Format slovima bi bio GGGG-MM-DD i zbog toga datum mora biti ispravnog oblika jer datum 1989-12-9 neće proći zbog toga što datumu nedostaje druga znamenka: nula. Ovo pravilo isto vrijedi i za mjesece.

Forma za unos podataka:

Kod:
<html>
<head>
<title>Unos vijesti</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<body>
<h1>Unos vijesti</h1>
<hr>
<?
if (!$_POST["SBunos"])
{
?>
<form method="post" action="">
Naslov : <input type="text" name="naslov"><br />
Tekst :  <textarea name="tekst"></textarea><br />
<input type="submit" name="SBunos" value="Pohrani">
</form>
<?
} else {
include "spoj.php";
$datum=date("Y-m-d");
$SQL="INSERT INTO vijesti (naslov, tekst, datum)
VALUES ('$_POST[naslov]', '$_POST[tekst]', '$datum')";
if (mysql_query($SQL))
{
echo "Novost je uspješno pohranjena";
} else {
echo "Novost nije pohranjena"<br />" . mysql_error();
}
}
?>
</body>
</html>


Važno:

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

-ovo je kodna stranica našeg dokumenta (encoding). Važno je da koristite uvijek jedan isti encoding kroz sve dokumente projekta da bi izbjegli probleme.

mysql_query() -funkcija prima dva argumenta: prvi je string podatak koji je obavezan i sadrži neki upit, dok je drugi neobavezan. Kod INSERT upita ova funkcija vraća true ako je uspješan obavljen ili false ako nije uspješno obavljen. Ako nije uspješno obavljen moguće su greške:
-sintaktičke prirode: nešto je krivo napisano u samom SQL upitu
-tehničke prirode: nešto se dogodilo sa MySQL serverom ili vezom na njega ili je korisnik u formu upisao neki nedozvoljen znak.

mysql_error() -funkcija pomoću koje ispisujemo grešku.
[Vrh] Go down
https://oskastanjer.forumcroatian.com
crna-guja
Administrator
Administrator
crna-guja


Broj postova : 187
Age : 30
Lokacija : Pula
Registration date : 04.03.2008

Korištenje baze Empty
PostajNaslov: Brisanje podataka   Korištenje baze Icon_minitimečet oľu 06, 2008 9:33 pm

Ovim upitom brišemo podatke:
DELETE FROM tablica

Sada ćemo pokazati kako ćemo obrisati neku vijest ,koju smo već napravili , na osnovi njezinog ID-a:

Kod:
DELETE FROM vijesti WHERE idvijesti=1

WHERE- služi za naznačivanje da nakon njega slijede uvjeti pomoću kojih određujemo (ograničavamo) skup podataka nad kojima će se obaviti neka operacija.

Sada ćemo napraviti upit koji će izbrisati sve vijesti između dva datuma:

Kod:
DELETE FROM vijesti WHERE datum>='2005-11-11' AND datum <'2005-12-01'

Brisanje vijesti:

Kod:
<html>
<head>
<title>Preglednik vijesti</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<body>
<h1>Administracija vijesti</h1>
<hr>
<a href="unos.php">Dodaj novost</a>
<hr>
<?
function pretvoriDatum($mysqlDatum)
{
$tmp=explode("-", $mysqlDatum);
$datum=$tmp[2] . "." . $tmp[1] . "." . $tmp[0];
return $datum;
}
include "spoj.php";
// brisanje vijesti
if ($_GET["action"]=="obrisi")
{
if ($_GET["idvijesti"])
{
$sql="DELETE FROM vijesti WHERE idvijesti=" . $_GET["idvijesti"];
if (mysql_query($sql))
{
echo "Novost je uspješno obrisana";
} else {
echo "Nastala je greška pri brisanju vijesti<br />" . mysql_error();
}
}
}
$sql="SELECT idvijesti, naslov, datum FROM vijesti 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 vijesti";
} 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="uredivanjevijesti.php? idvijesti=<?=$redak["idvijesti"]?>">Uredi</a>
<a href="?action=obrisi&idvijesti=<?=$redak["idvijesti"]?> ">Obriši</a>
</td>
</tr>
<?
}
?>
</table>
<?
}
?>
</body>
</html>


Prije nego što obavljamo samo brisanje moramo provjeriti da li su ispunjeni svi uvjeti za obavljanje brisanja. Nakon toga moramo provjeriti ID vijesti kojeg želimo obrisati. Nakon provjere tih uvjeta prešli smo na samo brisanje:


Kod:
$sql="DELETE FROM vijesti WHERE idvijesti=" . $_GET["idvijesti"];
if (mysql_query($sql))
{
echo "Novost je uspješno obrisana";
} else {
echo "Nastala je greška pri brisanju vijesti<br />" . mysql_error();
}


Ako je funkcija mysql_query() vratio true novost je obrisana a ako je vratio false znači da je nastala neka greška koju će nam funkcija mysql_error() opisati.

Ako želimo provjeriti je li stvarno vijest obrisana koristiti ćemo mysql_affected_rows () funkciju. Ona vraća broj redaka koji su bili zahvaćeni posljednjom operacijom i ona se može koristiti samo nakon sljedećih upita: DELETE, UPDATE i INSERT

Sada ćemo tu funkciju staviti u našu skriptu:

Kod:
$sql="DELETE FROM vijesti WHERE idvijesti=" . $_GET["idvijesti"];
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 vijesti<br />" . mysql_error();
}

Sada smo dodali još jednu provjeru koja ispituje dali je broj obrisanih redaka veći od nule.


NASTAVAK SLIJEDI
[Vrh] Go down
https://oskastanjer.forumcroatian.com
crna-guja
Administrator
Administrator
crna-guja


Broj postova : 187
Age : 30
Lokacija : Pula
Registration date : 04.03.2008

Korištenje baze Empty
PostajNaslov: Pribavljanje podataka   Korištenje baze Icon_minitimepon oľu 10, 2008 8:42 pm

Upit koji pribavlja sve retke iz jedne tablice:

Kod:
SELECT * FROM vijesti


* Zvjezdica je skraćenica koja govori da želimo pribaviti sva polja iz navedenih tablica.
FROM govori da slijedi lista tablica iz kojih se podaci pribavljaju.

Ovo su svi obavezni dijelovi svakog SQL SELECT upita.

Otvorite mysql shell klijent i obavite SQL SELECT upit. Rezultat bi trebao izgledati otprilike ovako:

Kod:
mysql> SELECT * FROM vijesti;

+----------+--------+-------+--------+

| idvijesti | naslov | tekst | datum |

+----------+--- ----+-------+--------+

| 1 | Prva novost | Ovo je tekst prve vijesti. | 2005-09-12 |

| 2 | Druga novost | Ovo je tekst druge vijesti.| 2005-09-14 |

+----------+--- ----+-------+--------+

2 rows in set (0.01 sec)


Rezultat ovog našeg upita izgleda kao da nije sortiran niti po jednom polju, no retci su vraćenipo redosljedu upisa u bazu što znači da su sortirani po datumu unosa od manjeg prema većeg.

Sada ćemo sortirati prema datumu od najvećeg datuma prema najmanjem:

Kod:
SELECT * FROM vijesti ORDER BY datum DESC


Da bi sortirali rezultate upita dodajemo mu ORDER BY klauzulu u ovom slučaju na njegov kraj.

ORDER BY- pomoću ove klauzule sortiramo rezultate upita. Ovaj upit mora biti popraćen imenima polja po kojima želimo sortirati rezultat te način sortiranja (DESC ili ASC). U našem slučaju radi se o polju datum i DESC načinom (decending).

Sada ćemo izraditi administracijski alat sistema vijesti. To će zapravo biti stranica na kojoj će se nalaziti lista svih vijesti iz tablice sa popratnim alatima kao što su linkovi za brisanje i uređivanje pojedine vijseti ....

Preglednik vijesti

Ovo je još jedan dio našeg sitea. Otvorite code editor te stvorite novi file imenom pregled.php i spremite ga u isti direktorij gdje se nalaze spoj.php i unos.php.
Kod:

<html>
<head>
<title>Preglednik vijesti</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<body>
<h1>Administracija vijesti</h1>
<hr>
<a href="unos.php">Dodaj novost</a>
<hr>
<?
function pretvoriDatum($mysqlDatum)
{
$tmp=explode("-", $mysqlDatum);
$datum=$tmp[2] . "." . $tmp[1] . "." . $tmp[0];
return $datum;
}
include "spoj.php";
$sql="SELECT idvijesti, naslov, datum FROM vijesti 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 vijesti";
} 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="uredivanjevijesti.php? idvijesti=<?=$redak["idvijesti"]?>">Uredi</a>
<a href="?action=obrisi&idvijesti=<?=$redak["idvijesti"]?> ">Obriši</a>
</td>
</tr>
<?
}
?>
</table>
<?
}
?>
</body>
</html>


Ova funkcija pretvara MySql datum u datum kojeg smo navikli gledati:

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


ova funkcija pretvara MySQL-ov datum u onog kojeg smo navikli.

return $datum; vraća danu vrijednost u glavni program tako da se ta vrijednost kasnije može koristiti u skripti.

mysql_num_rows() je funkcija koja obavlja samu provjeru postoji li rezultat za pikaz. Ova funkcija je korisna zato što mysql_query funkcija neće vratiti false ukoliko upit nije vratio niti jedan rezultat dok će ova funkcija na svoj način provjeriti ono što mysql_query funkcija ne provjerava, a to je ima li rezultata za prika, te ako ih nema poduzeti odgovarajuće korake da se korisnik obavijesti o tome.

Mysql_fetch_array() funkcija vraća redak kao niz koji se sastoji od svih polja rezultata s tim da je svako polje indeksirano brojem i svojim imenom.

Mysql_fetch_row() također vraća niz, sa tom razlikom da u njemu postoje samo numerički indeksi.

Mysql_fetch_assoc() isto vraća niz, no u njemu se nalaze samo tekstualno indeksirana polja.

Kod:
<a href="uredivanjevijesti.php? idvijesti=<?=$redak["idvijesti"]?>">Uredi</a>

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


Sa ovim iznad korisniku nudimo dvije moguće opcije: Brisanje i uređivanje pojedine vijesti.
[Vrh] Go down
https://oskastanjer.forumcroatian.com
crna-guja
Administrator
Administrator
crna-guja


Broj postova : 187
Age : 30
Lokacija : Pula
Registration date : 04.03.2008

Korištenje baze Empty
PostajNaslov: Uređivanje podataka   Korištenje baze Icon_minitimepon oľu 10, 2008 8:44 pm

Upoznali smo se prošli put sa SELECT naredbom te smo naučili kako prihvatiti sve retke jedne tablice te kako ih sortirati. Sada ćemo vidjeti kako točno izabrati određene retke tablice.

WHERE klauzula je jedna od klauzula SELECT upita. S njome ćemo izdvojiti skup podataka iz tablice.

Kod:
SELECT * FROM vijesti WHERE idvijesti=1

Ovime smo pribavili sva polja vijesti čiji je ID jednak jedan.

Također unutar ove klauzule možemo kombinirati veći broj uvjeta spojenih sa logičkim funkcijama kao što su AND, OR, NOT i ostale.

Ako hoćemo izmjeniti podatke koristiti ćemo UPDATE naredbu.

Kod:
UPDATE vijesti SET naslov="neki naslov"


Sada kada bi htjeli ukomponirati WHERE klauzulu sa UPDATE naredbom to bi izgledalo otprilike ovako:


Kod:
UPDATE vijesti SET naslov="neki naslov", datum="2005-09-12" WHERE idvijesti=1

Ovim upitom smo izmijenili naslov upisa vijesti koja ima ID jednak jedan.

Izmjena vijesti

Kod:

<html>
<head>
<title>Uređivanje vijesti</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<body>
<b>Uređivanje vijesti</b>
<hr>
<?
include "spoj.php";
if (!$_POST["SBuredi"])
{
$err=false;
if (!$_GET["idvijesti"])
{
echo "Nepotpuni ulazni podaci";
$err=true;
} else {
$sql="SELECT * FROM vijesti WHERE idvijesti=" . $_GET["idvijesti"];
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 "Nema takve novosti";
$err=true;
} else {
$novost=mysql_fetch_array($q);
}
}
if (!$err)
{
?>
<form method="post" action="">
<input type="hidden" name="idvijesti" value="<?=$_GET["idvijesti"]?>">
Naslov : <input type="text" name="naslov" value="<?=$novost["naslov"]?>"><br />
Tekst : <textarea name="tekst"><?=$novost["tekst"]?></textarea><br />
<input type="submit" name="SBuredi" value="Pohrani">
</form>
<?
}
} else {
$sql="UPDATE vijesti SET naslov='". $_POST["naslov"] ."', tekst='".$_POST["tekst"] ."' WHERE idvijesti=". $_POST["idvijesti"];
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 vijesti<br />" . mysql_error();
}
}
?>
</body>
</html>

$err - varijabla koja nam služi kao "zastavica" koja govori da li su podaci uspješno pribavljeni iz baze te da li je sigurno prikazati formu. Ako je zastavica dignuta ($err=true) nešto ne valja te formu ne prikazujemo. Ako je spuštena ($err=false) sve je u redu. Na početku skripte moramo stvoriti zastavicu u spuštenom stanju jer na početku skripte još nije ništa krivo.
[Vrh] Go down
https://oskastanjer.forumcroatian.com
Sponsored content





Korištenje baze Empty
PostajNaslov: Re: Korištenje baze   Korištenje baze Icon_minitime

[Vrh] Go down
 
Korištenje baze
[Vrh] 
Stranica 1 / 1.

Permissions in this forum:Ne moľeą odgovarati na postove.
OS Kastanjer :: Programski jezici :: SQL i ostale baze podataka-
Forum(o)Bir: