Selaa lähdekoodia

Ajout de la page de calcul du rang selon la note et l'année de l'ECN

Guichen 4 vuotta sitten
vanhempi
commit
4469556b17
1 muutettua tiedostoa jossa 95 lisäystä ja 0 poistoa
  1. 95 0
      indexRangSelonNote.php

+ 95 - 0
indexRangSelonNote.php

@@ -0,0 +1,95 @@
+<?php
+require_once "libs/fnMain.php";
+
+/**************************
+ * VALIDATION DES DONNEES
+ **************************/
+$isNoteValid = isset($_GET["note"]) && (float) $_GET["note"] !== 0;
+$isAnneeValid = isset($_GET["annee"]) && (int) $_GET["annee"] !== 0;
+
+/**************************
+ * Affichage du formulaire
+ **************************/
+?>
+<!doctype html>
+<html lang="fr">
+<head>
+	<meta charset="UTF-8">
+	<meta name="viewport"
+	      content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+	<meta http-equiv="X-UA-Compatible" content="ie=edge">
+	<title>RangLimier - Notes et rang</title>
+	<link rel="stylesheet" href="assets/bootstrap.min.css">
+	<link rel="stylesheet" href="assets/divers.css">
+</head>
+<body>
+<h1>RangLimier - Rang selon note d'un ECN</h1>
+<p>Cet outil permet, en entrant une note et une année d'ECN, de voir le rang le plus proche associé.<br>
+<i>Attention : Cet outil est à but purement indicatif !</i>
+</p>
+<form action="indexRangSelonNote.php" method="get">
+	<label for="annee">Veuillez entrer l'année de l'ECN dont vous cherchez le rang d'une note : </label> <br>
+	<input type="text" name="annee" <?= ($isAnneeValid === TRUE) ? 'value='.(int) $_GET["annee"] : "" ?>>
+	<br><br>
+	<label for="note">Veuillez entrer la note dont vous cherchez le rang  <em>(avec un point au lieu d'une virgule)</em> : </label> <br>
+	<input type="text" name="note" <?= ($isNoteValid === TRUE) ? 'value='.(float) $_GET["note"] : "" ?>>
+	
+	<button type="submit" class="btn btn-info">Envoyer</button>
+</form>
+<?php if ($isNoteValid && $isAnneeValid) {
+	$rangText = "";
+	$rangMoyen = 0; // Variable donnant le rang utilisé pour calculer le tableau des choix, et servant aussi au classement affiché
+	
+	$sqlLimiteBasse = "SELECT * FROM notes_rang
+					WHERE annee = :annee AND note >= :note
+					ORDER BY classement DESC
+					LIMIT 1";
+	$sqlLimiteHaute = "SELECT * FROM notes_rang
+					WHERE annee = :annee AND note <= :note
+					ORDER BY classement
+					LIMIT 1";
+	
+	$reqLimBasse = $db->prepare($sqlLimiteBasse);
+	$reqLimBasse->execute([
+		"annee" => $_GET["annee"],
+		"note" => $_GET["note"]
+	]);
+	
+	if ($reqLimBasse->rowCount() === 0) {
+		// Pas de note au dessus de la note entrée => Forcément 1er
+		$rangText = "Au dessus du 1er";
+		$rangMoyen = 1;
+	} else {
+		$reqLimiteHaute = $db->prepare($sqlLimiteHaute);
+		$reqLimiteHaute->execute([
+			"annee" => $_GET["annee"],
+			"note" => $_GET["note"]
+		]);
+		
+		$rangBasArray = $reqLimBasse->fetch(PDO::FETCH_ASSOC);
+		if ($reqLimiteHaute->rowCount() === 0) {
+			// Pas de note en dessous => Forcément dernier
+			$rangMoyen = $rangBasArray["classement"] + 10;
+			$rangText = "Estimé environ à ".((int) $rangMoyen);
+		} else {
+			// Note entre 2 classements connus de la DB
+			$rangHautArray = $reqLimiteHaute->fetch(PDO::FETCH_ASSOC);
+			
+			// Ligne non utilisée car révèle les points utilisés (entre xxx et yyy) sont connus
+			// $rangText = "Entre ".$rangBasArray["classement"]." et ".$rangHautArray["classement"];
+			
+			$rangMoyen = ((int) $rangBasArray["classement"] + (int) $rangHautArray["classement"]) / 2;
+			$rangText = "Estimé environ à ".$rangMoyen;
+		}
+	}
+	
+	echo "<hr><p>Rang de la note pour l'ECN ".htmlentities($_GET["annee"])." : <strong>".htmlentities($rangText)."</strong></p>";
+	
+	// Partie redirigeant vers le tableau
+	echo "<a href='index.php?classement=".$rangMoyen."'>Accéder au tableau de choix disponibles pour ce classement</a>";
+}
+?>
+
+
+</body>
+</html>