Een overzicht weergeven

Inleiding Introductie weergeven Praktijkvoorbeeld

Inleiding

In het vorige hoofdstuk heb je een geleerd een verbinding te maken met de database management service. Deze heb je nodig om de volgende stap - het weergeven van een gegevens - te kunnen uitvoeren. Het maken van een verbinding is bij ieder opvraag van een document opnieuw nodig. Ook in dit hoofdstuk tref je een praktijkvoorbeeld aan.

Aan het einde van dit hoofdstuk weet je :

  • wat heb je nodig om iets weer te geven;
  • hoe de commando's werken;
  • hoe je zelf een overzicht kan maken;

Voorbeeld code Voor de webwinkel ontwikkelen we een klanten site en een admin site. Je kunt starten met de code aanwezig in het bestand voorbeeldWebwinkel.zip. Daarin is het weergeven van producten al aanwezig evenals het maken van de connectie met de database. Het weergeven wordt hieronder uitgelegd.

Wat heb je nodig om iets weer te geven

Zoals hierboven is besproken heb je een verbinding nodig om iets weer te kunnen geven. Is de verbinding tot stand gebracht dan kan een sql-opdracht worden uitgevoerd en wordt het resultaat in variabele geplaatst. Met dit resultaat kan dan weer verder worden gewerkt. Een voorbeeld: We willen een scherm met een lijst van de gegevens van alle artikelen in de database met de mogelijkheid om een artikel te verwijderen of te veranderen.

Eerder heb je gezien dat het sql commando

SELECT * from product;

alle gegevens van alle artikelen ophaald. Voor overzichtelijke code maken we een variabele genaamd $query aan:

$query = "SELECT * from product";

Het is om beveiligingsredenen aan te raden om je sql-opdracht niet meer gegevens te laten ophalen dan nodig is voor de verwerking. Dus als je bijvoorbeeld alleen artikelnummer en artikelomschrijving nodig hebt, zet dit dan neer in plaats van het sterretje. Als je alle velden nodig hebt kun je natuurlijk wel het sterretje gebruiken. Het resultaat van deze query en de verbinding met de database moet je vervolgens weer terug geven. Verwissel query en db niet en vergeet niet het dollarteken. Met de code

// Zie voor meer uitleg select
$opdracht = $db->prepare($query);
$opdracht->execute();

vragen we aan de database management service de gegevens. De teruggestuurde gegevens worden in de variabele $opdracht opgeslagen. Vervolgens moeten we met php commando's de gegevens in $opdracht omzetten tot html code die zichtbaar is voor de gebruiker. Je haalt één record (rij) uit de lijst met het commando:

$row = $opdracht->fetch(PDO::FETCH_NUM);
$row is een array met de waarde van de attributen. Het kan soms handig zijn om deze in een lijst met namen om te zetten die overeen komen met de namen van de attributen in de database
list($id,$naam,$prijs,$voorraad, $omschrijving) = $opdracht->fetch(PDO::FETCH_NUM)
Je wilt de gegevens vaak per rij weergeven. Daartoe gebruiken we een lus structuur b.v.

while(list($nummer,$naam,$prijs,$voorraad, $omschrijving) = $opdracht->fetch(PDO::FETCH_NUM))
{
 $uitvoer .= "$id, $naam, $prijs, $voorraad, $omschrijving, $prijs<br/>";
}

 

Praktijkvoorbeeld

Opdrachten
  1. In voorbeeld 2 hieronder is een uitwerking te zien hoe je een verbinding maakt met mysql via php en als resultaat een mooie tabel in HTML produceert. Het project bestaat nu uit 4 documenten: index.php is het bestand dat de het project begint, database.php is het bestand met definities voor- en een functie voor het koppelen met de mysql database,algmeen.php is het bestand met algemene functies en product.php is het bestand waarin nu alleen de functie toonArtikelenLijst() is geplaatst. In de loop van deze cursus wordt dit bestand aangevuld met andere acties die op producten betrekking hebben. Bestudeer de code goed en sla deze code in een bestand genoemd: index.php op. In het bestand tref je nog meer onbekende commando's. Klik op de link om daar achter te komen.
  2. In voorbeeld 2 staan twee regels code:
    $uitvoer .= "<td><form action='wijzigartikel.php' method='post'><input type='hidden' name='productid' value=$nummer><input type='submit' name='wijzig' value='wijzig'></form></td>";
    $uitvoer .= "<td><form action='verwijderartikel.php' method='post'><input type='hidden' name='productid' value=$nummer><input type='submit' name='wijzig' value='verwijder'></form></td></tr>";
    Wat gebeurt er als je op wijzig of verwijder klikt? Welke variabelen worden er dan doorgestuurd naar de volgende pagina? Waarom wordt dat gedaan?
voorbeeld 2: index.php
<?php
//Laad database code
require_once("database.php");
//Laad algemene code
require_once("algemeen.php");
//Laad code voor de acties met betrekking tot producten die we op de database gaan doen
require_once("product.php");

// declareren van variabelen
$menu = getMenu(); // Haal het menu door de functie getMenu() uit algemeen.php op te roepen
$actie="";
$uitvoer = "";
if( isset($_POST['actie']) && !empty($_POST['actie']))
{
 $actie=$_POST['actie'];
}
// afhandelen actie ofwel uitvoer maken
switch($actie)
{
 case "Toon VerbindingStatus": $uitvoer = toonVerbindingStatus(); break;
 case "Toon Artikelen":
 default: $uitvoer=toonArtikelenLijst();
}

