Esimerkkejä php-ohjelmista

Ohjelmat käytettävissä url:n http://db.cs.helsinki.fi/~laine/php/OHJELMA kautta, missä OHJELMA on php-sivun nimi. Osalle ohjelmista voidaan antaa kutsuparametreja.

pcount.php

Tämä ohjelma listaa saamansa kutsuparametrien arvot. Kutsu voidaan tehdä joko get- tai post medodilla.
Testilomake p1:
C1
C2
C3

Lomakkeen lähdekoodi

<form name ="f1" method="post" action="http://db.cs.helsinki.fi/~laine/php/pcount.php">
<fieldset>
<legend>Testilomake</legend>
p1: <input type="text" name="p1" value="yksi" />
<input type="checkbox" name="cb[]" value="c1" />C1<br/>
<input type="checkbox" name="cb[]" value="c2" />C2<br/>
<input type="checkbox" name="cb[]" value="c3" />C3<br/>
</fieldset>
<input type="submit" name="sub1" value="Lähetä" />
<input type="button" value="Tyhjennä lomake" /> 
</form>

Ohjelma pcount.php

#!/usr/local/bin/php
<!doctype html public "-//W3C//DTD HTML 4.01//EN">
<html>
  <head>
    <title>Parametrilistaus</title>
  </head>
  <body>
    <h2>Parametrilistaus</h2>
    <?php $counter=0; ?>
    <p>
    <?php
        foreach ($_REQUEST as $param => $value) {
          if (is_array($value)) {
             foreach ($value as $ind => $val) {
               echo "$param [$ind] = $val<br>";  
               $counter++;
             }
          }
          else {
            echo "$param = $value<br>";
            $counter++;
          }
        }
    ?>
    <p></p>
    <p>
    <?php echo "Yhteensä: $counter parametria." ?>
    </p>
  </body>
</html>

Sivua voi kutsua myös get metodilla:
http://db.cs.helsinki.fi/~laine/php/pcount.php?yksi=1&kaksi=2

psuper.php

Tämän sivun avulla voidaan tutkia globaalien taulukoiden sisältöä. Parametrina var annetaan muuttujanimi php:n mukaisena esim $_GET.

Sivun lähdekoodi

#!/usr/local/bin/php
<!doctype html public "-//W3C//DTD HTML 4.01//EN">
<html>
  <head>
    <title>Globaalin taulukon listaus</title>
  </head>
  <body>
    <h2>Globaalin taulukon listaus</h2>
      <?php $counter=0; ?>
    <p>
    <?php
        if ($_GET["var"]) {
          $varname=substr($_GET["var"],1);
          echo "<h3>\${$varname}</h3>"; 
                // $-merkki vakiona
                // perään muuttujan nimi
          if (empty($$varname)||!is_array($$varname)) {
            echo "Tämän nimistä taulukkoa ei ole!";
              // $$varname : muuttujan $varname ilmoittaman
              //             muuttujan arvo
          }
          else {
            foreach ($$varname as $param => $value) {
              echo "$param = $value<br>";
              $counter++;
            }
          }
        }
        else {
          echo "Anna tulostettavan taulukon nimi parametrina var";
        }

    ?>
    <hr>
    <p>
    <?php echo "Yhteensä: $counter elementtiä." ?>
    </p>
  </body>
</html>

esim_cf.php

Ohjelma lukee parametrina file annetun konfiguraatiotiedoston ja listaa sen sisältämt konfiguraatiotiedot , mutta ei kommentteja.
#!/usr/local/bin/php
<!doctype html public "-//W3C//DTD HTML 4.01//EN">
<html>
  <head>
    <title>Configuration file printing</title>
  </head>
  <Configuration parameters</h1>
    <?php
      if ($_GET["file"]) {
        $cfile = $_GET["file"];
        $comment = "#";
        $counter = 0;

        if (!($fp = fopen($cfile, "r"))) {   // avataan tiedosto
           die("Could not open file $cfile");
        }
        else {
          while (!feof($fp)) {               //kunnes loppuu
            $line = trim(fgets($fp));        // luetaan seuraava rivi
                                             // tyhjät pois
            if ($line && !ereg("^$comment", $line)) { // ei kommentti
              $pieces = explode("=", $line);  //jaetaan '=' erottamiin pätkiin
              $option = trim($pieces[0]);     //ensimmäinen
              $value = trim($pieces[1]);      //toinen
              $config_values[$option] = $value; //viedään taulukkoon
              $counter++;
            }
          }
          fclose($fp);                       //suljetaan tiedosto
          if ($counter==0) {
            echo "<p>No configuration parameters</p>";
          }
          else {                             // tulostetaan taulukkoon
            echo "<table border=\"1\">";
            foreach ($config_values as $key=>$val)
              echo "<tr><td>$key</td><td>$val</td></tr>";
            echo "</table>";
          }
        }
      }
      else {
          echo "<p>No file specified</p>";
      }
     ?>

    <table>
  </body>
