Berichtenteller

Berichtnummer: 1

De bron

<?php
  session_start();
?>

<html>
  <head>
    <link rel="stylesheet" href="../../styles/collegestyle.css" type="text/css">
    <title>Berichtenteller</title>
  </head>
<body>

<h1>Berichtenteller</h1>

<?php
  if( $_SESSION["nummer"] > 0 ) $_SESSION["nummer"]++;
  else $_SESSION["nummer"]=1;

  if($_POST["action"] == "reset") session_unregister("nummer");
?>


<form method="post">

  <button type="submit" name="action" value="next" >Volgende</button>
  <button type="submit" name="action" value="reset" >Reset</button>

</form>


<?php
  echo "Berichtnummer: " . $_SESSION["nummer"];
?>

</body>
</html>

Uitleg

Helemaal bovenaan de file start je een sessie met session_start( ); Dat moet helemaal bovenin staan, nog vóór dingen als <html> omdat het diverse HTTP headers verstuurt. Je hoeft niet te weten wat HTTP headers zijn, als je session_start( ) maar bovenaan zet.

Een sessie kun je zien als een verzameling variabelen die blijven bestaan zo lang je je browser niet afsluit of de sessie vernietigt met session_destroy( ). Je weet dat je uit een formulier ook variabelen kunt halen met bv. $_POST["username"] en je kunt in PHP zelf variabelen maken zoals $firstname, maar zodra je doorklikt naar een andere webpagina ben je die variabelen weer kwijt. Bij gebruik van een sessie kun je variabelen maken zoals $_SESSION["firstname"] en die blijft wel bestaan als je naar een andere pagina doorklikt.

In het voorbeeld zie je een sessie-variabele $_SESSION["nummer"]. Eerst wordt gekeken of die al bestaat door te kijken of hij een waarde groter dan 0 heeft. Een variabele die nog niet bestaat zal nooit een waarde groter dan 0 hebben. Een andere manier om te zien of een variabele bestaat is isset("nummer");

Als $_SESSION["nummer"] nog niet bestaat krijgt hij de waarde 1. Dat maakt ook automatisch dat de variabele vanaf dat moment bestaat en een waarde groter dan 0 heeft.

Als $_SESSION["nummer"] groter dan 0 is wordt er 1 bij opgeteld. Als laatste regel van het script zie je

 echo "Berichtnummer: " . $_SESSION["nummer"]; 
Hiermee zie je de waarde van $_SESSION["nummer"].

O ja, dan staat er nog iets met action en reset. Het formulier bevat twee knoppen: eentje om de teller te laten doortellen en eentje om opnieuw te beginnen. Beide hebben name="action". Beide versturen het formulier. Dat is vooral bedoeld om de teller te laten doortellen. Maar als je op reset drukt wordt de variabele $_SESSION["nummer"] vernietigd en begint de teller opnieuw.