indexRangSelonNote.php 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. require_once "libs/fnMain.php";
  3. /**************************
  4. * VALIDATION DES DONNEES
  5. **************************/
  6. $isNoteValid = isset($_GET["note"]) && (float) $_GET["note"] !== 0;
  7. $isAnneeValid = isset($_GET["annee"]) && (int) $_GET["annee"] !== 0;
  8. /**************************
  9. * Affichage du formulaire
  10. **************************/
  11. ?>
  12. <!doctype html>
  13. <html lang="fr">
  14. <head>
  15. <meta charset="UTF-8">
  16. <meta name="viewport"
  17. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  18. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  19. <title>RangLimier - Notes et rang</title>
  20. <link rel="stylesheet" href="assets/bootstrap.min.css">
  21. <link rel="stylesheet" href="assets/divers.css">
  22. </head>
  23. <body>
  24. <h1>RangLimier - Rang selon note d'un ECN</h1>
  25. <p>Cet outil permet, en entrant une note et une année d'ECN, de voir le rang le plus proche associé.<br>
  26. <i>Attention : Cet outil est à but purement indicatif !</i>
  27. </p>
  28. <form action="indexRangSelonNote.php" method="get">
  29. <label for="annee">Veuillez entrer l'année de l'ECN dont vous cherchez le rang d'une note : </label> <br>
  30. <input type="text" name="annee" <?= ($isAnneeValid === TRUE) ? 'value='.(int) $_GET["annee"] : "" ?>>
  31. <br><br>
  32. <label for="note">Veuillez entrer la note dont vous cherchez le rang <em>(avec un point au lieu d'une virgule)</em> : </label> <br>
  33. <input type="text" name="note" <?= ($isNoteValid === TRUE) ? 'value='.(float) $_GET["note"] : "" ?>>
  34. <button type="submit" class="btn btn-info">Envoyer</button>
  35. </form>
  36. <?php if ($isNoteValid && $isAnneeValid) {
  37. $rangText = "";
  38. $rangMoyen = 0; // Variable donnant le rang utilisé pour calculer le tableau des choix, et servant aussi au classement affiché
  39. $sqlLimiteBasse = "SELECT * FROM notes_rang
  40. WHERE annee = :annee AND note >= :note
  41. ORDER BY classement DESC
  42. LIMIT 1";
  43. $sqlLimiteHaute = "SELECT * FROM notes_rang
  44. WHERE annee = :annee AND note <= :note
  45. ORDER BY classement
  46. LIMIT 1";
  47. $reqLimBasse = $db->prepare($sqlLimiteBasse);
  48. $reqLimBasse->execute([
  49. "annee" => $_GET["annee"],
  50. "note" => $_GET["note"]
  51. ]);
  52. if ($reqLimBasse->rowCount() === 0) {
  53. // Pas de note au dessus de la note entrée => Forcément 1er
  54. $rangText = "Au dessus du 1er";
  55. $rangMoyen = 1;
  56. } else {
  57. $reqLimiteHaute = $db->prepare($sqlLimiteHaute);
  58. $reqLimiteHaute->execute([
  59. "annee" => $_GET["annee"],
  60. "note" => $_GET["note"]
  61. ]);
  62. $rangBasArray = $reqLimBasse->fetch(PDO::FETCH_ASSOC);
  63. if ($reqLimiteHaute->rowCount() === 0) {
  64. // Pas de note en dessous => Forcément dernier
  65. $rangMoyen = $rangBasArray["classement"] + 10;
  66. $rangText = "Estimé environ à ".((int) $rangMoyen);
  67. } else {
  68. // Note entre 2 classements connus de la DB
  69. $rangHautArray = $reqLimiteHaute->fetch(PDO::FETCH_ASSOC);
  70. // Ligne non utilisée car révèle les points utilisés (entre xxx et yyy) sont connus
  71. // $rangText = "Entre ".$rangBasArray["classement"]." et ".$rangHautArray["classement"];
  72. $rangMoyen = ((int) $rangBasArray["classement"] + (int) $rangHautArray["classement"]) / 2;
  73. $rangText = "Estimé environ à ".$rangMoyen;
  74. }
  75. }
  76. echo "<hr><p>Rang de la note pour l'ECN ".htmlentities($_GET["annee"])." : <strong>".htmlentities($rangText)."</strong></p>";
  77. // Partie redirigeant vers le tableau
  78. echo "<a href='index.php?classement=".$rangMoyen."'>Accéder au tableau de choix disponibles pour ce classement</a>";
  79. }
  80. ?>
  81. </body>
  82. </html>