|
|
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 :
|
|
|
|
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 |
|
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 ?> |