NAVIGACIJA |
|||||||||
Primer 1: upiti selekcije sa proverom unosa
Kreirati formular koji ce imati SELECT polje za izbor opcije K_SIF, NASLOV, OBLAST i tekstualno polje za zadavanje niske koja ce
se pretraživati u tabeli K u koloni čiji naziv odgovara polju selekcije. Potom kreirati PHP skript koji će prikazati rezultate pretrage.
<html>
<head>
<title>Pretraga
tabele K</title>
</head>
<body>
<h1>Pretraga
tabele K</h1>
<form
action="p71.php" method="post">
Izaberite kolonu
pretrage:<br />
<select
name="kriterijum">
<option
value="K_SIF">KSIF</option>
<option value="NASLOV">NASLOV</option>
<option
value="OBLAST">OBLAST</option>
</select>
<br />
Unesite nisku po kojoj se
pretrazuje:<br />
<input
name="searchniska" type="text">
<br />
<input
type="submit" value="PRETRAGA">
</form>
</body>
</html>
PHP skript p71.php
#!/usr/local/bin/php
<?php
// promenljive koje sadrze vrednosti sa formulara
$searchtype=$HTTP_POST_VARS['kriterijum'];
$searchterm=$HTTP_POST_VARS['searchniska'];
$searchterm= trim($searchterm); //uklanjanje suvisnih belina koje je korisnik greskom uneo na pocetku ili kraju zahteva
//VAZNO: proveriti da li je posetilac na formularu selektovao kolonu
pretrage i uneo kljuc pretrage
if (!$searchtype || !$searchterm){
echo 'Niste korektno popunili formular. Molimo Vas da ponovo
posetite stranicu sa formularom .';
exit; }
//filtriranje podataka koje je uneo posetilac u slucaju da sadrze prelazne
sekvence \ ' " .... escape_sequence
/*funkcija vraca nisku sa backslash-ovima pre karaktera koji moraju, na primer, biti pod navodnicima u upitu nad bazom,...
To su ('), ("), (\) i NUL (odnosno \0 ili NULL byte).
*/
$searchtype = addslashes($searchtype);
$searchterm = addslashes($searchterm);
/*Filtriranje podataka tipa znakovni niz pre unosa u bazu je pozeljna operacija, jer podatke treba pripremiti pre unosa u bazu. Naime, znaci poput ('), ("), (\) i NUL (odnosno \0 ili NULL byte) mogu izazvati probleme pri upotrebi u upitima, zato sto baza moze da ih protumaci kao upravljacke znake. F-jom addslashes se u izlazne sekvence pretvaraju svi karakteri koji bi u bazi mogli izazvati probleme, te im se doda backslash-a ispred, tako da ih MySQL baza tumaci doslovce, a ne kao kraj ili pocetak upita. To je narocito vazno ako govorimo o napadima tipa SQL injection . Dakle, argument funkcije je znakovni niz, a rezultat je formatiran niz. */
/*uspostavljenje trajne (persistent) veze upotrebom funkcije mysql_pconnect
- ne zatvara se sa mysql_close
mysql_pconnect ce pre pokusaja uspostavljanja veze proveriti da li vec postoji
otvorena veza
ako postoji, iskoristice je i time se ubrzava rad servera, jer uspostavljenje
veze zahteva vreme
trajne veze ipak nisu trajno otvorene ako se PHP izvrsava kao CGI modul, jer
tada svaki poziv PHP skriptu pokrece nov PHP proces, ali
ga i prekida po zavrsetku izvrsenja PHP skripta, tj. zatvara eventualno
otvorenu trajnu vezu*/
@ $db = mysql_pconnect('alas', 'mi05007', 'mi05007sifra');
if (!$db){
echo 'Error: Nije obavljeno
povezivanje sa bazom. Pokusajte ponovo';
exit;
}
//izbor baze
mysql_select_db('mi05007');
//UPIT SELECT
$query = "select * from K where ".$searchtype." like
'%".$searchterm."%'";
//IZVRSAVANJE UPITA
$result = mysql_query($query);
//ISCITAVANJE REZULTATA UPITA, $num_results cuva
vraca broj redova rezultata upita
$num_results = mysql_num_rows($result);
echo '<p>BROJ NADJENIH VRSTA: '.$num_results.'</p>';
//citanje svakog reda iz skupa rezultata i
formiranje asocijativnog niza $row /*Kad se koristi funkcija addslashes, znakovni niz ce u bazu podataka biti smesten s kosim crtama, te
pre koriscenja tog niza treba izbrisati kose crte funkcijom stripslashes. Inace, PHP moze i automatski
da dodaje i brise kose crte upotrebom magicnih navodnika. Ako Vas interesuje, potrazite
objasnjenja u PHP manual-u.
for ($i=0; $i <$num_results; $i++){
$row =
mysql_fetch_array($result);
echo
'<p><strong>'.($i+1).'. Naslov: ';
echo
htmlspecialchars(stripslashes($row['NASLOV']));
Funkcija htmlspecialchars koriste se za kodiranje znakova koji u HTMLu imaju posebno znacenje.
Na primer, podaci koji se obradjuju mogu da sadrze karaktere & ili " ili < ili >, te se upotrebom
funkcije htmlspecialchars eliminisu buduce greske, jer se znaci pretvaraju u odgovarajuce entitete, na primer
< itd. Tako se svaka oznaka koja se moze koristiti u skriptu transformise u bezopasnu grupu karaktera.*/
echo
stripslashes($row['OBLAST']);
echo '<br />KSIF:
'; echo stripslashes($row['K_SIF']); echo '</p>';
}
?>
Primer 2: upiti INSERT sa proverom unosa i izvestajem o broju unosa
Kreirati formular koji ce imati tekstualno polje za unos vrednosti u kolone tabele K: SIFRA, NASLOV, OBLAST. Potom kreirati PHP skript koji će proveriti da li je korisnik uneo vrednosti u formular, realizovati INSERT iskaz u tabeli K i ispisati status unosa.
FORMULAR p72.htm
<html>
<head>
<title>INSERT</title>
</head>
<body>
<h1>UNOS POLJA U TABELU K</h1>
<form action="p72.php"
method="post">
<table border="0">
<tr>
<td>KSIF</td>
<td><input type="text"
name="ksif" maxlength="5" size="3"><br
/></td>
</tr>
<tr>
<td>OBLAST</td>
<td> <input type="text"
name="oblast" maxlength="30" size="30"><br
/></td>
</tr>
<tr>
<td>NASLOV</td>
<td> <input type="text"
name="naslov" maxlength="60"
size="30"><br></td>
</tr>
<tr>
<td colspan="2"><input
type="submit" value="UNESI"></td>
</tr>
</table>
</form>
</body>
</html>
PHP skript p72.php
#!/usr/local/bin/php
<?php
// kreiranje kratkog stila naziva promenljivih formulara
$ksif=$HTTP_POST_VARS['ksif'];
$oblast=$HTTP_POST_VARS['oblast'];
$naslov=$HTTP_POST_VARS['naslov'];
//provera da li je posetilac popunio polja
formulara
if (!$ksif || !$oblast || !$naslov ){
echo 'NISTE POPUNILI SVA POLJA FORMULARA. PONOVITE UNOS.<br />'.'POSETITE
STRANICU SA FORMULAROM.';
exit;}
//filtriranje unetih podataka
formulara
$ksif = addslashes($ksif); $oblast = addslashes($oblast); $naslov =
addslashes($naslov);
//povezivanje
@ $db = mysql_pconnect('alas', 'korisnikmi05007', 'lozinka');
mysql_select_db('bazami05007');
//UPIT, INSERT iskaz
$query = "insert into K values ('".$ksif."',
'".$naslov."', '".$oblast."')";
$result =
mysql_query($query);
//izvestaj o statusu unetog
reda
printf("Broj vrsta unetih u tabelu K: %d\n", mysql_affected_rows());
?>
($rez = mysql_query("SELECT * FROM K");)
sastoji iz n vrsta (n>=7), napisati PHP skript kojim se ispisuje sedmi red rezultata.
<?php
$rezultat = mysql_query("SELECT * FROM K");
mysql_data_seek($rezultat,6); //pozicioniranje na sedmi red
rezultata
$red = mysql_fetch_row($rezultat);
?>
<?php
$rezultat = mysql_query("SELECT K_SIF, P_SIF FROM
KP");
$red =
mysql_fetch_row($rezultat);
print_r( $red);
//stampa 1. red, moze i
echo"<BR>".$red[0].":::".$red[1];
mysql_data_seek($rezultat,
mysql_num_rows($rezultat) - 1); //pozicioniranje na poslednji red
rezultata
$red = mysql_fetch_row($rezultat);
print_r( $red); //stampa
poslednji red
?>
<?php
$x = mysql_query("SELECT * FROM
K");
for ($i=0; $i< mysql_num_fields($x);
$i++)
{
echo
mysql_field_name($x,$i)." : ";
//ispis naziva i-te kolone tabele K i ispis :
}
?>
$_SERVER je niz koji sadrži informacije, kao što su hederi, putanje i lokacije skriptova. Moguci indeksi niza $_SERVER: 'PHP_SELF' - naziv fajla koji se trenutno izvršava, relativno u odnosu na root. 'GATEWAY_INTERFACE' - Koja se verzija CGI specifikacije koristi 'SERVER_ADDR' - IP adresa servera 'SERVER_NAME' - Ime servera 'SERVER_SOFTWARE' - Identifikacioni string servera 'SERVER_PROTOCOL' - ime i verzija protokola preko koga se strana traži, primer 'HTTP/1.0'; 'REQUEST_METHOD' - Korišceni metod. 'GET', 'HEAD', 'POST', 'PUT'. 'REQUEST_TIME' - Vreme pocetka zahteva - PHP 5.1.0. 'QUERY_STRING' - String pristupa strani 'DOCUMENT_ROOT' - Direktorijum u kome se nalazi skript koji se izvršava 'HTTP_ACCEPT' - Heder trenutnog zahteva 'HTTP_ACCEPT_CHARSET' - Sadržaj Accept-Charset. Primer: 'iso-8859-1,*,utf-8'. 'HTTP_ACCEPT_ENCODING' - Sadržaj Accept-Encoding. Primer: 'gzip'. 'HTTP_ACCEPT_LANGUAGE' - Sadržaj Accept-Language. Primer: 'en'. 'HTTP_CONNECTION' - Sadržaj Connection. Primer: 'Keep-Alive'. 'HTTP_HOST' - Sadržaj Host 'HTTP_REFERER' - Adresa strane 'HTTP_USER_AGENT' - Sadržaj User-Agent. Primer Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). 'HTTPS' - Neprazna vrednost ukoliko se skript zahteva preko HTTPS protokola. 'REMOTE_ADDR' - IP adresa korisnika koji pristupa strani. 'REMOTE_HOST' - Host sa koga korisnik pristupa strani. 'REMOTE_PORT' - Port koji se koristi na korisnickoj mašini za pristup web serveru. 'SCRIPT_FILENAME' - Apsolutna putanja skripta koji se izvršava 'SERVER_ADMIN' -Direktive u web server konfiguracionom fajlu. 'SERVER_PORT' - Port na serveru koji se koristi za komunikaciju . 'SERVER_SIGNATURE' - String koji sadrži verziiju servera i ime vrtutelnog hosta 'PATH_TRANSLATED' - Putanja trenutnog skripta u fajl sistemu 'SCRIPT_NAME' - Putanja skripta kojis e iyvršava. Korisno kad želimo da skript uputimo na njega samog. 'PHP_AUTH_USER' - Username kod modula za HTTP identifikaciju kod Apache ili IIS (ISAPI na PHP 5) 'PHP_AUTH_PW' - Password - kod modula za HTTP identifikaciju kod Apache ili IIS (ISAPI na PHP 5) 'AUTH_TYPE' - Tip kod modula za HTTP identifikaciju kod Apache ili IIS (ISAPI na PHP 5) 'PATH_INFO' - Primer: URL http://www.Primer 6. Sta je rezultat rada sledećeg PHP skripta? Zašto?
<html> <head></head> <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> Unesi broj vrsta <input name="redovi" type="text" size="4"> i kolona <input name="kolone" type="text" size="4"> <input type="submit" name="submit" value="Kreiraj"> </form> <?php if ( isset($_POST['submit']) ) { echo "<table width = 90% border = '3' cellspacing = '5' cellpadding = '2'>"; $kolBroj = $_POST['kolone']; $redBroj = $_POST['redovi']; // kreiranje vrsta for ($r = 1; $r <= $redBroj; $r++) { echo "<tr>"; // kreiranje kolona for ($k = 1; $k <= $kolBroj;$k++) { echo "<td> x</td> "; } echo "</tr> "; } echo "</table> "; } ?> </body> </html>