</html>

Tiedoston parfile.ini sisältö on:

# This is an example file
email=Harri.Laine@cs.helsinki.fi
name=Harri Laine 
address=PL26, 00014 University of Helsinki

Ei kokeiltavissa

lomake.php

Aiemmin kurssilla esillä ollut lomake-esimerkki toteutettuna php:llä. Sama php-tiedosto luo ja käsittelee lomakkeen. Käsittelyyn sisältyy tässä tapauksessa vain joitain virhetarkastuksia ja virheistä ilmoittaminen. Lomakkeen tietoja ei tallenneta.

Ohjelma

#!/usr/local/bin/php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title> Digitaalisen median tekniikat, kevät 2004, lomake-esimerkki php</title>
<style type="text/css" media="all">
<!--
  .virhe {color:red; 
          font-weight:bold;
  }
-->
</style>
</head>
<?php 
   // globaaleja taulukoita
   $keino= array ('tahko','taltta','jyrsin','kivi','vitsi');
   $htapa= array (1=> 'tilata huoltomies', 2=>'ostaa uusi', 3=>'ei mitään');
   $tyls= array (1=>'olematon',2=>'vähäinen',3=>'kohtalainen', 
          4=>'merkittävä',5=>'täydellinen');
   
   if ($lomake=$_GET['submit']) {      // nappia vastaava parametri löytyy
                                       // on siis tultu lomakkeen kautta
                                       // Tarkastetaan lomake
       if (!$_GET['tyyppi'] or strlen($_GET['tyyppi'])==0) {
          $err['tyyppi']=TRUE;
          $ms['tyyppi']='Tyyppi on annettava';
          $errors=TRUE;
       }
       if (!$_GET['malli'] or strlen($_GET['malli'])==0) {
          $err['malli']=TRUE;
          $ms['malli']='Tyyppi on annettava';
          $errors=TRUE;
       }            
       if (!$_GET['poisto']) {
          $err['poisto']=TRUE;
          $ms['poisto']='Vähintään yksi keino valittava';
          $errors=TRUE;
       }
       if ($_GET['hoito']==0) {
          $err['hoito']=TRUE;
          $ms['hoito']='Valitse jokin tapa.';
          $errors=TRUE;
       }
                                         // Tarkastettu
    }