/* Met onderstaand echo commando kun je een stuk text tussen END en END;
 naar de client computer sturen
*/
echo <<<END
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />    
<title>Page title</title>
<style type="text/css">
td
{
 border-bottom: 1px groove black;
}
tr:nth-child(odd)
{
 background-color: lightblue;
}
</style>
</head>
<body>
<h1>Garagebedrijf</h1>
<form action='{$_SERVER['PHP_SELF']}' method="post" >
$menu
</form>
<hr>
<form action='{$_SERVER['PHP_SELF']}' method="post" >
$uitvoer 
</form>
</body>
</html>
END;
//einde van het PhP blok
?>
voorbeeld 2: product.php Het volgende bestand bevat functies voor de verschillende handelingen op de database met betrekking tot producten. In het vervolg van deze cursus zal dit bestand steeds meer functies krijgen.
<?php
// sla op als product.php
/*
 De functie toonArtikelenLijst voert de sql query voor 
 de productenlist uit op de database en maakt met het resultaat van deze
 query een tabel in html.
 Deze html wordt geretourneerd naar de aanroepende code. 
 */
function toonArtikelenLijst()
{
  // maak verbinding
  if(!$db) $db=maakVerbinding();
   $uitvoer="";
   if(!$db) // test verbinding
   {
    // mislukt
    $uitvoer="Er is geen database connectie! ".$melding;
   }
   else
   {
    try
    {
      $opdracht = $db->prepare("SELECT * FROM product");
      $opdracht->execute();
      // resultaat tot uitvoer verwerken
      // maken tabel 
      $uitvoer .= "<table summary=''>\n";
      $uitvoer .= "<tr>";
      $uitvoer .= "<td>nummer</td>";
      $uitvoer .= "<td>naam</td>";
      $uitvoer .= "<td>prijs</td>";
      $uitvoer .= "<td>voorraad</td>";
      $uitvoer .= "<td>omschrijving</td>";
      $uitvoer .= "<td>wijzig</td>";
      $uitvoer .= "<td>verwijder</td>";
      $uitvoer .= "</tr>\n";
      // lus door alle rijen aanezig in het resultaat
      while( list($nummer,$naam,$prijs,$voorraad, $omschrijving) = $opdracht->fetch(PDO::FETCH_NUM))
      {
         $uitvoer .= "<tr><td>$nummer</td><td>$naam</td><td>$prijs</td><td>$voorraad</td><td>$omschrijving</td>";
         $uitvoer .= "<td><form action='{$_SERVER['PHP_SELF']}' method='post'>";
         $uitvoer .= "<input type='hidden' name='productid' value=$nummer>";
         $uitvoer .= "<input type='submit' name='actie' value='wijzig'></form></td>";
         $uitvoer .= "<td><form  action='{$_SERVER['PHP_SELF']}' method='post'>";
         $uitvoer .= "<input type='hidden' name='productid' value=$nummer>";
         $uitvoer .= "<input type='submit' name='actie' value='verwijder'></form></td></tr>";
         $uitvoer .= "</tr>\n"; 
      }
      $uitvoer .="</table>";
    }
    catch(PDOException $e) 
    {
        $uitvoer .= "<br/>Fout in query" .  $e->getMessage();
    }
  }
  //sluit database
  verbreekVerbinding();         
  return $uitvoer;    // Stuur de waarde van $uitvoer terug     
}
//einde van het PhP blok
?>

voorbeeld 2: algemeen.php
<?php
// sla op als algemeen.php
/*
 getMenu geeft de code voor het menu in de website
 */
function getMenu()
{
 $uitvoer=<<<END
 <table class='menu' summary="">
  <tr>
    <td><input type="submit" name="actie" value="Toon Artikelen">
    </td>
    <td><input type="submit" name="actie" value="Toon VerbindingStatus">
    </td>
  </tr>
 </table>
END;
 return $uitvoer; 
}

/*
 toonVerbindingStatus() is een fucntie die de database connectie test.
 Het resultaat is een tekst die het succes of niet van het maken van de connectie
 met de database manager weergeeft
 */
function toonVerbindingStatus()
{ 
 $uitvoer=""; // initialisatie van variabele om uitvoer in te plaatsen
 $melding=""; // initialisatie van variabele om connectie foutmelding in te plaatsen
 global $db; // Haal een verwijzing naar de huidige connectie in database.php
 // maak verbinding
 maakVerbinding($db,$melding);
 if(!$db) // test verbinding
 {
  // mislukt
  $uitvoer=$melding;
 }
 else
 {
  $uitvoer=$melding; 
  // Volgende is niet nodig maar alleen om functionaliteit maakVerbinding te laten zien
  // verbind nog een keer 
  maakVerbinding($db,$melding);
  $uitvoer.="<br/>".$melding;  
  //sluit database
  verbreekVerbinding();
  // verbind nog een keer;
  maakVerbinding($db,$melding);
  $uitvoer.="<br/>".$melding;  
  verbreekVerbinding();
 }
 return $uitvoer;
}
//einde van het PhP blok
?>