Projet PHP : Structure et Fonctionnalités
Projet PHP : Structure et Fonctionnalités
Fichiers principaux :
o [Link] : Point d'entrée principal du site.
o [Link] : Fichier de styles pour la mise en page.
Base de données :
o [Link] : Gestion des connexions à la base de données.
o recrute_DB.sql : Script SQL pour créer la base de données.
Contrôleurs :
o Plusieurs fichiers dans le dossier controleur, probablement pour gérer différentes
fonctionnalités (annonces, candidatures, connexions, etc.).
Modèles :
o Des fichiers dans le dossier modele, probablement pour gérer les interactions avec la
base de données (annonces, candidats, managers, etc.).
Vues :
o Des fichiers dans le dossier vue, qui semblent gérer l'affichage des différentes pages du
site (accueil, offres, candidatures, etc.).
Ressources :
o Dossier images contenant des images comme des logos et des illustrations.
Le fichier [Link] est le point d'entrée principal du site. Voici une explication des premières lignes
et leur relation avec le reste :
[Link]
php
Copier le code
<?php
session_start();
$_SESSION['location'] = "[Link]
session_start() : Initialise une session PHP. C'est nécessaire pour stocker et gérer des données
utilisateur (comme leur rôle ou état de connexion).
$_SESSION['location'] : Définit une variable de session pour stocker l'URL de base du site.
php
Copier le code
if (!isset($_SESSION['role'])) {
$_SESSION['role'] = "visiteur";
}
Vérifie si l'utilisateur a un rôle assigné dans la session. Si ce n'est pas le cas, il est défini par
défaut comme "visiteur".
php
Copier le code
var_dump($_SESSION['role']);
if (($_SESSION['role'] == "candidat") || ($_SESSION['role'] == "manager")) {
$page5 = "vue_profil.php";
$sous5 = "Mon profil";
} else {
$page5 = "vue_connexion.php";
$sous5 = "Se connecter";}
php
Copier le code
if (!isset($title)) {
$title = "Fromsoftware Recrutement";
}
Définit un titre par défaut pour la page s'il n'a pas encore été initialisé.
php
Copier le code
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = 1;
}
Lit la valeur de la page demandée via la méthode GET (par exemple, [Link]?page=2).
Si aucune page n'est spécifiée, la valeur par défaut est 1.
php
Copier le code
switch ($page) {
case 1:
$title = "Fromsoftware Recrutement";
break;
case 2:
$title = "Nos offres d'emplois";
break;
case 3:
$title = "Candidatures spontanées";
break;
case 4:
$title = "À propos";
break;
case 5:
if ($page5 == "vue_profil.php") {
$title = "Mon profil";
} else {
$title = "Se connecter / S'inscrire";
}
break;
case 6:
$title = "Mon profil";
break;
case 7:
$title = "Détail offre";
break;
}
En fonction de la valeur de $_GET['page'], le titre de la page est mis à jour. Cela affecte la
présentation et le contenu affiché.
Les différents cas correspondent à des pages spécifiques (comme les offres d'emploi, le profil
utilisateur, etc.).
php
Copier le code
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $title; ?></title>
<link rel="stylesheet" href="[Link]">
</head>
<body>
Début du HTML : La structure HTML du site commence après la fermeture du bloc PHP (?>).
Balises <head> :
o <meta charset="UTF-8"> : Définit l'encodage des caractères comme UTF-8 pour
supporter les caractères spéciaux.
o <meta name="viewport" : Règle la mise en page pour s'adapter aux écrans mobiles.
o <title> : Affiche le titre dynamique défini précédemment dans l'onglet du navigateur.
o <link rel="stylesheet" href="[Link]"> : Charge le fichier de style pour la mise
en forme.
php
Copier le code
<header>
<h1><?php echo $title; ?></h1>
</header>
<nav>
<ul>
<li><a href="[Link]?page=1">Accueil</a></li>
<li><a href="[Link]?page=2">Offres d'emploi</a></li>
<li><a href="[Link]?page=3">Candidatures spontanées</a></li>
<li><a href="[Link]?page=4">À propos</a></li>
<li><a href="[Link]?page=5"><?php echo $sous5; ?></a></li>
</ul>
</nav>
php
Copier le code
<main>
<?php
switch ($page) {
case 1:
include("vue/vue_accueil.php");
break;
case 2:
include("vue/vue_offres.php");
break;
case 3:
include("vue/vue_candidature.php");
break;
case 4:
include("vue/vue_presentation.php");
break;
case 5:
include("vue/$page5");
break;
case 7:
include("vue/vue_detail.php");
break;
default:
include("vue/vue_accueil.php");
break;
}
?>
</main>
<footer> : Un pied de page simple, affichant un copyright et des informations sur le site.
1. Gestion des sessions : Détermine le rôle de l'utilisateur et adapte les options affichées.
2. Navigation dynamique : Basée sur la variable $_GET['page'], elle charge des sections
spécifiques via des inclusions PHP.
3. Modularité : Les fichiers de vue permettent de séparer le contenu (HTML) de la logique (PHP),
rendant le site maintenable.
4. Personnalisation : Le rôle de l'utilisateur influe sur le contenu affiché (comme les liens vers le
profil ou la connexion).
Indiquez le fichier que vous souhaitez explorer en priorité. Voici quelques suggestions basées sur leur
rôle :
Vues (affichage) :
o vue_accueil.php : Affichage de la page d'accueil.
o vue_offres.php : Affichage des offres d'emploi.
o vue_profil.php : Page du profil utilisateur.
Contrôleurs (logique) :
o [Link] : Gestion des annonces.
o [Link] : Gestion des candidatures.
Modèles (base de données) :
o [Link] : Accès à la base de données pour les annonces.
o [Link] : Gestion des candidats.
Structure du fichier
php
Copier le code
<div id="acceuil">
<h1>Bienvenue chez FROMSOFTWARE !</h1>
php
Copier le code
<?php
include('./parts/[Link]');
include_once("controleur/[Link]");
?>
php
Copier le code
<h2>Nos dernières offres !</h2>
<div class="row d-flex justify-content-around">
<?php
include_once("./controleur/[Link]");
$i = 0;
foreach ($allAnn as $value)
{
$i++;
echo'
<div class="col-3 acceuil-annonce">
<h3>' . $value['titre'] . '</h3>
<p class="loc-acceuil d-flex justify-content-start">Localisation :' .
$value['adresse'] . '</p>
<p class="type-acceuil d-flex justify-content-start">Type de contrat :' .
$value['typeCon'] . '</p>
<p class="desc-acceuil d-flex justify-content-start">description :' .
$value['description'] . '</p>
<p class="date-acceuil d-flex justify-content-end">' . $value['dateAnn'] . '</p>
<form action="controleur/[Link]" method="POST">
<input type="hidden" name="idA" value="' . $value['idAnnonce'] . '">
<input type="hidden" name="action" value="detail">
<input type="submit" value="Voir le détail de l\'annonce">
</form>
</div>
';
if ($i > 2) {
break;
}
}
?>
</div>
Ajoute un lien qui redirige vers la page des offres complètes ([Link]?page=2).
1. controleur/[Link] :
o Ce fichier est crucial pour récupérer les annonces. Il pourrait exécuter une requête SQL
pour obtenir les données nécessaires.
2. controleur/[Link] :
o Le formulaire d'annonce redirige ici pour afficher les détails d'une annonce spécifique.
3. parts/[Link] :
o Probablement une fonctionnalité de recherche permettant de filtrer les offres.
Vue profil
Contenu du fichier et analyse
1. <form action="controleur/[Link]" method="POST">
o Début d’un formulaire permettant de gérer la déconnexion.
o Les données du formulaire sont envoyées via la méthode POST au fichier
[Link].
2. <input type="hidden" name="action" value="deco">
o Champ caché indiquant que l’action à effectuer est la déconnexion (deco).
o Utilisé par le contrôleur pour identifier l’opération demandée.
3. <input type="submit" value="Se déconnecter">
o Bouton de soumission permettant à l’utilisateur de se déconnecter.
4. <table>
o Début d'un tableau affichant les informations du profil utilisateur.
5. <tr><th scope="row">Nom :</th><td><?= $_SESSION['nom']; ?></td></tr>
o Affiche le nom de l’utilisateur, récupéré depuis la session ($_SESSION['nom']).
6. <tr><th scope="row">Prénom :</th><td><?= $_SESSION['prenom']; ?></td></tr>
o Affiche le prénom de l’utilisateur, également récupéré depuis la session.
7. <tr><th scope="row">Adresse :</th><td><?= $_SESSION['adresse']; ?></td></tr>
o Affiche l’adresse de l’utilisateur.
8. <?php if($_SESSION['role']=='candidat'){ ?>
o Vérifie si l’utilisateur a un rôle de "candidat". Si oui, les informations spécifiques aux
candidats sont affichées.
9. <tr><th scope="row">Numéro de téléphone :</th><td><?= $_SESSION['tel'];
?></td></tr>
o Si l’utilisateur est un candidat, affiche son numéro de téléphone ($_SESSION['tel']).
10. <?php }?>
o Termine la condition PHP.
11. <tr><th scope="row">Email :</th><td><?= $_SESSION['email']; ?></td></tr>
o Affiche l’adresse email de l’utilisateur.
12. <?php if($_SESSION['role']=='candidat'){
o Une autre vérification du rôle "candidat".
13. $control="controleur/[Link]";
o Si l’utilisateur est un candidat, la variable $control est définie pour pointer vers le fichier
[Link], qui gère les modifications de mot de passe pour les candidats.
14. }else if($_SESSION['role']=='manager'){
o Si l’utilisateur est un manager, un autre contrôleur est utilisé.
15. $control="controleur/[Link]";
o Définit $control pour les managers, pointant vers [Link], qui gère les mots de
passe des managers.
16. }
o Fin de la condition PHP.
Disposition globale
6. .container { width: 80%; margin: auto; overflow: hidden; }
o Définit un conteneur central qui occupe 80 % de la largeur de la page.
o Centre horizontalement ce conteneur et masque les débordements de contenu.
7. .main { padding: 20px; background: #fff; }
o Ajoute un espace intérieur (padding) de 20 pixels.
o Définit un arrière-plan blanc pour la section .main.
8. .main h2 { text-align: center; padding: 20px 0; }
o Centre les titres h2 dans .main.
o Ajoute un espace vertical de 20 pixels en haut et en bas.
Section Patron
9. .patron { max-width: 1200px; margin: 0 auto; background-color: #fff; border-radius:
10px; padding: 20px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); }
o Crée une carte pour afficher des informations sur un "patron".
o Fixe une largeur maximale de 1200 pixels et centre horizontalement l'élément.
o Ajoute un rayon de bordure de 10 pixels et une ombre subtile pour donner un effet de
profondeur.
10. .patron-container { display: flex; align-items: center; justify-content: center; gap: 30px; }
o Active la disposition en flexbox pour organiser les éléments horizontalement.
o Centre les éléments verticalement et horizontalement, avec un espace de 30 pixels entre
eux.
11. `.patron-photo { width: 200px; height: 200px; object-fit: cover; border-radius: 50%; }
o Fixe la taille de l'image à 200x200 pixels.
o Utilise object-fit: cover pour s'assurer que l'image remplit les dimensions sans être
déformée.
o Rend l'image circulaire grâce à border-radius: 50%.
12. .patron-details { max-width: 700px; }
o Limite la largeur des détails du "patron" à 700 pixels.
13. .patron-details h2 { font-size: 1.8em; margin-bottom: 10px; }
o Définit la taille des h2 à 1,8 fois la taille de police par défaut.
o Ajoute un espacement en bas de 10 pixels.
14. .patron-details h3 { font-size: 1.2em; color: #555; margin-bottom: 20px; }
o Définit une taille légèrement plus grande pour les h3 et les colore en gris moyen.
15. .patron-details p { font-size: 1.1em; line-height: 1.6; }
o Agrandit légèrement la police des paragraphes et augmente l’interligne pour améliorer la
lisibilité.
Navbar et Recherche
16. .navbar { background-color: #BDBDBD !important; }
o Colore l’arrière-plan de la barre de navigation en gris clair.
o Utilise !important pour donner priorité à cette règle.
17. .nav-link { color: black !important; font-weight: 500; }
o Définit la couleur des liens de navigation en noir.
o Applique une épaisseur moyenne au texte des liens.
18. #search { color: black; border: none; border-left: solid grey 2px; border-radius: 0%;
background-color: #BDBDBD; }
o Définit le style pour le bouton de recherche.
o Supprime les bordures sauf une bordure gauche grise.
o Applique un fond gris clair.
19. #search:hover { background-color: grey; color: white; }
o Modifie l'apparence du bouton lorsqu'il est survolé : fond gris foncé et texte blanc.
20. #searchbar { width: 80%; border: solid grey 2px; }
o Définit une largeur de 80 % et une bordure grise pour la barre de recherche.
21. #searchinput { border: none; }
o Supprime les bordures du champ de saisie dans la barre de recherche.
Autres éléments
23. #image1 { background: url(images/[Link]); padding: 35px; }
o Définit une image d'arrière-plan pour un élément avec l’ID image1.
o Ajoute un padding de 35 pixels autour de son contenu.
24. .acceuil-annonce { background-color: #BDBDBD; border-radius: 2%; }
o Définit un style pour les annonces dans la section "accueil" avec un fond gris clair et des
coins légèrement arrondis.
25. .annonce { background-color: #BDBDBD; margin: 3% 0%; }
o Colore les cartes d’annonces en gris clair et ajoute une marge verticale de 3 %.
26. a { text-decoration: none; }
o Supprime le soulignement par défaut des liens.
Classe Annonce
php
Copier le code
class Annonce
{
function __construct($bdd)
{
$this->bdd = $bdd;
}
}
class Annonce : Déclare une classe nommée Annonce qui contiendra les méthodes de gestion
des annonces (CRUD).
function __construct($bdd) : Méthode spéciale appelée lors de l'instanciation de la classe.
Elle initialise la connexion à la base de données en stockant l'objet $bdd (une instance PDO)
dans l'attribut $this->bdd.
Méthode addAnn
php
Copier le code
public function addAnn($titre, $adresse, $typeCon, $description,$salaire,$duree,
$dateAnn,$idManager)
{
$req = $this->bdd->prepare("INSERT INTO Annonce (Titre, Adresse, TypeCon,
description, Salaire, Duree, DateAnn, IdManager) VALUES
(:titre , :adresse, :typeCon, :description, :salaire, :duree, :dateAnn, :idManager)
");
$req->bindParam(':titre', $titre);
$req->bindParam(':adresse', $adresse);
$req->bindParam(':typeCon', $typeCon);
$req->bindParam(':description', $description);
$req->bindParam(':salaire', $salaire);
$req->bindParam(':duree', $duree);
$req->bindParam(':dateAnn', $dateAnn);
$req->bindParam(':idManager', $idManager);
var_dump($req); // Affiche la requête SQL
return $req->execute();
}
Méthode allAnn
php
Copier le code
public function allAnn()
{
$req = $this->bdd->prepare("SELECT * FROM Annonce");
$req->execute();
return $req->fetchAll();
}
Méthode deleteAnn
php
Copier le code
public function deleteAnn($idA)
{
$req = $this->bdd->prepare("DELETE FROM Annonce WHERE idAnnonce = ?");
return $req->execute([$idA]);
}
deleteAnn : Supprime une annonce de la base de données selon son identifiant (idAnnonce).
execute([$idA]) : Exécute la requête en passant l'identifiant de l'annonce en paramètre.
Méthode updateAnn
php
Copier le code
public function updateAnn($titre, $adresse, $typeCon, $description, $salaire,
$duree, $idA)
{
$stmt = $this->bdd->prepare("UPDATE Annonce SET Titre = :titre, Adresse
= :adresse, TypeCon= :typeCon, description = :description, Salaire = :salaire,
Duree = :duree WHERE idAnnonce = :idA");
$stmt->bindParam(':titre', $titre);
$stmt->bindParam(':adresse', $adresse);
$stmt->bindParam(':typeCon', $typeCon);
$stmt->bindParam(':description', $description);
$stmt->bindParam(':salaire', $salaire);
$stmt->bindParam(':duree', $duree);
$stmt->bindParam(':idA', $idA);
return $stmt->execute();
}
updateAnn : Met à jour les informations d'une annonce selon son identifiant (idAnnonce).
Les paramètres sont liés à la requête SQL via bindParam pour sécuriser les entrées utilisateur.
La requête SQL UPDATE met à jour uniquement les champs spécifiés.
Méthode getAnnById
php
Copier le code
public function getAnnById($idA)
{
$stmt = $this->bdd->prepare('SELECT * FROM Annonce WHERE idAnnonce = ?');
$stmt->execute([$idA]);
return $stmt->fetch();
}
getAnnById : Récupère les informations d'une annonce spécifique en utilisant son identifiant.
fetch : Retourne le premier (et unique) résultat correspondant à la requête.
Cette classe implémente des opérations CRUD (Create, Read, Update, Delete) pour une table nommée
Annonce dans une base de données SQL. Elle utilise des requêtes préparées pour sécuriser les
interactions avec la base et assurer la modularité et la réutilisabilité du code.
Classe Candidat
class Candidat : Déclare une classe nommée Candidat contenant les méthodes CRUD pour
gérer les candidats.
function __construct($bdd) : Le constructeur initialise une connexion à la base de données.
L'objet $bdd (instance PDO) est passé comme argument et stocké dans la propriété $this->bdd.
Méthode addCand
php
Copier le code
public function addCand($nom, $prenom, $adresse, $tel, $email, $mdp)
{
$req = $this->bdd->prepare("INSERT INTO Candidat (Nom, Prenom, Adresse, Tel,
Email, Mdp) VALUES (:nom , :prenom, :adresse, :tel, :email, :mdp)");
$req->bindParam(':nom', $nom);
$req->bindParam(':prenom', $prenom);
$req->bindParam(':adresse', $adresse);
$req->bindParam(':tel', $tel);
$req->bindParam(':email', $email);
$req->bindParam(':mdp', $mdp);
return $req->execute();
}
Méthode allCand
php
Copier le code
public function allCand()
{
$req = $this->bdd->prepare("SELECT * FROM Candidat");
$req->execute();
return $req->fetchAll();
}
php
Copier le code
public function deleteCand($idC)
{
$req = $this->bdd->prepare("DELETE FROM Candidat WHERE idCandidat = ?");
return $req->execute([$idC]);
}
Méthode updateCand
php
Copier le code
public function updateCand($nom, $prenom, $adresse, $tel, $email, $idC)
{
$stmt = $this->bdd->prepare("UPDATE Candidat SET Nom = :nom, Prenom = :prenom,
Adresse = :adresse, Tel = :tel, Email = :email WHERE idCandidat = :idC");
$stmt->bindParam(':nom', $nom);
$stmt->bindParam(':prenom', $prenom);
$stmt->bindParam(':adresse', $adresse);
$stmt->bindParam(':tel', $tel);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':idC', $idC);
return $stmt->execute();
}
updateCand : Met à jour les informations personnelles d'un candidat. Notez que le mot de passe
n'est pas modifié ici.
La requête utilise des paramètres nommés sécurisés.
execute : Exécute la mise à jour et retourne un booléen (true si réussi).
Méthode updateMdp
php
Copier le code
public function updateMdp($mdp, $idC)
{
$stmt = $this->bdd->prepare("UPDATE Candidat SET Mdp = :mdp WHERE idCandidat
= :idC");
$stmt->bindParam(':mdp', $mdp);
$stmt->bindParam(':idC', $idC);
return $stmt->execute();
}
updateMdp : Met à jour le mot de passe du candidat. Cette action est séparée pour des raisons de
sécurité.
bindParam : Lie le mot de passe crypté et l'identifiant du candidat à la requête SQL.
execute : Exécute la requête de mise à jour.
Méthode getCandById
php
Copier le code
public function getCandById($email)
{
$stmt = $this->bdd->prepare("SELECT * FROM Candidat WHERE Email = ?");
$stmt->execute([$email]);
$candidat = $stmt->fetch(PDO::FETCH_ASSOC);
return $candidat ?: null; // Retourne null si aucun résultat trouvé
}
Objectif général
Cette classe fournit une interface pour gérer les informations des candidats dans la base de données :
Les méthodes utilisent des requêtes préparées pour éviter les failles de sécurité (ex. injections SQL).
Classe Candidature
Déclaration de la classe et constructeur
php
Copier le code
class Candidature
{
function __construct($bdd)
{
$this->bdd = $bdd;
}
}
class Candidature : Déclare une classe nommée Candidature, qui gère les opérations CRUD
pour les candidatures.
function __construct($bdd) : Le constructeur initialise une connexion à la base de données
en recevant une instance PDO ($bdd) et la stocke dans $this->bdd.
Méthode ajouterCandidature
php
Copier le code
public function ajouterCandidature($cv, $motivation, $extraDoc)
{
$req = $this->bdd->prepare("INSERT INTO candidature (Cv, Motivation, ExtraDoc)
VALUES (:cv , :motivation, :extraDoc)");
$req->bindParam(':cv', $cv, PDO::PARAM_LOB);
$req->bindParam(':motivation', $motivation, PDO::PARAM_LOB);
$req->bindParam(':extraDoc', $extraDoc, PDO::PARAM_LOB);
return $req->execute();
}
Méthode allCandidature
php
Copier le code
public function allCandidature()
{
$req = $this->bdd->prepare("SELECT * FROM candidature");
$req->execute();
return $req->fetchAll();
}
Méthode supprimerCandidature
php
Copier le code
public function supprimerCandidature($id)
{
$req = $this->bdd->prepare("DELETE FROM candidature WHERE ID_Candidature = ?");
return $req->execute([$id]);
}
supprimerCandidature : Supprime une candidature de la table en fonction de son identifiant
(ID_Candidature).
execute([$id]) : Remplace le ? dans la requête SQL par la valeur de $id.
Méthode updateCandidature
php
Copier le code
public function updateCandidature($cv, $motivation, $extraDoc, $id)
{
$stmt = $this->bdd->prepare("UPDATE candidature SET Cv = :cv, Motivation
= :motivation, ExtraDoc = :extraDoc WHERE ID_Candidature = :id");
$stmt->bindParam(':cv', $cv, PDO::PARAM_LOB);
$stmt->bindParam(':motivation', $motivation, PDO::PARAM_LOB);
$stmt->bindParam(':extraDoc', $extraDoc, PDO::PARAM_LOB);
$stmt->bindParam(':id', $id);
return $stmt->execute();
}
updateCandidature : Met à jour les informations d'une candidature (CV, lettre de motivation et
documents supplémentaires).
bindParam : Associe les données des paramètres nommés dans la requête SQL.
PDO::PARAM_LOB : Spécifie que les colonnes contiennent des données volumineuses comme des
fichiers.
Méthode getCandidatureById
php
Copier le code
public function getCandidatureById($id)
{
$stmt = $this->bdd->prepare('SELECT * FROM candidature WHERE ID_Candidature
= ?');
$stmt->execute([$id]);
return $stmt->fetch();
}
Objectif général
La classe Candidature fournit des méthodes pour gérer les candidatures dans une base de données :
Les champs comme Cv, Motivation et ExtraDoc utilisent PDO::PARAM_LOB, indiquant qu'ils
peuvent contenir de gros fichiers ou du texte volumineux.
Toutes les requêtes sont préparées pour prévenir les injections SQL.
Classe Manager
Déclaration de la classe et constructeur
php
Copier le code
class Manager
{
function __construct($bdd)
{
$this->bdd = $bdd;
}
}
class Manager : Déclare une classe nommée Manager pour gérer les managers dans une base de
données.
function __construct($bdd) : Le constructeur initialise une connexion à la base de données en
recevant une instance PDO ($bdd). Cette instance est stockée dans la propriété $this->bdd pour
être utilisée dans les méthodes de la classe.
Méthode getManById
php
Copier le code
public function getManById($email, $mdp)
{
$stmt = $this->bdd->prepare("SELECT * FROM Manager WHERE email = ?");
$stmt->execute([$email]);
$manager = $stmt->fetch(PDO::FETCH_ASSOC);
return $manager ?: null; // Retourne null si aucun résultat trouvé
}
getManById : Récupère les informations d'un manager dans la table Manager en fonction de
son adresse e-mail.
prepare : Prépare une requête SQL sécurisée pour éviter les injections SQL.
execute([$email]) : Exécute la requête en remplaçant le ? par la valeur de $email.
fetch(PDO::FETCH_ASSOC) : Récupère la première ligne correspondante sous forme de
tableau associatif.
return $manager ?: null : Si aucun manager n'est trouvé, retourne null.
Méthode updateMdp
php
Copier le code
public function updateMdp($mdp, $idM)
{
$stmt = $this->bdd->prepare("UPDATE Manager SET mdp = :mdp WHERE idManager = :idM");
$stmt->bindParam(':mdp', $mdp);
$stmt->bindParam(':idM', $idM);
return $stmt->execute();
}
updateMdp : Met à jour le mot de passe d'un manager dans la table Manager.
prepare : Prépare une requête SQL sécurisée pour éviter les failles de sécurité.
bindParam :
o :mdp : Lie le nouveau mot de passe à la requête.
o :idM : Lie l'identifiant du manager pour cibler la ligne à mettre à jour.
execute : Exécute la requête et retourne true si la mise à jour réussit.
Objectif général
La classe Manager offre des méthodes pour :
1. Lecture : Récupérer les informations d'un manager grâce à l'adresse e-mail avec getManById.
2. Mise à jour : Modifier le mot de passe d'un manager avec updateMdp.
Sécurité
Les méthodes utilisent des requêtes préparées avec PDO, ce qui protège contre les injections
SQL.
Le mot de passe est traité avec soin dans les méthodes (on suppose qu'il est hashé avant d'être
passé à updateMdp).
Suggestions d'amélioration
Ajouter une méthode pour ajouter de nouveaux managers (addManager).
Inclure une vérification plus stricte sur le mot de passe dans getManById pour l'utiliser dans une
logique d'authentification.
Index
1. session_start() : Lance une session pour permettre de stocker et accéder à des variables de
session.
2. $_SESSION['location'] : Définit une variable de session contenant l'URL de base du site.
3. if (!isset($_SESSION['role'])) : Vérifie si le rôle n'est pas encore défini dans la session.
o Si absent, définit le rôle par défaut en tant que "visiteur".
4. var_dump($_SESSION['role']) : Affiche le rôle actuel pour déboguer.
Définition des variables en fonction du rôle
php
Copier le code
if(($_SESSION['role']== "candidat") ||($_SESSION['role']== "manager")){
$page5="vue_profil.php";
$sous5="Mon profil";
}else{
$page5="vue_connexion.php";
$sous5="Se connecter";
}
1. Définit un titre par défaut si la variable $title n’est pas déjà définie.
2. Récupère la valeur de page dans l’URL via $_GET. Si aucune valeur n'est trouvée, la page par
défaut est 1.
1. Charge dynamiquement les pages de contenu selon la valeur de page passée dans l’URL.
2. Les fichiers inclus sont placés dans le répertoire vue.
Pied de page
html
Copier le code
<footer>
<p>FROM SOFTWARE © 2024. Tous droits réservés.</p>
</footer>
</html>
Vue candidature
1. <center>
Description : Centre le contenu qui suit horizontalement.
Usage : Permet de centrer visuellement le contenu, ici le titre <h1>Postuler</h1>.
Remarque : L'utilisation de <center> est considérée comme obsolète dans HTML5.
On recommande plutôt l'usage de CSS (ex. : text-align: center;).
2. <h1>Postuler</h1>
Description : Crée un titre principal de niveau 1, affiché en grand.
Usage : Le titre "Postuler" informe l'utilisateur du but du formulaire.
o Attributs :
action : Spécifie le fichier PHP où les données du formulaire seront
envoyées pour traitement.
method="post" : Définit la méthode HTTP pour l'envoi, ici POST,
utilisée pour transmettre des données sensibles.
enctype="multipart/form-data" : Permet d'envoyer des fichiers
(nécessaire pour les champs <input type="file">).
Usage : Prépare l'envoi des données (CV, lettre, etc.) au script
[Link].
4. <div id="candidature">
Description : Délimite une section du formulaire et lui attribue l’identifiant
candidature.
Usage : Permet d'appliquer un style ou une logique spécifique à cette section.
6. <br><br>
Description : Insère deux sauts de ligne.
Usage : Espacement visuel entre les éléments pour améliorer la lisibilité.
o Attributs :
o Attributs :
o Attributs :
14. </div>
Description : Ferme la division div ouverte en ligne 4.
Usage : Termine la section du formulaire associée à la candidature.
15. </form>
Description : Ferme le formulaire commencé à la ligne 3.
Usage : Indique la fin des champs de saisie et options d'envoi.
Vue acceuil
1. <div id="acceuil">
Description : Ouvre une section avec l’identifiant acceuil.
Usage : Permet d'appliquer un style ou de cibler cette section via CSS ou
JavaScript.
o Classes utilisées :
6.
php
Copier le code
<?php
include_once("./controleur/[Link]");
$i=0;
foreach ($allAnn as $value)
{
Description :
o include_once("./controleur/[Link]") : Recharge les données des
annonces.
o $i=0; : Initialise un compteur pour limiter le nombre d'annonces affichées.
7.
php
Copier le code
$i++;
echo'
<div class="col-3 acceuil-annonce">
<h3>'.$value['titre'].'</h3>
<p class="loc-acceuil d-flex justify-content-start">Localisation
:'.$value['adresse'].'</p>
<p class="type-acceuil d-flex justify-content-start">Type de contrat :'.
$value['typeCon'].'</p>
<p class="desc-acceuil d-flex justify-content-start">description :'.
$value['description'].'</p>
<p class="date-acceuil d-flex justify-content-end">'.$value['dateAnn'].'</p>
<form action="controleur/[Link]" method="POST">
<input type="hidden" name="idA" value="'.$value['idAnnonce'].'">
<input type="hidden" name="action" value="detail">
<input type="submit" value="Voir le détail de l\'annonce">
</form>
</div>
';
Description :
o echo : Affiche dynamiquement une carte pour chaque annonce.
o Classes utilisées :
Titre ($value['titre']).
Localisation ($value['adresse']).
Type de contrat ($value['typeCon']).
Description ($value['description']).
Date de publication ($value['dateAnn']).
o Formulaire :
8.
php
Copier le code
if($i>2){
break;
}
Description : Vérifie si plus de deux annonces ont été affichées. Si c'est le cas, la
boucle foreach s'arrête.
Usage : Limite l'affichage à trois annonces maximum.
9.
php
Copier le code
?>
<a href="./[Link]?page=2">Voir plus d'offres ?</a>
Description :
o Ferme la boucle PHP.
10. </div>
Description : Ferme la division ouverte en ligne 5.
Usage : Termine la rangée des annonces.
En résumé :
Ce code crée une section d'accueil affichant un message de bienvenue et une liste des
trois dernières offres d'emploi. Chaque annonce est affichée dans une carte avec des
détails essentiels et un bouton pour voir plus d'informations. Si l'utilisateur souhaite voir
toutes les offres, un lien le redirige vers une page dédiée.