?>                                   
<body>
<?php 
   if ($lomake && !$errors) {   // lomake oli kunnossa
                                        // tuotetaan palautesivu
      echo "<h2>Kiitos palautteestasi!</h2>";
      echo "<p>Palautteesi sisältö oli seuraava: <p>";
      echo "<div style=\"margin-left:2em\">";
      echo "<p>Kohteen tyyppi: $_GET[tyyppi] ja malli: $_GET[malli]<br/>";

      $tt=$_GET['tylsyys'];
      $tv=$tyls[$tt];
      echo "Tylsyys: $tv<br/>";

      echo "Ratkaisumahdollisuudet: ";
      foreach ($_GET['poisto'] as $tapa) {
          if ($ennen) {
             echo ", ";
          }   
          echo "$tapa";
          $ennen=TRUE;
      }
      echo "<br/>";
      $hoitotapa= $htapa[$_GET['hoito']];
      echo "Mitä pitäisi tehdä: $hoitotapa<br/>";
      echo "Kommentti: $_GET[muuten]</p>";
      echo "<form name=\"t0\" action=\"$_SERVER[PHP_SELF]\">";
      echo "<input type=\"hidden\" name=\"tyyppi\" value=\"$_GET[tyyppi]\" />";
      echo "<input type=\"hidden\" name=\"malli\" value=\"$_GET[malli]\" />";
      foreach($_GET['poisto'] as $pp) {
         echo "<input type=\"hidden\" name=\"poisto[]\" value=\"$pp\" />";
      }
      echo "<input type=\"hidden\" name=\"hoito\" value=\"$_GET[hoito]\" />";
      echo "<input type=\"hidden\" name=\"muuten\" value=\"$_GET[muuten]\" />";
      echo "<p><input type=\"submit\" value=\"Muuta palautettasi\" /></div>";
      echo "</form></body></html>";
      return;

   }   
   ?>
  
   <form name="lomake" method="GET" action="<?php echo $_SERVER['PHP_SELF'];?>">
   <h2>PHP-lomake  </h2>
   <h3>
   <?php
     if ($errors) {
       echo "<p class=\"virhe\">Lomakkeella oli puutteita. 
                Korjaa merkityt kohdat ja lähetä uudelleen.</p>";   
   }
 ?>
 </h3>
   <fieldset>
   <legend>Kohdetiedot</legend>
    <p>
    <table>
    <tr><td>Tyyppi:</td>  
    <td><input type="text" name="tyyppi" size="40" maxlength="60" 
        value="<?php echo $_GET['tyyppi'];?>" /></td>
    <td class="virhe"><?php if ($err['tyyppi']) 
          echo $ms[tyyppi];?></td></tr>
    <tr><td>Malli: </td>   
    <td><input type="text" name="malli"  size="40" maxlength="60" 
          value="<?php echo $_GET['malli'];?>" /> </td>
    <td class="virhe"><?php if ($err['malli']) echo $ms[malli];?></td>
    </tr>
    </table>
    </p>
    </fieldset>
    <fieldset>
    <legend>Tylsyys</legend>
     <p>Arvioi kohteen tylsyyttä asteikolla 1(terävä) - 5 (tosi tylsä)<br />
     <?php 
         if (!$_GET['tylsyys'])
            $tylsa="3";
         else
            $tylsa= $_GET['tylsyys'];
     ?>    
     1: <input type="radio" name="tylsyys" value="1" <?php if ($tylsa=="1") 
           echo "checked=\"checked\"";?> />
  <input type="radio" name="tylsyys" value="2" <?php if ($tylsa=="2") 
           echo "checked=\"checked\"";?>/>
  <input type="radio" name="tylsyys" value="3" <?php if ($tylsa=="3") 
           echo "checked=\"checked\"";?>/>
<input type="radio" name="tylsyys" value="4" <?php if ($tylsa=="4") 
          echo "checked=\"checked\"";?>/>
<input type="radio" name="tylsyys" value="5" <?php if ($tylsa=="5") 
          echo "checked=\"checked\"";?>/> 5
</p>
<p>Mikä poistaisi tylsyyden? 
<?php if ($err['poisto']) echo "<span class=\"virhe\">$ms[poisto]</span>";?> 
<br/>
<?php
    $pkeino=$_GET['poisto']; 
    foreach ($keino as $k) {
      echo "<input type=\"checkbox\" name=\"poisto[]\" value=\"$k\" ";
      if ($pkeino && in_array($k, $pkeino)) 
           echo "checked=\"checked\"";
      echo " /> $k <br />";
}
?>
</p>
<p>Mitä pitäisi tehdä: 
<select name="hoito" size=1>
<option value="0">Valitse jokin</option>
<option value="1" <?php if ($_GET['hoito']=="1") 
        echo "selected=\"selected\"";?>><?php echo $htapa[1];?></option>
<option value="2"<?php if ($_GET['hoito']=="2")
        echo "selected=\"selected\"";?>><?php echo $htapa[2];?></option>
<option value="3"<?php if ($_GET['hoito']=="3") 
        echo "selected=\"selected\"";?>><?php echo $htapa[3];?></option>
</select>
<?php if ($err['hoito']) echo "<span class=\"virhe\"> $ms[hoito]</span>";?>
 </p>
<p> </p>
</fieldset>

<p>Muuten olen sitä mieltä, että:<br/>
<textarea name="muuten" cols="60" rows="5">
<?php echo $_GET['muuten'];?>
</textarea>
</p>
<hr>
<input type="submit" name="submit" value="Lähetä" />
<input type="reset" value="Tyhjennä" />
<button type="button" value="Painele tätä" 
         onclick="alert('kivaa!');">Painele tätä huviksesi</button>
</form>
</body>
</html> 

Monivalintatehtävät - XML:n käsittely

Seuraava php-ohjelma hoitaa monivalintatehtävien esittämisen ja tarkistuksen. Ohjelma lukee tehtävämäärittelyn XML-muotoisesta tehtävätiedostosta. Ohjelmaa on käytetty kursseilla Tietokoneeen toiminta ja Tietokantojen perusteet. Esimerkkitehtävä ja tehtävän määrittelytiedosto:

