diff --git a/code/c_connexion.php b/code/c_connexion.php
new file mode 100644
index 0000000..de32803
--- /dev/null
+++ b/code/c_connexion.php
@@ -0,0 +1,57 @@
+getInfosUtilisateur($login,$mdp);
+
+ if(!is_array( $utilisateur)){
+ $formulaire ="frmIdentification";
+ $champ ="login";
+ include("vues/v_entete.php");
+ ajouterErreur("Login ou mot de passe incorrect");
+ include("vues/v_erreurs.php");
+ include("vues/v_connexion.php");
+ }
+ else{
+ $id = $utilisateur['uId'];
+ $nom = $utilisateur['uNom'];
+ $prenom = $utilisateur['uPrenom'];
+ $statut = $utilisateur['uStatut'];
+ ($statut==0)?$region=0:$region=$utilisateur['uRegion'];
+ connecter($id,$nom,$prenom,$statut,$region);
+ header ('location: index.php?choixTraitement=param&action=voir');
+ }
+ break;
+ }
+ default :{
+ $formulaire ="frmIdentification";
+ $champ ="login";
+ include("vues/v_entete.php");
+ include("vues/v_connexion.php");
+ break;
+ }
+}
+?>
\ No newline at end of file
diff --git a/code/c_param.php b/code/c_param.php
new file mode 100644
index 0000000..75a2465
--- /dev/null
+++ b/code/c_param.php
@@ -0,0 +1,79 @@
+getLesParametres();
+ include("vues/v_choixParam.php");
+ $enteteParametre=$lesParametres[$noP-1];
+ $lesInfosParametre = $pdo->getParametre($choix);
+ include("vues/v_ficheParametre.php");
+ $stat="2";
+ break;
+ }
+//-----------------------------------------liste détaillée pour un parametre
+case 'liste':
+ {
+ include("vues/v_entete.php");
+ $lesParametres=$pdo->getLesParametres();
+ include("vues/v_choixParam.php");
+ $titre2=$lesStatistiques[0]['libelle'];
+ include("vues/v_listeStat.php");
+ break;
+ }
+//----------------------------------------- AJOUT/MODIFICATION/SUPPRESSION
+case 'ajouter':
+case 'modifier':
+case 'supprimer':
+ {
+ include("vues/v_entete.php");
+ $infosParam = $pdo->getInfosParam($type, $valeur);
+ include("vues/v_unParam.php");
+ break;
+ }
+//----------------------------------------- VALIDATION AJOUT
+case 'validerAjouter':
+ {// enregistrement de la ligne et retour
+ if ($_REQUEST['zOk']=="OK") {$pdo->ajoutParametre($type, $valeur, addslashes ($_REQUEST['zLibelle']), $_REQUEST['zTerritoire'], $_REQUEST['zDep'] , $plancher, $plafond);}
+ header ('location: index.php?choixTraitement=param&action=voir&lstParam='.$type);
+ }
+//----------------------------------------- VALIDATION MODIFICATION
+case 'validerModifier':
+ {
+ if ($_REQUEST['zOk']=="OK") {$pdo->majParametre($type, $valeur, addslashes ($_REQUEST['zLibelle']), $_REQUEST['zTerritoire'], $_REQUEST['zDep'], $plancher, $plafond);}
+ header ('location: index.php?choixTraitement=param&action=voir&lstParam='.$type);
+ break;
+ }
+//----------------------------------------- VALIDATION SUPPRESSION
+case 'validerSupprimer':
+ {
+ if ($_REQUEST['zOk']=="OK") {$pdo->supprimeParametre($type, $valeur);}
+ header ('location: index.php?choixTraitement=param&action=voir&lstParam='.$type);
+ break;
+ }
+
+default :
+ {
+ echo 'erreur d\'aiguillage !'.$action;
+ break;
+ }
+}
+?>
\ No newline at end of file
diff --git a/code/classPDO.php b/code/classPDO.php
new file mode 100644
index 0000000..b83dfef
--- /dev/null
+++ b/code/classPDO.php
@@ -0,0 +1,152 @@
+query("SET CHARACTER SET utf8");
+ }
+ public function _destruct()
+ {
+ PdoBD::$monPdo = null;
+ }
+/**
+ * Fonction statique qui cree l'unique instance de la classe PdoBD
+*/
+ public static function getPdoBD()
+ {
+ if(PdoBD::$monPdoBD==null) {PdoBD::$monPdoBD= new PdoBD();}
+ return PdoBD::$monPdoBD;
+ }
+
+/** ---------------------------------------------- module Connexion
+ *
+ * dernière modif le : 09/03/2022 par Pascal Blain
+ * Retourne les informations d'un utilisateur sous la forme d'un tableau associatif
+*/
+ public function getInfosUtilisateur($login,$mdp)
+ {
+ $req = "SELECT uId,uNom,uPrenom,uLogin,uMdp,uAdresse,uCP,uVille,uDateEmbauche,uSecteur,uStatut,uRegion,
+ st.pLibelle as wStatut,s.pLibelle as wSecteur,r.pLibelle as wRegion,uLabo,lNom
+ FROM utilisateur
+ INNER JOIN parametre st ON (st.pType='statUti' AND st.pIndice=uStatut)
+ INNER JOIN parametre r ON (r.pType='region' AND r.pIndice=uRegion)
+ INNER JOIN parametre s ON (s.pType='secteur' AND s.pIndice=uSecteur)
+ INNER JOIN labo ON uLabo=lCode";
+ if ($login==="*")
+ {$req.=" WHERE uId='$mdp';";}
+ else
+ {$req.=" WHERE uLogin='$login'
+ AND uMdp='$mdp';";}
+ //echo $req;
+ $rs = PdoBD::$monPdo->query($req);
+ if ($rs === false) {afficherErreurSQL("Probleme lors de la lecture des informations d'un utilisateur...", $req, PdoBD::$monPdo->errorInfo());}
+ $ligne = $rs->fetch();
+ return $ligne;
+ }
+/** ---------------------------------------------- Fin module Connexion
+*/
+
+/** ---------------------------------------------- gestion des PARAMETRES
+/**
+ * Retourne les informations de la table TYPEPARAMETRE
+*/
+ public function getLesParametres()
+ {
+ $req = "SELECT tlId, tlLibelle, tlBooleen, tlChoixMultiple, tlCumul
+ FROM typeParametre
+ ORDER BY tlLibelle;";
+ $rs = PdoBD::$monPdo->query($req);
+ if ($rs === false) {afficherErreurSQL("Probleme lors de la recherche dans la base de données.", $req, PdoBD::$monPdo->errorInfo());}
+ $lesLignes = $rs->fetchAll();
+ return $lesLignes;
+ }
+/**
+ * Retourne dans un tableau associatif les informations de la table PARAMETRE (pour un type particulier)
+*/
+ public function getParametre($type)
+ {
+ $req = "SELECT pIndice, pLibelle, pCategorie
+ FROM parametre
+ WHERE pType='$type'
+ ORDER by pIndice;";
+ $rs = PdoBD::$monPdo->query($req);
+ if ($rs === false) {afficherErreurSQL("Probleme lors de la recherche des parametres dans la base de données.", $req, PdoBD::$monPdo->errorInfo());}
+ $lesLignes = $rs->fetchAll();
+ return $lesLignes;
+ }
+/**
+ * Retourne dans un tableau associatifles informations de la table PARAMETRE (pour un type particulier)
+*/
+ public function getInfosParam($type, $valeur)
+ {
+ if ($valeur=="NULL")
+ {$req = "SELECT pType, max(pIndice)+1 AS pIndice, ' ' AS pLibelle, tlLibelle, pPlancher, pPlafond
+ FROM parametre INNER JOIN typeParametre ON typeParametre.tlId=parametre.pType
+ WHERE pType='$type';";
+ }
+ else
+ {$req = "SELECT pType, pIndice, pLibelle, tlLibelle, pPlancher, pPlafond
+ FROM parametre INNER JOIN typeParametre ON typeParametre.tlId=parametre.pType
+ WHERE pType='$type'
+ AND pIndice like '$valeur';";
+ }
+ $rs = PdoBD::$monPdo->query($req);
+ if ($rs === false) {afficherErreurSQL("Probleme lors de la recherche dans la base de données.", $req, PdoBD::$monPdo->errorInfo());}
+ $ligne = $rs->fetch();
+ return $ligne;
+ }
+/**
+ * Met a jour une ligne de la table PARAMETRE
+*/
+ public function majParametre($type, $valeur, $libelle, $territoire, $dep, $plancher, $plafond)
+ {
+ $req = "UPDATE parametre SET pLibelle='$libelle', pPlancher=$plancher, pPlafond=$plafond
+ WHERE pType='$type'
+ AND pIndice=$valeur;";
+ $rs = PdoBD::$monPdo->exec($req);
+ if ($rs === false) {afficherErreurSQL("Probleme lors de la mise a jour des parametres dans la base de données.", $req, PdoBD::$monPdo->errorInfo());}
+ }
+/**
+ * supprime une ligne de la table PARAMETRE
+*/
+ public function supprimeParametre($type, $valeur)
+ {
+ $req = "DELETE
+ FROM parametre
+ WHERE pType='$type'
+ AND pIndice=$valeur;";
+ $rs = PdoBD::$monPdo->exec($req);
+ if ($rs === false) {afficherErreurSQL("Probleme lors de la suppression d'un parametre dans la base de données.", $req, PdoBD::$monPdo->errorInfo());}
+ }
+/**
+ * ajoute une ligne dans la table PARAMETRE
+*/
+ public function ajoutParametre($type, $valeur, $libelle,$territoire, $dep, $plancher, $plafond)
+ {
+ $req = "INSERT INTO parametre
+ (pType, pIndice, pLibelle, pPlancher, pPlafond)
+ VALUES ('$type', $valeur, '$libelle', $plancher, $plafond);";
+ $rs = PdoBD::$monPdo->exec($req);
+ if ($rs === false) {afficherErreurSQL("Probleme lors de l'insertion d'un parametre dans la base de données.", $req, PdoBD::$monPdo->errorInfo());}
+ }
+/** ---------------------------------------------- fin gestion des PARAMETRES
+*/
+}
+?>
\ No newline at end of file
diff --git a/code/fonctionsProjet.inc b/code/fonctionsProjet.inc
new file mode 100644
index 0000000..7646314
--- /dev/null
+++ b/code/fonctionsProjet.inc
@@ -0,0 +1,210 @@
+ "Janvier",
+ '02' => "Février",
+ '03' => "Mars",
+ '04' => "Avril",
+ '05' => "Mai",
+ '06' => "Juin",
+ '07' => "Juillet",
+ '08' => "Août",
+ '09' => "Septembre",
+ '10' => "Octobre",
+ '11' => "Novembre",
+ '12' => "Décembre");
+ return $tabMois[$mois];
+}
+
+/* gestion des erreurs*/
+/**
+ * Indique si une valeur est un entier positif ou nul
+ * @param $valeur
+ * @return vrai ou faux
+*/
+function estEntierPositif($valeur)
+{
+ return preg_match("/[^0-9]/", $valeur) == 0;
+}
+
+/**
+ * Indique si un tableau de valeurs est constitué d'entiers positifs ou nuls
+ * @param $tabEntiers : le tableau
+ * @return vrai ou faux
+*/
+function estTableauEntiers($tabEntiers)
+{
+ $ok = true;
+ foreach($tabEntiers as $unEntier)
+ {
+ if(!estEntierPositif($unEntier)){$ok=false;}
+ }
+ return $ok;
+}
+/**
+ * Vérifie si une date est inférieure d'un an à la date actuelle
+ * @param $dateTestee
+ * @return vrai ou faux
+*/
+function estDateDepassee($dateTestee)
+{
+ $dateActuelle=date("d/m/Y");
+ @list($jour,$mois,$annee) = explode('/',$dateActuelle);
+ $annee--;
+ $AnPasse = $annee.$mois.$jour;
+ @list($jourTeste,$moisTeste,$anneeTeste) = explode('/',$dateTestee);
+ return ($anneeTeste.$moisTeste.$jourTeste < $AnPasse);
+}
+/**
+ * Vérifie la validité du format d'une date française jj/mm/aaaa
+ * @param $date
+ * @return vrai ou faux
+*/
+function estDateValide($date){
+ $tabDate = explode('/',$date);
+ $dateOK = true;
+ if (count($tabDate) != 3) {
+ $dateOK = false;
+ }
+ else {
+ if (!estTableauEntiers($tabDate)) {
+ $dateOK = false;
+ }
+ else {
+ if (!checkdate($tabDate[1], $tabDate[0], $tabDate[2])) {
+ $dateOK = false;
+ }
+ }
+ }
+ return $dateOK;
+}
+
+/**
+ * Ajoute le libelle d'une erreur au tableau des erreurs
+ * @param $msg : le libellé de l'erreur
+ */
+function ajouterErreur($msg){
+ if (! isset($_REQUEST['erreurs'])){
+ $_REQUEST['erreurs']=array();
+ }
+ $_REQUEST['erreurs'][]=$msg;
+}
+
+/**
+ * Retoune le nombre de lignes du tableau des erreurs
+ * @return le nombre d'erreurs
+ */
+function nbErreurs(){
+ if (!isset($_REQUEST['erreurs'])){
+ return 0;
+ }
+ else{
+ return count($_REQUEST['erreurs']);
+ }
+}
+
+/** afficherErreurSQL :
+ Affichage de messages lors l'accès à la bdd avec une requete SQL
+ @param $message : message a afficher
+ @param $req : requete executee
+ @param $info : erreur constatee
+*/
+function afficherErreurSQL($message, $req, $info) {
+ echo $message . "
";
+ echo "Requete : " . $req . "
";
+ echo "Code erreur : " . $info[0] . ", Message : " . $info[2];
+ die();
+}
+?>
\ No newline at end of file
diff --git a/code/index.php b/code/index.php
new file mode 100644
index 0000000..582f929
--- /dev/null
+++ b/code/index.php
@@ -0,0 +1,35 @@
+
diff --git a/code/proceduresJava.js b/code/proceduresJava.js
new file mode 100644
index 0000000..a3e37e0
--- /dev/null
+++ b/code/proceduresJava.js
@@ -0,0 +1,248 @@
+// version modifiée le 17 decembre 2013 par Pascal Blain
+var ongletActif=1;
+// ========================= passer le focus à un champ
+function donner_focus(frm,champ) {
+ document.forms[frm].elements[champ].focus();
+ }
+// ========================= fonctions de navigation dans la liste de choix
+function premier(frm, liste) {
+ document.forms[frm].elements[liste].value = document.forms[frm].elements[liste].options[0].value;
+ document.forms[frm].submit();
+ }
+function precedent(frm, liste) {
+ document.forms[frm].elements[liste].value = document.forms[frm].elements[liste].options[Math.max(0,document.forms[frm].elements[liste].selectedIndex-1)].value;
+ document.forms[frm].submit();
+ }
+function suivant(frm, liste) {
+ document.forms[frm].elements[liste].value = document.forms[frm].elements[liste].options[(Math.min((document.forms[frm].elements[liste].options.length-1),document.forms[frm].elements[liste].selectedIndex+1))].value;
+ document.forms[frm].submit();
+ }
+function dernier(frm, liste) {
+ document.forms[frm].elements[liste].value = document.forms[frm].elements[liste].options[(document.forms[frm].elements[liste].options.length-1)].value;
+ document.forms[frm].submit();
+ }
+// =========================
+function faire(frm, action) {
+ document.forms[frm].action.value = action;
+ if(action=="supprimer") {alert("ATTENTION : \n demande de suppression \n cette action est irreversible !");}
+ document.forms[frm].submit();
+ }
+// =========================
+function validerAutre(frm, ordreAc, ordreCe, onglet)
+{
+ document.getElementById("zOrdreAc").value=ordreAc;
+ document.getElementById("zOrdreCe").value=ordreCe;
+ document.getElementById("zOnglet").value=onglet;
+ document.forms[frm].submit();
+}
+// =========================
+function voirListe(type, indice, colonne)
+{
+ document.forms["choixP"].zType.value=type;
+ document.forms["choixP"].zIndice.value=indice;
+ document.forms["choixP"].zColonne.value=colonne;
+ document.forms["choixP"].action.value = "liste";
+ document.forms["choixP"].submit();
+}
+
+// ========================= fonction annulation de saisie ou modification
+function annuler(frm){
+ document.forms[frm].elements["zOk"].value="nonOk";
+ document.forms[frm].submit();
+ }
+
+// ========================= validation des données d'un usager (version 2)
+function validerUsager(frm)
+{ //var champ=frm.elements["ztNom"];
+ if(!verifTexte(frm, frm.elements["ztNom"], 40)) {return false;}
+ else {if(!verifTexte(frm, frm.elements["ztPrenom"], 24)) {return false;}
+ else {if(!verifMail(frm, frm.elements["ztEMail"])) {return false;}
+ else {return true;}
+ }
+ }
+}
+// =========================
+function verifMail(frm, champ)
+{
+ var regex = /^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/;
+ if(regex.test(champ.value) || champ.value.length<1)
+ {surligne(champ, false); return true;}
+ else
+ {surligne(champ, true); return false;}
+}
+// ========================= fonctions de controle de validité d'un champ
+function surligne(frm, champ, erreur)
+{
+ if(erreur)
+ {champ.style.backgroundColor = "#f55"; alert("Champ '"+champ.id+"' incorrect ...\nMerci de corriger"); document.getElementById(champ.id).focus(); frm.elements["zOk"].value="nonOk";}
+ else
+ {champ.style.backgroundColor = "#fff"; frm.elements["zOk"].value="OK";}
+}
+
+// ========================= fonctions de controle de validité d'un champ texte (longueur)
+function verifTexte(frm, champ,longueur)
+{
+ if(champ.value.length < 2 || champ.value.length > longueur)
+ {surligne(frm, champ, true); return false;}
+ else
+ {surligne(frm, champ, false); return true;}
+}
+// ========================= fonctions de controle de validité du code postal
+function verifCP(frm, champ)
+{ var str = champ.value;
+ var insee = str.substring(0,5);
+ var dep = str.substring(0,2);
+ var cPostal = str.substring(6,11);
+ var secteur= str.substring(12,16);
+ var ville = str.substring(17,57);
+ var cp = parseInt(cPostal);
+ if(isNaN(cp) || cp < 1000 || cp > 99999) {surligne(frm, champ, true); alert(cp); return false;} //
+ else { surligne(frm, champ, false);
+ frm.elements["ztCP"].value =cPostal;
+ frm.elements["ztVille"].value =ville;
+ frm.elements["ztCommune"].value =insee;
+ frm.elements["departement"].value =dep;
+ if(frm.name="frmUsager")
+ {
+ for (var i=0;i'.$titre; ?>
+
+
+
+
+
+ ';
+ ?>
+
+
+
+
+
\ No newline at end of file
diff --git a/code/v_connexion.php b/code/v_connexion.php
new file mode 100644
index 0000000..1b0d2bb
--- /dev/null
+++ b/code/v_connexion.php
@@ -0,0 +1,19 @@
+
+ Merci de vous identifier pour accéder aux dossiers
+
+ + +
+ | "); + if ($nbP>=10) + { + echo(" ++ + | "); + } + echo(" +