0.

Ako dosad niste naučili, u nastavku je (skriveno iza dugmeta) vizuelno demonstrirano pokretanje XAMPP, Apache i kako da se radi direktno na lokalnom web serveru:

 


Dalje sledi postupak rešavanja zadatka (uz objašnjenja)

1. Kreiranje konekcije ka web serveru

  • Prvo u index.html, ispod naslova, dodajemo formu u kojoj će da se nalazi podnaslov i dugme tipa submit za slanje podataka iz forme:
   <form action="povezivanje.php">
<h3>Povezivanje na server</h3>
<button type="submit">Poveži se na server</button>
</form>

Akcija u formi je ono što će da se izvrši kada korisnik klikne na dugme!


  • Zatim se kreira novi fajl, povezivanje.php, u kojem se vrši povezivanje na lokalni web server i na njemu na MySQL server. Ako je veza uspešna ispisaće se odgovarajuća poruka, a ako ne uspe, treba da se ispiše u čemu je problem

   <a href="index.html">Povratak na početnu stranicu</a><br>

<?php
$veza = new mysqli("localhost","root","");
if($veza->connect_error)
{
die("Ne mogu povezati server.<br>Greska: ".$veza->connect_error);
}
else
{
echo "<br>Veza uspostavljena<br>";
}
?>
Ne zaboravite da promenljive u php-u moraju da počinju sa $. Ako toga nema onda je u pitanju konstanta.

*** Proverite kako to izgleda - Reload stranice ...


2. Korišćenje konekcije i kreiranje nove baze podataka

  • Ispod prethodne forme dodaćemo drugu formu u koju ćemo da unesemo naziv nove baze koju kreiramo
<form action="kreiranjeBaze.php">
<h3>Kreiraj novu bazu</h3>
<label for="b1">Naziv baze</label>
<input type="text" name="baza" id="b1"><br>
<button type="submit">Kreiraj bazu</button>
</form>
  • Kreiramo fajl kreiranjeBaze.php. Ovde ćemo upotrebiti konekciju koju već imamo, pa ćemo prethodni fajl uključiti pomoću include_once
    <?php
require_once('povezivanje.php');
$baza =$_GET['baza'];
$upit = "CREATE DATABASE $baza ";
if($veza->query($upit))
{
echo "Kreirana je baza '$baza'";
}
else
{
echo "Kreiranje baze nije uspelo '$baza'<br>Razlog: ".$veza->error;
}
?>

S obzirom da se može kreirati proizvoljan broj baza, nema potrebe da se svaki put uključuje povezianje na bazu. Dovoljno je samo jednom. Stoga se koristi verzija requre_once.

U promenljivu $baza se preuzima tekst koji je uneo korisnik u polje koje ime atribut name="baza".

Dodatna objašnjenja:

Ako se ne navede method u tagu form, tada je podrazumevano da je method="get". To znači da se podaci koje je korisnik uneo šalju u super globalnu php promenljivu $_GET kao parovi ključ->vrednost, gde je ključ u stvari name atribut elementa gde se unose podaci, a vrednost je ono što korisnik unese. Na primer, ako je u input polju sa name="baza" korisnik uneo reč kikiriki, to znači da je to poslato kao par "baza"->"kikiriki". Vrednost preuzimamo pristupom super globalnoj promenljivoj, kao asocijativnom nizu, gde se u zagradama nalazi ključ: U našem primeru, naziv baze koji je korisnik uneo preuzimamo sa: $_GET[ 'baza' ]

U promenljivu $upit se postavlja upit koji se koristi. Upit je uvek tipa string. Oko stringa imamo navodnike. Jeste da je u php-u nebitno da li su jednostruki ili dvostruki navodnici, ali.... Samo ako koristite dvostruke navodnike moći ćete unutar njih da navedete neku promenljivu i da se tu ugradi njena vrednost. (Ako biste koristili jednostruke navodnike, to se ne bi desilo)

Upit se izvršava pozivom funkcije query i u zagradama joj se kao parametar daje upit ili promenljiva u kojoj je naš upit - u ovom slučaju.

