NAVIGACIJA

Naslovna strana - Jelena Grmuša

0

1

2

3

4

5

6

7

Uvod u Web i Internet tehnologije

 

UPITI NAD BAZOM KIP

 

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
for ($i=0; $i <$num_results; $i++){
         $row = mysql_fetch_array($result);
         echo '<p><strong>'.($i+1).'. Naslov: ';
         echo htmlspecialchars(stripslashes($row['NASLOV']));

/*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.

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 &lt; itd. Tako se svaka oznaka koja se moze koristiti u skriptu transformise u bezopasnu grupu karaktera.*/

         echo '</strong><br />Oblast: ';
         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());

?>

 

Primer 3. Ako se rezultat SELECT iskaza nad tabelom K

               ($rez = mysql_query("SELECT * FROM K");)

sastoji iz n vrsta (n>=7), napisati PHP skript kojim se ispisuje sedmi red rezultata.

 

      <?php


     /* dodati poziv funkcija za uspostavljanje veze sa serverom i izbor baze */

              $rezultat = mysql_query("SELECT * FROM K");

               mysql_data_seek($rezultat,6); //pozicioniranje na sedmi red rezultata

               $red = mysql_fetch_row($rezultat);

               print_r( $red);

     ?>

Primer 4. Napisati PHP skript koji ce ispisati prvu i poslednja vrstu tabele KP. Rezultat treba da sadrzi samo vrednosti kolona K_SIF i P_SIF. 

 

       <?php


     /* dodati poziv funkcija za uspostavljanje veze sa serverom i izbor baze */

              $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

     ?>

 

Primer 5. Napisati PHP skript koji ce ispisati nazive kolona tabele K.

 

<?php


     /* dodati poziv funkcija za uspostavljanje veze sa serverom i izbor baze */

$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>