<?xml version="1.0" encoding="ISO-8859-1" standalone='yes'?> 
<task id="Tikape045" type="singleselection" language="en" author="Harri Laine">
<course>Introduction to Databases</course>
<topic>Relational algebra</topic>
<question>Consider the relation 
<br/><tt>PizzaPrice (<u>Id</u>, Name, price, description)</tt> with 25 tuples.
How many tuples are in the selection result if the condition is <i>Id=12</i>?
</question>
<selection iscorrect="Maybe">
<answer>1</answer>
<explanation>This may be true, but not always.</explanation>
</selection>
<selection iscorrect="True">
<answer>0 or 1</answer>
<explanation>At most 1 hit.</explanation>
</selection>
<selection iscorrect="False">
<answer>anything between 0 and 25</answer> 
<explanation>Id is the key of the relation.</explanation>
</selection>
</task>

Ohjelman toteutusidea:

Ohjelma käyttää SAX-jäsentäjää XML:n jäsentämiseen. SAX perustuu takaisinkutsuihin (callback). Tätä varten on määritelty 3 funktiota startElement, endElement ja characterData. SAX jäsentäjä kutsuu näitä, kun elementin alkutagi, elementin lopputagi tai dataelementin osa on saatu jäsennettyä tiedostoa läpikäytäessä. Tiedostoa luetaan pätkinä ja annetaan luettu osa SAX:lle analysoitavaksi.

Ohjelma pitää kirjaa käsiteltävistä elementeistä kokoamalla muuttujaan curTag hierarkkista polkua, joka kertoo missä elementissä ollaan.
curTag voisi olla esim´.: TASK^SELECTION^ANSWER

#!/usr/local/bin/php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<!-- Ohjelma tuottaa kysymyslomakkeen lukemalla 
     kysymyksen tiedot xml-rakenteisesta tiedostosta. 
     Kysymyksen perustiedot tallennetaan taulukkoon 
       basicData (alkiot COURSE, QUESTION, ja TOPIC).
     Vastausvaihtoehdot luetaan taulukkoihin: 
     choices[no]['ANSWER']    = vaihtoehdon teksti
     choices[no]['CORRECTNESS']    = Oikein/Väärin
     choices[no]['EXPLANATION'] = vaihtoehdon palaute
   

     Ohjelmalle annetaan parametrina 'file' xml-tiedoston nimi.
     ja parametrina 'style' käytettävän tyylitiedoston nimi.
     Ellei tyylitiedostoa anneta käytetään asennushakemiston
     tiedostoa default.css. Parametrilla 'answer' välitetään vastaus. 
     
     Php-tiedostot luodaan laitoksen db.cs.helsinki.fi palvelimelle 
     esimerkiksi hakemistoon public_html/php. Kyseisen hakemiston 
     .htaccess tiedostossa tulee olla rivi "AddHandler cgi-script php"  
     php-scriptien tulkitsemista varten. 
-->


<?php


// multilanguage support
$correctMessage ["True"]["fi"] = "Oikein.";
$correctMessage ["False"]["fi"] = "Vastaus ei ollut oikein. ";
$correctMessage ["True"]["en"] = "Correct. ";
$correctMessage ["False"]["en"] =  "Sorry, your answer was not correct. ";
$correctMessage ["Maybe"]["fi"] = "Tämä on mahdollista. ";
$correctMessage ["Maybe"]["en"]= "This is possible. ";
$okButton["fi"] = "  Valmis  ";
$okButton["en"] = "    OK    ";

