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

$resultaat = $db->query($query);
		

vragen we aan de database management service de gegevens. De teruggestuurde gegevens worden in de variabele $resultaat opgeslagen. Vervolgens moeten we met php commando's de gegevens in het $resultaat om zetten tot html code zichtbaar voor de gebruiker. Je haalt één record uit de lijst op met het commando:

$row = $resultaat->fetch_row();
		
$row is een array met de waarde van de attributen. Het is handig 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) = $resultaat->fetch_row())
		
Je wilt de gegevens vaak per rij weergeven. Daartoe gebruiken we een lus structuur b.v.

while(list($id,$naam,$prijs,$voorraad, $omschrijving) = $resultaat->fetch_row())
{
 $melding .= "$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");
$actie="Toon Artikelen";
$uitvoer = "";
// afhandelen actie ofwel uitvoer maken
// Vertel hier wat een switch ook weer doet.
switch($actie)
{
 case "Toon Artikelen": $uitvoer = toonArtikelenLijst(); break;
 case "Toon VerbindingStatus": $uitvoer = toonVerbindingStatus(); break;
 default: $uitvoer = "<h1>Welkom bij ons garagebedrijf</h1>"; break;
}

/* 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:1px groove black;
}
</style>
</head>
<body>
<h1>Garagebedrijf</h1>
$uitvoer 
</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
/*
 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
  $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
  if(!$db) maakVerbinding($db,$melding);
  if(!$db) // test verbinding
  {
    // mislukt
    $uitvoer="Er is geen database connectie! ".$melding;
  }
  else
  {
     $query = "SELECT * from product";
     $resultaat = $db->query($query);
     if($resultaat)
     {            
      // resultaat tot uitvoer verwerken
      // maken tabel 
      $uitvoer .= "<table summary=''>\n";
      $uitvoer .= "<tr>";
      $uitvoer .= "<td>id</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($id,$naam,$prijs,$voorraad, $omschrijving) = $resultaat->fetch_row())
      {
         $uitvoer .= "<tr><td>$id</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='$id'>";
         $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='$id'>";
         $uitvoer .= "<input type='submit' name='actie' value='verwijder'></form></td></tr>";
         $uitvoer .= "</tr>\n"; 
      }
      $uitvoer .="</table>";
     }
     else
     {
         $uitvoer .= "<br/>Fout in query";
     }
  }
  //sluit database
  verbreekVerbinding();         
  return $uitvoer;    // Stuur de waarde van $uitvoer terug     
}
//einde van het PhP blok
?>