8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai des pages en php qui génèrent des quizz mathématiques. 5, 10 ou 20 questions selon les pages. En fonction du numéro de la question, le message qui s'affiche est différent, les points sont comptés et affichés après la dernière question.

Ces scripts fonctionnait très bien jusque maintenant... ils restent bloqués sur "Voici la première question" en quelques sortes car les nombres sont tout de même modifiés aléatoirement

Le seul changement est le passage du serveur à une version 7 de php... du coup je me dis qu'il y a une histoire de syntaxe qui a changée mais je ne trouve pas... j'ai déjà tenté de remplacer les " par ', voir par rien entre les [].

La page : http://boudoux.notreecole.net/calcul_web/ce1_25.php

Le code :

<html>

<h3> 25 Moitiés de dizaines entières</h3>

<?php
session_start();

if (!isset($_SESSION["number"]))
{
  $_SESSION["number"] = 0;
  $_SESSION["answer"] = 0;
  $_SESSION["correct"] = 0;
  $_SESSION["question"] = "";
}

$total_number = 10;


$number = $_SESSION["number"];
$answer = $_SESSION["answer"];
$correct = $_SESSION["correct"];
$question = $_SESSION["question"];

if ($number == 0)
{
  print <<<FIRST
  <p> Tu vas répondre à $total_number questions dans ce quiz. <br /><br/>
      Voici la première question : <br /><br />
  </p>
FIRST;
}

if ($number > 0)
{
  if ($_POST["answer"] == $answer)
  {
    $correct++;
    $_SESSION["correct"] = $correct;
    print <<<CORRECT
      Bonne réponse : $question  $answer. <br /><br />
CORRECT;
  }
  else
  {
    print <<<WRONG
      Attention, tu as fait une erreur : $question $answer.
      <br /><br />
WRONG;
  }
}

if ($number >= $total_number)
{
  print <<<FINAL_SCORE
  <h2>Au total, tu as $correct bonnes réponses sur $total_number. <br /><br />
  Tu peux continuer à t'entraîner... <br /><br /></h2>
FINAL_SCORE;
  session_destroy();
}
else
{
  $number++;
  $_SESSION["number"] = $number;
  $x = rand(1, 10)*10;
  $y = $x/2;
  $question = "La moitié de " . $x . " est : " ;
  $answer = $y;
  $_SESSION["question"] = $question;
  $_SESSION["answer"] = $answer;
  $script = $_SERVER['PHP_SELF'];
  print <<<FORM
  <form method = "post" action = $script>
  $question
  <input type = "text" name = "answer" value = "" size = "5" autofocus />
  <input type = "submit" value = "Vérifier" />
  </form>
FORM;
}

print <<<BOTTOM
</body>
</html>
BOTTOM;

?>



Y'a-t-il des changements de syntaxe dans php 7 qui aurait une influence sur ce code ?
J'ai ajouté :
  var_dump($_SESSION); 

à différents endroits de mon code pour voir ce que donnaient les variables. Les variables étaient bien incrémentées... Le problème était donc que la session redémarrait à 0 à chaque fois.

La solution est toute bête... comme souvent.

Il faut appeler session_start() AVANT d'écrire le moindre code HTML (avant même la balise <!DOCTYPE> Smiley cligne . Si vous oubliez de lancer session_start() , vous ne pourrez pas accéder aux variables superglobales $_SESSION .

Merci à ceux qui ont pris le temps de me lire.