function startElement($parser, $name, $attrs) {  
global $curTag, $curChoice, $language, $taskType, $basicData, $choices;
// Muuttujaan curTag kootaan elementtihierarkiaa kuvaavaa polkua,
//   elementtinimet erotetaan väkäsellä
// curChoice on vastausvaihtoehdon numero
 
   switch ($name) {
      case 'ANSWER':
      case 'COURSE':
      case 'EXPLANATION':
      case 'QUESTION':
      case 'TOPIC':
         $curTag .="^$name";
         break;
      case "TASK":
         $curTag .="^$name";
         if ($attrs['LANGUAGE']) {
            $language= $attrs['LANGUAGE'];
         }
         if ($attrs['TYPE']) {
            $taskType= $attrs['TYPE'];
         }
         break;
      case "SELECTION":
         $curTag .="^$name";
         if ($attrs['ISCORRECT']) {
            $choices[$curChoice]["CORRECTNESS"] = $attrs['ISCORRECT'];
         }
         break;
      default:
         // pääelementtien sisällä olevien alielementtien alkutagien käsittely:
         // tag liitetään käsittelyssä olevan pääelementin arvoon
         $caretPos = strrpos($curTag,'^');
         $leafName = substr($curTag,$caretPos+1);
         if ($leafName=='QUESTION') {
            if ($basicData[$leafName]) {
               $basicData[$leafName] .= "<$name";
            } else {
               $basicData[$leafName] = "<$name";
            }
         } elseif ($leafName=="ANSWER" || $leafName=="EXPLANATION") {
            if ($choices [$curChoice][$leafName]) {
               $choices [$curChoice][$leafName] .= "<$name";
            } else {
               $choices [$curChoice][$leafName] = "<$name";
            }
         }
         // attributes
         while (list ($key, $val) = each ($attrs)) {
            $attribute = " $key = \"$val\"";
            if ($leafName=="QUESTION") {
               $basicData[$leafName] .= $attribute;
            } elseif ($leafName=="ANSWER" || $leafName=="EXPLANATION") {
               $choices [$curChoice][$leafName] .= $attribute;
            }
         }
         if ($leafName=="QUESTION") {
            $basicData[$leafName] .= ">";
         } elseif ($leafName=="ANSWER" || $leafName=="EXPLANATION") {
            $choices [$curChoice][$leafName] .= ">";
         } 
         
   }

}

function endElement($parser, $name) {
   global $curTag, $curChoice, $basicData, $choices;
   $caretPos = strrpos($curTag,'^');
   $leafName= substr($curTag,$caretPos+1);
   if ($name=="SELECTION") {
      // vaihtoehdon päättyessä kasvatetaan vaihtoehtolaskuria
      $curChoice++;
   }

   if ($name==$leafName) {
      $curTag= substr($curTag,0,$caretPos);
      // pääelementin päättyessä poistetaan elementti hierarkkisesta polusta
   } 
   else {
      if ($leafName=="QUESTION") {
         $basicData[$leafName] .= "</$name>";
      } elseif ($leafName=="ANSWER" || $leafName=="EXPLANATION") {
         $choices [$curChoice][$leafName] .= "</$name>";
      }
   }
}

  
function characterData($parser, $data) { 
   global $curTag,$curChoice, $basicData, $choices, $language; 
  
   $caretPos = strrpos($curTag,'^');
   $leafName = substr($curTag,$caretPos+1); 
   switch ($leafName) {
   case "COURSE":
   case "QUESTION":
   case "TOPIC":
      if ($basicData[$leafName]) {
         $basicData[$leafName] .=$data;
      } else {
         $basicData[$leafName] =$data;
      }
      break;
   case "ANSWER":
   case "EXPLANATION":
      if ($choices [$curChoice][$leafName]) {
         $choices [$curChoice][$leafName] .= $data;
      } else {
         $choices [$curChoice][$leafName] = $data;
      }
      break;
   }
}

// main program

  if (!($_GET['file'])) {   
     die ("File parameter missing");
  }

  $uFile= $_GET['file'];
  if (!($_GET['style'])) {
     $stylesheet= "default.css";
  }
  else {
     $stylesheet=$_GET['style'];
  }   
  $curChoice=0;
  $basicData= array();
  $choices= array();
  $language= "Finnish";
  $taskType= "singleselection";

  $xml_parser = xml_parser_create();
  xml_set_element_handler($xml_parser, "startElement", "endElement");
  xml_set_character_data_handler($xml_parser, "characterData");
  if (!($fp = fopen($uFile,"r"))) {
     die ("could not open input file");
  }
  while ($data = fread($fp, 4096)) {
     if (!xml_parse($xml_parser, $data, feof($fp))) {
        die(sprintf("XML error: %s at line %d", 
            xml_error_string(xml_get_error_code($xml_parser)), 
            xml_get_current_line_number($xml_parser)));
      }
  }
  xml_parser_free($xml_parser);
  
  if ($_GET['submit']) {
     $res= $_GET['answer'];
  }
?>

<!-- output -->
  
 <title><?php echo $basicData["COURSE"];?><?php echo $basicData["TOPIC"]; ?></title>
 <link rel="stylesheet" href="<?php echo $stylesheet;?>" type="text/css" media="all" />  
 </head>
 <body>
 <h2><?php echo $basicData["COURSE"];?><br><?php echo $basicData["TOPIC"];?>
 </h2>
 

