We gaan onze Webshop uitbreiden met een winkelwagen vol met cursussen.
Aangezien we de sessie variabelen op alle pagina's gaan gebruiken, starten we het gebruik van sessies in het script functies.php (dit script wordt in het begin van alle pagina's uitgevoerd).
session_..................
In plaats van rechtstreeks naar een inschrijfpagina te gaan, gaan we via een pagina die de gegevens aan de winkelwagen toevoegt en terug springt naar de pagina waar onze cursussen staan.
De koppeling in het script ................... wordt nu:
<td><a href="winkelwagen.php?cursus=<?php print urlencode($cursusnaam); ?>&cat=<?php print $cat; ?>">Toevoegen</a></td>
Uit dit fragment blijkt dat we springen naar het script ......................... en we als argumenten de cursus én de categorie meegeven.
Pas de de bijhorende kolomtitel van de tabel aan naar:
<th>Winkelwagen</th>
De doorgestuurde gegevens bevinden zich in $_GET-variabele.
Het script om een cursus aan de sessie variabelen toe te voegen wordt:
<?php
require 'functies.php';
$categorie = htmlEntities($_GET['cat'], ENT_QUOTES);
$cursus = htmlEntities($_GET['cursus'], ENT_QUOTES);
$_SESSION['winkelwagen'][] = array ( 'categorie' => $categorie, 'cursus' => $cursus);
header("location: index.php?cat=$categorie");
?>
De sessie variabele winkelwagen is dus een array met cursussen.
Elke cursus in de sessie variabele winkelwagen is op zijn beurt een array met de categorie en de naam van de cursus.
De sessie variabele winkelwagen is dus een meervoudige array.
Uiteindelijk gebruiken we de header()-functie om terug te springen naar de pagina index.php. Deze header kun je enkel en alleen aanroepen, als er nog geen output naar de browser verstuurd werd. Let er dus op dat er geen spaties (of nieuwe regels) buiten de php-code staan. Ook niet in het door winkelwagen.php opgeroepen functies.php script.
Daarvoor gebruiken we op de PHP pagina index.php onder de cursussen de volgende AJAX aanroep:
<div id="winkelwagen"></div>
<script type="text/javascript">
ajax("winkelwagenweergeven.php?cat=<?php print $cat; ?>","...................");
</script>
Het PHP script om de winkelwagen via AJAX weer te geven wordt dan:
<?php // winkelwagenweergeven.php
.................. 'functies.php';
$cat = $_SESSION['categorie'];
$weergave = "";
if (isset($_GET['weergave'])){
$weergave = htmlEntities($_GET['weergave'], ENT_QUOTES);
}
if ($weergave == 'inschrijven'): ?>
<h2>U wenst zich in te schrijven voor:</h2>
<?php elseif ($weergave != 'email') : ?>
<h2>Winkelwagen</h2>
<?php endif; ?>
<?php if (is_array($_SESSION['winkelwagen'])): ?>
<table border="0">
<tr>
<th>Cursus</th>
<th>Omschrijving</th>
<th>Categorie</th>
<th align="right">Prijs</th>
</tr>
<?php ..................($_SESSION['winkelwagen'] as $cursus): ?>
<tr>
<td><?php print $cursus['cursus']; ?></td>
<td><?php print cursusEigenschap($cursus['categorie'], $cursus['cursus'], 'Omschrijving'); ?></td>
<td><?php print $cursus['categorie']; ?></td>
<td align="right"><?php $prijs = cursusEigenschap(.................., .................., 'Prijs');
$teBetalen += $prijs;
print prijsWeergeven($prijs); ?></td>
</tr>
<?php endforeach;?>
<tr>
<?php if ($weergave == ''): ?>
<td align="center"><a href="inschrijven.php">Inschrijven</a></td>
<td align="center"><a href="winkelwagenwissen.php?cat=<?php ..................; ?>">Winkelwagen wissen</a></td>
<?php else: ?>
<td></td>
<td></td>
<?php endif; ?>
<th align="right">Totaal:</th>
<td align="right" id="tebetalen"><?php print prijsWeergeven($teBetalen); ?></td>
</tr>
</table>
<?php .................. ?>
<p>De winkelwagen is leeg.</p>
<?php .................. ?>
Dit kunnen we door de sessie-variabele te verwijderen waarin de winkelwagen bijgehouden wordt.
Het PHP script .......................................... wordt:
<?php
session_start();
unset($_SESSION['winkelwagen']);
//$categorie = htmlEntities($_GET['cat'], ENT_QUOTES);
header(".................."); //?cat=$categorie");
?>
Op het laatste springen we dan terug naar onze index-pagina.
Ook in inschrijving.php willen we de gekozen cursussen netjes weergeven. Daarvoor passen we het PHP script .............................. voor de weergave van de winkelwagen als volgt aan:
De PHP pagina .................................................... om in te schrijven pas je als volgt aan:
<h1>Inschrijvingsformulier</h1>
<td align="right" id="tebetalen"><?php print prijsWeergeven($teBetalen); ?></td>
document.getElementById("prijs").value = document.getElementById("tebetalen").innerHTML;
Bij het doorsturen van de verschillende e-mails moet de winkelwagen weergegeven worden.
Pas het PHP script voor het weergeven van de winkelwagen als volgt aan:
Pas de PHP pagina met de verwerking van de inschrijving als volgt aan:
ob_start(); // vang de uitvoer van een PHP script op
$_GET['weergave'] = "email"; // zet gewenste GET variabelen
include "winkelwagenweergeven.php"; // Voer het externe PHP script uit
$winkelwagen = ob_get_contents(); // plaats de ontvangen uitvoer in een string
ob_end_clean(); // stop het opvangen van de uitvoer
require_once 'functies.php'; // enkel laden indien nog niet aanwezig
$berichtAdministratie = <<<eod
<p>Beste,</p>
$voornaam $naam wenst zich in te schrijven voor:
$winkelwagen
<pre>$formuliergegevens</pre>
eod;
$header = "FROM: " . EMAIL_ADMINISTRATIE . "\r\nMIME-Version: 1.0\r\nContent-type: text/html; charset=utf-8";
mail($email, "Inschrijving", $berichtCursist, $header);
Pas op een gelijkaardige manier het verzenden van de e-mail naar de administratie aan.
Om de HTML weergave van de e-mails te zien, moet je in de Opties bij de Weergavevoorkeuren de optie HTML-versie standaard tonen activeren. Vergeet de aanpassing niet te versturen (knop).
Nu houden we de categorie bij door deze telkens via GET aan de PHP pagina's door te geven.
Pas de webshop aan zodat je de categorie met behulp van een sessie variabele bijhoudt.
Bij het online testen blijkt bij het toevoegen van cursussen aan de winkelwagen de volledige pagina te herladen, en dit kost tijd.
Met AJAX kan dit sneller:
<td><span style="color:#00F; text-decoration:underline; cursor:pointer"
onclick="ajax('winkelwagen.php?cursus=<?php print urlencode($cursusnaam); ?>&cat=<?php print $cat; ?>','winkelwagen'); ">Toevoegen</span>
</td>
if (url.search("winkelwagen.php") == 0){
ajax("winkelwagenweergeven.php?cat=<?php print $cat; ?>","winkelwagen");
}
Bij de ontwikkeling van een echte Webshop komt nog veel meer kijken. M.a.w. de webshop uit deze cursus diende enkel om de theorie in te oefenen en is zeker niet veilig genoeg om op het Internet als een actieve webshop gebruikt te worden. Om PHP scripts te beveiligen lees je best ook het aanvullende hoofdstuk i.v.m. beveiliging.
Weergeven