Kraće upite koji se ne menjaju možete ubaciti i direktno unutar zagrada, naravno sa navodnicima jer je u pitanju string.

Ako se upit izvrši uspešno, ispisaće se poruka, a ako ne uspe, ispisaće se poruka o grešci i tekst koji opisuje poslednju grešku koja se desila.

( Iz pojmova vezanih za Objektno Orijentisano Programiranje znamo da strelica između mysqli i query znači da se za konkretnu instancu objekta mysqli (naša $veza) pristupa njenoj funkciji (query)


*** Proverite kako sve to izgleda i kako radi - Reload početne stranice ...



3. Kreiranje tabele u izabranoj bazi podataka

  • Ispod prethodne forme dodaćemo drugu formu u koju ćemo da unesemo sledeće:
    • labelu i input polje za unos baze u koju se povezujemo
    • labelu i input polje za unos naziva tabele koja se kreira
    • dugme
    Radi jednostavnosti, naša tabela će imati samo-popunjavajuće polje id i polje podatak u koji se unosi tekst
<form action="kreiranjeTabele.php">
<h3>Kreiraj novu tabelu</h3>
<label for="b22">Naziv baze</label>
<input type="text" name="baza2" id="b22"><br>
<label for="tabela">Naziv tabele</label>
<input type="text" name="tabela" id="tabela"><br>
<button type="submit">Kreiraj tabelu</button>
</form>
  • Kreiramo fajl kreiranjeTabele.php. Ovde nećemo upotrebiti onu prvu konekciju, već ćemo je uraditi u fajlu, jer iz polja koje korisnik popunjava možemo da odredimo kojoj se bazi pristupa:
<?php
$baza =$_GET['baza2'];
$tabela =$_GET['tabela'];
$veza = new mysqli("localhost","root","",$baza);

if($veza->connect_error)
{
die("Nema veze sa serverom.<br>Greska: ".$veza->connect_error);
}

$upit = "create table $tabela(id int primary key auto_increment, podatak varchar(50)); ";

if($veza->query($upit))
{
echo "Kreirana je tabela '$tabela'";
}
else
{
echo "Kreiranje tabele '$tabela' nije uspelo <br>Razlog: ".$veza->error;
}
?>
U odnosu na prethodni deo razlika je u tome što se odmah povezuje na određenu bazu - koju korisnik unese, i upit je drugačiji.
Tekst koji se ispisuje je promenjen da bi prikazao poruku koja odgovara zadatku koji se izvršava.
 

*** Proverite kako sve to izgleda i kako radi - Reload početne stranice ...


4. Popunjavanje izabrane tabele podataka podacima

  • Dodati formu u kojoj se korisniku daje na izbor da unese bazu nad kojom radi, tabelu u koju unosu podatak, kao i polje za unos tog (jednog) podatka:
<form action="unos.php">
<h3>Unos podataka u tabelu</h3>
<label for="baza3">Naziv baze</label>
<input type="text" name="baza3" id="baza3"><br>

<label for="tabela3">Naziv tabele</label>
<input type="text" name="tabela3" id="tabela"><br>

<label for="podatak">Podatak koji se unosi</label>
<input type="text" name="podatak" id="podatak"><br>

<button type="submit"> Unesi </button>
</form>
  • Kreiramo fajl unos.php:
<?php
$podatak =$_GET['podatak'];
$baza =$_GET['baza3'];
$tabela =$_GET['tabela3'];
$veza = new mysqli("localhost","root","",$baza);

if($veza->connect_error)
{
die("Nema veze sa serverom.<br>Greska: ".$veza->connect_error);
}

$upit = "INSERT INTO $tabela(podatak) values('$podatak'); ";

if($veza->query($upit))
{
echo "<br>Uspešno uneti podaci";
}
else
{
echo "<br>Nisu uneti podaci <br>Razlog: ".$veza->error;
}
?>

*** Proverite kako sve to izgleda i kako radi - Reload početne stranice ...


5. Prikaz kojih sve baza imamo na serveru:

  • Dodajemo formu u kojoj se traži prikaz spiska svih baza koje imamo na MySQL serveru
<form action="sveBaze.php">
<h3>Koje baze imamo</h3>
<br>
<button type="submit">Prikaži SVE baze</button>
</form>
  • Zatim kreiramo fajl sveBaze.php
<?php
require_once("povezivanje.php");
if($rezultat = $veza->query("SHOW DATABASES"))
{
while($red = $rezultat->fetch_array())
{
print_r($red[0]);
echo "<br>";
}
}
else
{
echo "<br> Nešto ne valja <br> Razlog: ".$veza->error;
}
?>

Dodatna objašnjenja:

Ovde je ponovo upotrebljen php fajl za povezivanje na server baza podataka. Potrebno je samo jednom, pa je zato upotrebljena verzija reqire_once ...

Upit se izvršava sa

      $veza->query("SHOW DATABASES")
Pošto ovaj upit vraća neke podatke, rezultat upita smeštamo u promenljuvu $rezultat.
 
     $rezultat = $veza->query("SHOW DATABASES")
Ako sve to stavimo u if, ..., tada ako se sve to izvrši ok biće izvršeno ono što je unutar bloka naredbi kada je uslov ispunjen.
     if($rezultat = $veza->query($upit))
{ // ovo se radi ako se uspeđno izvrši upit i rezultat smesti u navedenu promenljivu
}
else { // ovo se radi ako nije uspeo upit
}
U else bloku će biti ono što se izvršava ako upit ne može da se izvrši. Najčešća greška je greška u pisanju ispravnog upita. Zato pažnja molim!
 
Ako se upit izvršio uspešno, pa smo kao rezultat dobili sve baze sa servera, na neki način treba i da ih se prikaže.
Iz predmeta Baze podataka zamo da se rezultat upita dobija u obliku određenog broja redova, a u svakom redu je po jedan skup rezultata. Ako smo iz tabele u kojoj se nalaze dve kolone: imena i prezimena učenika tražili ime i prezime, to bi značilo da je u svakom redu po 2 podatka: ime i prezime. Ako se iz tabele koja sadrži ime, prezime i jmbg traži sve to, u svakom redu rezultata se nalaze po 3 podatka: ime, prezime i jmbg.
U našem slučaju imamo onoliko redova u rezultatu koliko imamo baza na serveru. U svakom redu imamo po jedan podatak koji nam treba - naziv baze.
Zbog toga koristimo while petlju u kojoj se preuzima red po red iz rezultata (kao niz elemenata u redu, pa koliko god da ih ima) i prikazuje se vrednost iz prvog elementa iz reda
Preuzimanje reda podataka može da se vrši pomoću
       $rezultat->fetch_array())