<!-- task form -->

<form method="GET" action="<?php echo $_SERVER['PHP_SELF'];?>" >
  <table class="question">
  <tr>
  <td class="logo"> </td>
  <td class="setting">
      <p class="task">
        <?php echo $basicData["QUESTION"]; ?> 
      </p>
      <table class="choices">
<!-- choices -->

      <?php 
         for ($i=0; $i < count ($choices); $i++) {
	   echo "<tr><td class=\"radio\"><input type=\"radio\" name=\"answer\" value=\"$i\"";
           if ($res) {
              if ($res==$i) {echo " checked";}
           } else {
              if ($i==0) {echo " checked";}
           }
           echo "></td><td class=\"ctext\">";
           echo $choices[$i]["ANSWER"];
           echo "</td></tr>";
         }
      ?> 
      </table>
      <input type="hidden" name="file" value="<?php echo $uFile;?>">
      <input type="hidden" name="style" value="<?php echo $stylesheet;?>">
      <div class="buttons">
        <input type="submit" value="<?php echo $okButton[$language];?>" name="submit">
      </div>
   </td>
   </tr>
  </table>
</form>
<p>

<!-- Answer analysis and feedback generation -->

<?php 

if ($_GET['submit']) {
  $res= $_GET['answer'];
  echo "<p><table class=\""; 
  $xOK= $choices[$res]["CORRECTNESS"];
  if ($xOK=="True") {
     echo "correct";
  } elseif ($xOK=="False") {
     echo "false";
  } else {
    echo "maybe";
  }
  echo "\">";
  echo "<td>";
  echo $correctMessage[$xOK][$language];
  echo $choices[$res]["EXPLANATION"];
  echo "</td></table>";
} 

?>

</body>
</html>

Oracle tietokannan käsittely

Tietojenkäsittelytieteen laitoksen db-palvelimella on valmiiksi määritelty polku laitoksen oracle tietokantapalvelimeen. PHP-sovelluksen kytkentä tietokantapalvelimeen tehdään määrittelemällä tarvittavat ympäristömuuttujat .htaccess tiedostossa. Alla esimerkki .htaccess tiedoston määrityksistä:
AddHandler cgi-script php
SetEnv ORACLE_HOME /opt/oracle
SetEnv NLS_LANG finnish_finland.we8iso8859p1
Seuraava ohjelma listaa työntekijänumeron ja nimen kannassa test olevasta käyttäjän scott taulusta.
#!/usr/local/bin/php
<html><body>

<?php


   $connection = OCILogon("scott", "tiger", "bodbacka/test");

   $stmt = OCIParse($connection, "SELECT EMPNO,ENAME FROM emp");
   OCIExecute($stmt);


   // Start of table and column headings (ID and Name)
   print "<TABLE CELLSPACING=\"0\" CELLPADDING=\"3\" BORDER=\"1\">\n";
   print "  <TR><TH>ID</TH><TH>Name</TH></TR>\n";
      
   // Loop through results
   while(OCIFetch($stmt))
   {
      print "  <TR>\n";
      print "    <TD>" . OCIResult($stmt,"EMPNO") . "</TD>\n";
      print "    <TD>" . OCIResult($stmt,"ENAME") . "</TD>\n";
      print "  </TR>\n";
   }

   print "</table>\n";

   // As always, free the resources.
   OCIFreeStatement($stmt);
   OCILogoff($connection); 
?>

Tai sama toisin:

#!/usr/local/bin/php
<html><body>

<?php


   $connection = OCILogon("scott", "tiger", "bodbacka/test");

   $stmt = OCIParse($connection, "SELECT EMPNO,ENAME FROM emp");
   OCIDefineByName($stmt,"EMPNO",$empno);
   OCIDefineByName($stmt,"ENAME",$ename);
   OCIExecute($stmt);

   // Start of table and column headings (ID and Name)
   print "<TABLE CELLSPACING=\"0\" CELLPADDING=\"3\" BORDER=\"1\">\n";
   print "  <TR><TH>ID</TH><TH>Name</TH></TR>\n";
      
   // Loop through results
   while(OCIFetch($stmt))
   {
      print "  <TR>\n";
      print "    <TD>" . $empno . "</TD>\n";
      print "    <TD>" . $ename . "</TD>\n";
     print "  </TR>\n";
   }

   print "</table>\n";

   // As always, free the resources.
   OCIFreeStatement($stmt);
   OCILogoff($connection); 
?>