Analiza zadataka sa vežbi (sa rešenjima)
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>Ne zaboravite da promenljive u php-u moraju da počinju sa $. Ako toga nema onda je u pitanju konstanta.
<?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>";
}
?>
*** 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
<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;
}
?>
*** 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))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!
{ // ovo se radi ako se uspeđno izvrši upit i rezultat smesti u navedenu promenljivu
}
else { // ovo se radi ako nije uspeo upit
}
$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())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:
{
print_r($red[0]);
echo "<br>";
}
while($red = $rezultat->fetch_array())U ovom primeru je svejedno šta se koristi. Izbor je na vama.
{
echo $red[0]."<br>";
}
*** Proverite kako sve to izgleda i kako radi - Reload početne stranice ...
I za kraj: možete da preuzmete arhivu zadatka i da ga proučie kod kuće: a.7z (preuzmi)
Na časovima vežbi se malo razlikuju zadaci po grupama:
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:
Može se menjati izgled svega na stranici, mogućnosti su beskrajne, ....
(Ako želite, možete da koristite i Bootstrap za stilizovanje elemenata)