Pošto nam treba da čitamo redove iz rezultata dokle god ima šta da se pročita (da bi pročitali sve redove), koristi se sekvenca:
 
  while($red = $rezultat->fetch_array())
{
print_r($red[0]);
echo "<br>";
}
Prikazivanje vrednosti prvog elementa u svakom redu može da se vrši ili ovako, ali može i pomoću echo naredbe koju smo do sada koristili:
  while($red = $rezultat->fetch_array())
{
echo $red[0]."<br>";
}
U ovom primeru je svejedno šta se koristi. Izbor je na vama.
Prva naredba (print_r) može da se koristi i služi za prikaz celih nizova, što echo ne radi

*** Proverite kako sve to izgleda i kako radi - Reload početne stranice ...



I za kraj: možete da preuzmete arhuvu zadatka i da ga proučie kod kuće: a.7z (preuzmi)


U ovim rešenjima nije postavljeno ništa što se odnosi na izgled same stranice, koji se postavlje korišćenjem CSS-a.

S obzirom da je izgled dosta bitan, kao primer možete postaviti da je svaka forma na sredini, sa okvirom, kao na primer:

form
{
    min-height: 50px;
    margin: 5px auto;
    border: 1px solid black;
    border-radius: 10%;
    width: 80%;
}

Može se menjati izgled svega na stranici, mogućnosti su beskrajne, ....

(Ako želite, možete da koristite i Bootstrap za stilizovanje elemenata)

Last modified: Sunday, 2 November 2025, 3:47 PM