Teadete valik

Mõnekümne kassi andmed mahuvad ühele lehele ära. Aga seda vaid juhul, kui näidatakse vaid kassi nime ja värvi. Kui juba lisada omaniku andmed ning veidigi suurem kassi pilt, siis veidigi väiksema ekraani peal on mugav juba kasse ühekaupa vaadata. Järgnevalt uurimegi, kuidas selliseid lehti koostada, kus võimalik tabeli ühe rea andmeid eraldi välja tuua.  

Üsna mugav on lehele andmeid saata aadressiriba kaudu. Kui kirjutan failinimele taha küsimärgi ning sinna taha id=2 ehk siis nt. teadetevalik.php?id=2 , siis selle väärtuse 2 saan programmis küsida muutujast $_REQUEST[“id”]. Või kui tahan kontrollida, kas failinime järel saadeti parameeter nimega id, siis kontrollin if(isSet($_REQUEST[“id”])) 

Nõnda ka järgmises lõigus. Kui parameeter saadeti, siis järelikult soovitakse vaadata ühe konkreetse lehe andmeid, mida id näitab. Kui aga parameetrit pole, siis inimene järelikult ei tea veel lehte selle numbri järele küsida ning tal on põhjust pigem loetelust omale sobiv valida.  

Kui id on olemas, siis saab selle järgi küsida lehe muud andmed – praeguses näites pealkirja ja sisu. Tavalise SQL-lause juures saab ühe rea küsimiseks panna WHERE-tingimuse juurde vastava piirangu. Nt SELECT id, pealkiri, sisu FROM lehed WHERE id=2;

Kuna siin veebirakenduses tahetakse vastavalt kasutaja valikult näha erinevaid lehti, siis peab saama seda arvu muuta. MySQL Improved teek lubab muutuva väärtuse kohale panna küsimärgi ning pärast selle väärtuse bind_param-käsu abil asendada. Hiljem tulev rida

 $kask->bind_param("i", $_REQUEST["id"]);  

teatab, et parameetri tüübiks on täisarv ehk integer ehk täht i. Ning parameeter saab oma väärtuse muutujast $_REQUEST[“id”]. Edasi juba andmete kättesaamine bind_result kaudu määratud muutujatesse nagu ennegi. Eelnevas näites võis andmeid tulla palju ning seetõttu tuli nad while tsükli kaudu välja kuvada. Ühe id järgi küsides saab kätte ainult ühe rea, seetõttu piisab selle kättesaamiseks ühest fetch-käsklusest. Kas küsimine õnnestus, seda annab teada if-lause. Andmeid ei saa küsides näiteks juhul, kui keegi on aadressirea kaudu sisestanud olematu lehe id-numbri. Muul juhul saab pealkirja ja sisu ilusti kätte ning neid võib lehel kuvada.

 if(isSet($_REQUEST["id"])){ 
 $kask=$yhendus->prepare("SELECT id, pealkiri, sisu FROM lehed  WHERE id=?"); 
 //Kysim2rgi asemele pannakse aadressiribalt tulnud id,  //eeldatakse, et ta on tyybist integer (i).  
 //(double - d, string - s) 
 $kask->bind_param("i", $_REQUEST["id"]);  
 $kask->bind_result($id, $pealkiri, $sisu); 
 $kask->execute(); 
 if($kask->fetch()){ 
 echo "<h2>".htmlspecialchars($pealkiri)."</h2>";  echo htmlspecialchars($sisu); 
 } else { 
 echo "Vigased andmed."; 
 } 
 } else { 
 echo "Tere tulemast avalehele! Vali men&uuml;&uuml;st sobiv teema.";  } 

Tavakasutaja ei pea peast lehtede numbreid teadma. Tema pigem vaatab neid menüüst ning valib sobiva. Edasi juba saadetakse vastava teate id-number aadressiriba kaudu lehele, leht avaneb uuesti ning näitab küsitud teate sisu. Menüü kokku saamiseks sobib järgnev koodilõik. Kui viites (a href) jätta faili nime kohale küsimärk, siis avatakse sama fail ilma, et peaks selle faili nime teadma. 

 <?php 
 $kask=$yhendus->prepare("SELECT id, pealkiri FROM lehed");  $kask->bind_result($id, $pealkiri); 
 $kask->execute(); 
 while($kask->fetch()){ 
 echo "<li><a href='?id=$id'>". 
 htmlspecialchars($pealkiri)."</a></li>";  } 
 ?> 

Edasi kirjete kaupa näitav kood tervikuna. 

<?php 
 $yhendus=new mysqli("localhost", "juku", "kala", "jukubaas2"); ?> 
<!doctype html> 
<html> 
 <head> 
 <title>Teated lehel</title> 
 <style type="text/css">
 #menyykiht{ 
 float: left; 
 padding-right: 30px; 
 } 
 #sisukiht{ 
 float:left; 
 } 
 #jalusekiht{ 
 clear: left; 
 } 
 </style> 
<meta charset="utf-8" /> 
 </head> 
 <body> 
 <div id="menyykiht"> 
 <h2>Teated</h2> 
 <ul> 
 <?php 
 $kask=$yhendus->prepare("SELECT id, pealkiri FROM lehed");  $kask->bind_result($id, $pealkiri); 
 $kask->execute(); 
 while($kask->fetch()){ 
 echo "<li><a href='?id=$id'>". 
 htmlspecialchars($pealkiri)."</a></li>";  } 
 ?> 
 </ul> 
 </div> 
 <div id="sisukiht"> 
 <?php 
 if(isSet($_REQUEST["id"])){ 
 $kask=$yhendus->prepare("SELECT id, pealkiri, sisu FROM lehed  WHERE id=?"); 
 //Kysim2rgi asemele pannakse aadressiribalt tulnud id,  //eeldatakse, et ta on tyybist integer (i).  
 //(double - d, string - s) 
 $kask->bind_param("i", $_REQUEST["id"]);  
 $kask->bind_result($id, $pealkiri, $sisu); 
 $kask->execute(); 
 if($kask->fetch()){ 
 echo "<h2>".htmlspecialchars($pealkiri)."</h2>";  echo htmlspecialchars($sisu); 
 } else { 
 echo "Vigased andmed."; 
 } 
 } else { 
 echo "Tere tulemast avalehele! Vali men&uuml;&uuml;st sobiv teema.";  } 
 ?> 
 </div> 
 <div id="jalusekiht"> 
 Lehe tegi Jaagup 
 </div> 
 </body> 
</html> 
<?php 
 $yhendus->close(); 
?>