CARIA.2.1

MAJ 2.1
Formulaires :
- Ajout mutliple conditions de validation  BACK-END
- Amélioration des conditions de réservations de véhicule
- MAJ Front-End
- Modification des règles pour les caractères accépté dans l'inscription
- bug d'enregistrement d'image résolu
DB :
- Modification des règles dans réservations
- Ajout de nouvelles entrée en base
General :
- Ajout de nouveaux messages d'erreurs possible
- Deplacement du bloc de visualisation des utilisateurs
- Ajout carte des vehicule sur la page de connexion
- Ajout de nouvelles images au véhicules
- Ajout des mentions légals
---
Résolution de bugs...
This commit is contained in:
ccunatbrule
2024-05-31 15:24:31 +02:00
parent b2f6dd412b
commit 121bade1a9
117 changed files with 1321 additions and 902 deletions
+1
View File
@@ -0,0 +1 @@
Thumbs.db
+1 -1
View File
@@ -2,7 +2,7 @@
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=IP:3307;dbname=CARIA', 'user', 'mdp',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$bdd = new PDO('mysql:host=IP:3307;dbname=CARIA', 'USER', 'MDP',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch(Exception $e)
{
Binary file not shown.
+21 -17
View File
@@ -5,20 +5,28 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$pseudoCo = $_POST['pseudo_connect'] ?? '';
$passwordCo = $_POST['password_connect'] ?? '';
// Vérification des identifiants
// Vérification des identifiants en utilisant la méthode checkCredentials()
$connexionModel = new Connexion();
$userData = $connexionModel->check_Password($pseudoCo);
// Vérifier si l'utilisateur est bloqué
if ($connexionModel->isUserBlocked($pseudoCo)) {
// Afficher un message d'erreur indiquant que l'utilisateur est bloqué
require './vue/connexion.html';
displayBlockedMessage();
exit(); // Arrêter l'exécution du script
}
$userData = $connexionModel->check_Password($pseudoCo);
if ($userData && $connexionModel->checkCredentials($pseudoCo, $passwordCo)) {
// Les identifiants sont corrects, connecter l'utilisateur
//require_once './vue/home.html';
// displaySuccessMessage();
connectUser($userData);
} else {
// Enregistrer une tentative de connexion infructueuse
$connexionModel->recordFailedLoginAttempt($pseudoCo);
// Afficher un message d'erreur en cas de connexion échouée
require './vue/connexion.html';
displayErrorMessage();
}
}
}
// Fonction pour connecter l'utilisateur
function connectUser($userData) {
@@ -52,31 +60,27 @@ function displayErrorMessage() {
});
</script>';
}
// Fonction pour afficher un message de succès
function displaySuccessMessage() {
// Fonction pour afficher un message de bloquage
function displayBlockedMessage() {
echo '<script>
document.addEventListener("DOMContentLoaded", function() {
var messageDiv = document.getElementById("message");
var successMessage = `
<div class="alert alert-success">
var blockedMessage = `
<div class="alert alert-danger">
<section id="content" class="page-content">
<div class="card text-center">
<div class="card-header">
<h3>Connexion réussie</h3>
<h3>Connexion bloquée</h3>
</div>
<div class="card-body">
<p>Bonjour ' . htmlspecialchars($_SESSION['pseudo_session'], ENT_QUOTES, 'UTF-8') . '.</p>
<p>Votre compte a été temporairement bloqué en raison de trop de tentatives de connexion infructueuses. Veuillez réessayer plus tard.</p>
</div>
</div>
</section>
</div>
`;
messageDiv.innerHTML = successMessage;
// Redirection après un délai
setTimeout(function() {
window.location.href = "index.php";
}, 3000); // 3 secondes
messageDiv.innerHTML = blockedMessage;
});
</script>';
}
?>
?>
+170 -54
View File
@@ -1,64 +1,180 @@
<?php
require_once './modele/profil.php';
require_once './modele/vehicule.php';
// Gestion des requêtes POST pour la suppression des véhicules
require_once './modele/profil.php';
require_once './modele/vehicule.php';
// Récupérer les informations sur les véhicules et les utilisateurs
// Initialisation des variables
$TotalDesMembres = get_MemberCount();
$TotalDesVehicules = get_VehiculesCount();
$data = get_LastMember();
$derniermembre = htmlspecialchars(stripslashes($data['pseudo']), ENT_QUOTES, 'UTF-8');
$vehicules = get_CarsInfo();
$cars = get_CarsInfo();
$users = get_ProfilsInfo();
$errors = [];
// Gestion des requêtes POST pour la suppression des véhicules
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_vehicule'])) {
$id = (int)$_POST['vehicule_id'];
post_RemoveVehicule($id);
header("Location: gestion.php"); // Redirigez vers la page appropriée après la suppression
exit();
}
####################
# Liste des véhicules de la compagnie #
$cars = get_CarsInfo(); // Récupère les informations sur les vehicules depuis le modèle pour afficher toutes les voitures
$users = get_ProfilsInfo(); // Récupère les informations sur les vehicules depuis le modèle pour afficher toutes les voitures
####################
# Formulaire pour les nouveaux véhicules #
if (empty($_POST['plaque'])) { // Si la variable est vide, on peut considérer qu'on est sur la page de formulaire
} else { // On est dans le cas traitement
$plaque_erreur1 = NULL;
$plaque_erreur2 = NULL;
$image_erreur3 = NULL;
// On récupère les variables
$i = 0;
$extensions_valides = array('jpg', 'jpeg', 'gif', 'png');
$plaque = $_POST['plaque'];
$marque = $_POST['marque'];
$modele = $_POST['modele'];
$annee = $_POST['annee'];
// Vérification des champs du formulaire
$plaque_free = get_checkPlaque();
if (!$plaque_free) {
$plaque_erreur1 = "Votre immatriculation est déjà utilisée par un vehicule";
$i++;
try {
// Assurez-vous que vehicule_id est défini et est un nombre valide
if (!isset($_POST['vehicule_id']) || !is_numeric($_POST['vehicule_id'])) {
throw new Exception("ID de véhicule invalide.");
}
// Convertir l'ID en entier de manière sécurisée
$id = (int)$_POST['vehicule_id'];
// Suppression du véhicule
post_RemoveVehicule($id);
// Inclure le fichier de vue et afficher le message de succès
require_once './vue/gestion.html';
displayDeleteVehiculeSuccessMessage();
exit();
} catch (Exception $e) {
// En cas d'erreur, inclure le fichier de vue et afficher le message d'erreur
require_once './vue/gestion.html';
displayAddVehiculeErrorMessage(["Une erreur est survenue lors de la suppression du véhicule : " . $e->getMessage()]);
}
}
// Formulaire pour les nouveaux véhicules
if (!empty($_POST['plaque'])) {
try {
$plaque = $_POST['plaque'];
$marque = $_POST['marque'];
$modele = $_POST['modele'];
$annee = $_POST['annee'];
// Validation des champs du formulaire
if (empty($plaque) || strlen($plaque) < 7 || strlen($plaque) > 9) {
$errors[] = "L'immatriculation doit comporter entre 7 et 9 caractères.";
}
if (empty($marque) || strlen($marque) < 2 || strlen($marque) > 50) {
$errors[] = "La marque doit comporter entre 2 et 50 caractères.";
}
if (empty($modele) || strlen($modele) < 2 || strlen($modele) > 50) {
$errors[] = "Le modèle doit comporter entre 2 et 50 caractères.";
}
if (empty($annee) || !preg_match('/^\d{4}$/', $annee)) {
$errors[] = "L'année doit être un nombre de 4 chiffres.";
}
if (!get_checkPlaque()) {
$errors[] = "Votre immatriculation est déjà utilisée par un véhicule.";
}
if (!empty($_FILES['image']['size'])) {
$extension_upload = strtolower(substr(strrchr($_FILES['image']['name'], '.'), 1));
// Vérification de la taille maximale du fichier (par exemple, 5 Mo)
$maxFileSize = 5 * 1024 * 1024; // 5 Mo en octets
if ($_FILES['image']['size'] > $maxFileSize) {
$errors[] = "La taille de l'image dépasse la limite autorisée de 5 Mo.";
}
// Vérification de l'extension du fichier
$extensions_valides = array('jpg', 'jpeg', 'gif', 'png');
$extension_upload = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION));
if (!in_array($extension_upload, $extensions_valides)) {
$i++;
$image_erreur3 = "Extension de l'image incorrecte";
$errors[] = "Extension de l'image incorrecte. Seules les extensions JPG, JPEG, GIF et PNG sont autorisées.";
}
// Vérification du type MIME du fichier
$allowedMimeTypes = array('image/jpeg', 'image/png', 'image/gif');
$fileMimeType = mime_content_type($_FILES['image']['tmp_name']);
if (!in_array($fileMimeType, $allowedMimeTypes)) {
$errors[] = "Type de fichier non pris en charge. Veuillez télécharger une image au format JPG, JPEG, GIF ou PNG.";
}
}
if ($i == 0) {
// Message de réussite
echo '
<script>
alert("Ajout du véhicule terminé.\n\n Le véhicule ' . addslashes(htmlspecialchars($_POST['plaque'])) . ' a été ajouté au véhicule de la plateforme.");
</script>';
// Inclure à nouveau le formulaire pour permettre à l'utilisateur de ressaisir des valeurs
post_RegistreCar();
header("Location: gestion.php"); // Redirigez vers la page appropriée après la suppression
exit();
} else {
// Affichage des erreurs
$errorMessages = '';
if ($plaque_erreur1) $errorMessages .= "$plaque_erreur1";
if ($image_erreur3) $errorMessages .= "$image_erreur3";
echo '
<script>
alert("' . $i . ' erreurs s\'est produites lors de l\'ajout du véhicule.\n\n' . addslashes($errorMessages) . '");
</script>';
if (empty($errors)) {
// Enregistrement du véhicule
post_RegistreCar();
require_once './vue/gestion.html';
displayAddVehiculeSuccessMessage();
exit();
} else {
require_once './vue/gestion.html';
displayAddVehiculeErrorMessage($errors);
}
} catch (Exception $e) {
// Afficher les messages d'erreur
require_once './vue/gestion.html';
displayAddVehiculeErrorMessage(["Une erreur est survenue lors de l'enregistrement du véhicule."]);
}
}
require './vue/gestion.html';
// Fonction pour afficher un message de succès
function displayDeleteVehiculeSuccessMessage() {
echo '<script>
document.addEventListener("DOMContentLoaded", function() {
var messageDiv = document.getElementById("message");
var successMessage = `
<div class="alert alert-success">
<section id="content" class="page-content">
<div class="card text-center">
<div class="card-header">
<h3>Suppression du véhicule terminé</h3>
</div>
<div class="card-body">
<h5>Le véhicule ' . addslashes(htmlspecialchars($_POST['plaque'])) . ' a été supprimé de la plateforme.</h5><br>
</div>
</div>
</section>
</div>
`;
messageDiv.innerHTML = successMessage;
// Redirection après un délai
setTimeout(function() {
window.location.href = "gestion.php";
}, 2000); // 2 secondes
});
</script>';
}
// Fonction pour afficher un message d'erreur
function displayAddVehiculeErrorMessage($errors) {
echo '<script>document.addEventListener("DOMContentLoaded", function() {
var messageDiv = document.getElementById("message");
var errorMessage = `<div class="alert alert-danger">
<section id="content" class="page-content">
<div class="card text-center">
<div class="card-header">
<h3>Ajout du véhicule interrompu</h3>
</div>
<div class="card-body">
<p>Erreur(s) dans le formulaire d\'ajout de véhicule :</p>
<ul style="list-style-type:none;">'; // Début de la liste d'erreurs
foreach ($errors as $error) {
echo "<li>" . htmlspecialchars($error, ENT_QUOTES, 'UTF-8') . "</li>"; // Ajout de chaque erreur à la liste
}
echo ' </ul>
</div>
</div>
</section>
</div>
`;
messageDiv.innerHTML = errorMessage;
});
</script>';
}
// Fonction pour afficher un message de succès
function displayAddVehiculeSuccessMessage() {
echo '<script>
document.addEventListener("DOMContentLoaded", function() {
var messageDiv = document.getElementById("message");
var successMessage = `
<div class="alert alert-success">
<section id="content" class="page-content">
<div class="card text-center">
<div class="card-header">
<h3>Ajout du véhicule terminé</h3>
</div>
<div class="card-body">
<h5>Le véhicule ' . addslashes(htmlspecialchars($_POST['plaque'])) . ' a été ajouté au véhicule de la plateforme.</h5><br>
</div>
</div>
</section>
</div>
`;
messageDiv.innerHTML = successMessage;
// Redirection après un délai
setTimeout(function() {
window.location.href = "gestion.php";
}, 2000); // 3 secondes
});
</script>';
}
require_once './vue/gestion.html';
?>
+1 -5
View File
@@ -1,12 +1,8 @@
<?php
require_once './modele/vehicule.php';
require_once './modele/profil.php';
// Initialisation des variables
$TotalDesMembres = get_MemberCount();
$TotalDesVehicules = get_VehiculesCount();
$data = get_LastMember();
$derniermembre = htmlspecialchars(stripslashes($data['pseudo']), ENT_QUOTES, 'UTF-8');
$vehicules = get_CarsInfo();
// Vérification de la session utilisateur
if (isset($id_session) && $id_session != 0) {
require './vue/home.html';
+139 -55
View File
@@ -1,83 +1,166 @@
<?php
require_once './modele/profil.php';
// Fonction pour vérifier si le pseudo est disponible
function isPseudoAvailable($pseudo) {
$pseudo_free = get_checkPseudo();
if (!$pseudo_free) {
return false; // Pseudo non disponible
}
return true; // Pseudo disponible
}
// Fonction pour vérifier si l'email est disponible
function isEmailAvailable($email) {
$mail_free = get_checkMail();
if (!$mail_free) {
return false; // Email non disponible
}
return true; // Email disponible
}
// Fonction pour vérifier l'extension de l'avatar
function isValidAvatarExtension($filename, $extensions_valides) {
$extension_upload = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
return in_array($extension_upload, $extensions_valides);
}
// Fonction pour inscrire l'utilisateur
function inscriptionUser($userData) {
global $bdd;
// Enregistrement de l'utilisateur
post_Registre();
post_Registre(
$userData['pseudo'],
$userData['password'],
$userData['email'],
$userData['localisation'],
$userData['prenom'],
$userData['nom'],
$userData['phone'],
$userData['avatar']
);
// Définition des variables de session
$_SESSION['pseudo_session'] = $userData['pseudo'];
$_SESSION['id_session'] = $bdd->lastInsertId(); // Assurez-vous d'avoir accès à $bdd ici
$_SESSION['privilege_session'] = 2;
}
// Traitement de l'inscription
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$errors = [];
// On récupère les variables
$extensions_valides = array('jpg', 'jpeg', 'gif', 'png');
$pseudo = $_POST['pseudo'];
$email = $_POST['email'];
$localisation = $_POST['localisation'];
$prenom = $_POST['prenom'];
$nom = $_POST['nom'];
$pass = md5($_POST['password']);
$confirm = md5($_POST['confirm']);
// Validation du pseudo
if (!isPseudoAvailable($pseudo)) {
// Validation de la taille et de la présence des champs
$nom = trim($_POST['nom']);
$prenom = trim($_POST['prenom']);
$pseudo = trim($_POST['pseudo']);
$email = trim($_POST['email']);
$password = $_POST['password'];
$confirm = $_POST['confirm'];
$localisation = trim($_POST['localisation']);
$phone = trim($_POST['phone']);
if (empty($nom) || strlen($nom) < 3 || strlen($nom) > 25) {
$errors[] = "Le nom est requis et doit contenir entre 3 et 25 caractères.";
}
if (!preg_match('/^[A-Za-zÀ-ÖØ-öø-ÿ0-9 -]+$/', $nom)) {
$errors[] = "Le nom peut contenir uniquement des lettres, des chiffres, des tirets et des espaces.";
}
if (preg_match('/^\s+$/', $nom)) {
$errors[] = "Le nom ne peut pas être composé uniquement d'espaces.";
}
if (empty($prenom) || strlen($prenom) < 3 || strlen($prenom) > 25) {
$errors[] = "Le prénom est requis et doit contenir entre 3 et 25 caractères.";
}
if (!preg_match('/^[A-Za-zÀ-ÖØ-öø-ÿ0-9 -]+$/', $prenom)) {
$errors[] = "Le prénom peut contenir uniquement des lettres, des chiffres, des tirets et des espaces.";
}
if (preg_match('/^\s+$/', $prenom)) {
$errors[] = "Le prénom ne peut pas être composé uniquement d'espaces.";
}
if (empty($pseudo) || strlen($pseudo) < 3 || strlen($pseudo) > 25) {
$errors[] = "Le pseudo est requis et doit contenir entre 3 et 25 caractères.";
}
if (!ctype_alnum($pseudo)) {
$errors[] = "Le pseudo ne doit contenir que des lettres alphabétiques ou des chiffres.";
}
if (!get_checkPseudo($pseudo)) {
$errors[] = "Votre pseudo est déjà utilisé par un membre.";
}
// Validation du mot de passe
if ($pass !== $confirm || empty($confirm) || empty($pass)) {
$errors[] = "Votre mot de passe et la confirmation sont différents, ou sont vides.";
if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "L'adresse e-mail est requise et doit être valide.";
}
// Validation de l'email
if (!isEmailAvailable($email)) {
if (!get_checkMail($email)) {
$errors[] = "Votre adresse email est déjà utilisée par un membre.";
}
// Validation de l'avatar s'il est uploadé
if (empty($password) || strlen($password) < 6 || strlen($password) > 32) {
$errors[] = "Le mot de passe est requis et doit contenir entre 6 et 32 caractères.";
}
if (!preg_match('/^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*?&]).+$/', $password)) {
$errors[] = "Le mot de passe doit contenir au moins une lettre, un chiffre et un caractère spécial (@$!%*?&)";
}
if ($password !== $confirm) {
$errors[] = "Les mots de passe ne correspondent pas.";
}
// Gestion des espaces vides pour le numéro de téléphone
if (empty($phone) || strlen($phone) < 10 || strlen($phone) > 15) {
$errors[] = "Le numéro de téléphone est requis et doit contenir entre 10 et 15 caractères.";
}
if (preg_match('/^\s+$/', $phone)) {
$errors[] = "Le numéro de téléphone ne peut pas être composé uniquement d'espaces.";
}
if (!preg_match('/^\d+$/', $phone)) {
$errors[] = "Le numéro de téléphone ne doit contenir que des chiffres.";
}
if (empty($localisation) || strlen($localisation) < 6 || strlen($localisation) > 50) {
$errors[] = "L'adresse postale est requise et doit contenir entre 6 et 50 caractères.";
}
if (!preg_match('/^[A-Za-zÀ-ÖØ-öø-ÿ0-9 ]+$/', $localisation)) {
$errors[] = "L'adresse postale peut contenir uniquement des lettres, des chiffres et des espaces.";
}
if (preg_match('/^\s+$/', $localisation)) {
$errors[] = "L'adresse ne peut pas être composé uniquement d'espaces.";
}
if (!empty($_FILES['avatar']['size'])) {
if (!isValidAvatarExtension($_FILES['avatar']['name'], $extensions_valides)) {
$errors[] = "Extension de l'avatar incorrecte.";
// Vérification de la taille maximale du fichier (par exemple, 5 Mo)
$maxFileSize = 5 * 1024 * 1024; // 5 Mo en octets
if ($_FILES['avatar']['size'] > $maxFileSize) {
$errors[] = "La taille de l'avatar dépasse la limite autorisée de 5 Mo.";
}
// Vérification de l'extension du fichier
$extensions_valides = array('jpg', 'jpeg', 'gif', 'png');
$extension_upload = strtolower(pathinfo($_FILES['avatar']['name'], PATHINFO_EXTENSION));
if (!in_array($extension_upload, $extensions_valides)) {
$errors[] = "Extension de l'avatar incorrecte. Seules les extensions JPG, JPEG, GIF et PNG sont autorisées.";
}
// Vérification du type MIME du fichier
$allowedMimeTypes = array('image/jpeg', 'image/png', 'image/gif');
$fileMimeType = mime_content_type($_FILES['avatar']['tmp_name']);
if (!in_array($fileMimeType, $allowedMimeTypes)) {
$errors[] = "Type de fichier non pris en charge. Veuillez télécharger une image au format JPG, JPEG, GIF ou PNG.";
}
}
require_once './vue/inscription.html';
if (empty($errors)) {
$userData = [
'pseudo' => $pseudo,
'password' => $password,
'email' => $email,
// Autres champs du formulaire
'localisation' => $localisation,
'prenom' => $prenom,
'nom' => $nom,
'phone' => $_POST['phone'],
'avatar' => $_FILES['avatar']
];
require_once './vue/inscription.html';
inscriptionUser($userData);
displayInscriptionSuccessMessage();
exit;
inscriptionUser($userData);
displayInscriptionSuccessMessage();
exit;
}
}
// Affichage du formulaire d'inscription avec les éventuelles erreurs
require_once './vue/inscription.html';
if (!empty($errors)) {
displayInscriptionErrorMessage($errors);
}
// Fonction pour afficher un message d'erreur
function displayInscriptionErrorMessage($errors) {
echo '<script>document.addEventListener("DOMContentLoaded", function() {
@@ -94,16 +177,17 @@ function displayInscriptionErrorMessage($errors) {
foreach ($errors as $error) {
echo "<li>" . htmlspecialchars($error, ENT_QUOTES, 'UTF-8') . "</li>"; // Ajout de chaque erreur à la liste
}
echo ' </ul>
</div>
</div>
</section>
</div>
`;
messageDiv.innerHTML = errorMessage;
});
echo ' </ul>
</div>
</div>
</section>
</div>
`;
messageDiv.innerHTML = errorMessage;
});
</script>';
}
// Fonction pour afficher un message de succès
function displayInscriptionSuccessMessage() {
echo '<script>
@@ -132,4 +216,4 @@ function displayInscriptionSuccessMessage() {
});
</script>';
}
?>
?>
+136 -71
View File
@@ -1,22 +1,29 @@
<?php
require_once './modele/profil.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_client'])) {
$id = (int)$_SESSION['id_session'];
post_RemoveClient($id);
header("Location: index.php"); // Redirigez vers la page appropriée après la suppression
displayDeleteProfilSuccessMessage();
header("Location: index.php"); // Rediriger vers la page appropriée après la suppression
exit();
}
$vehicules = get_ProfilsInfo();
// On récupère la valeur de nos variables passées par URL
// Récupérer l'action et l'ID du membre depuis les paramètres URL
$action = isset($_GET['action']) ? htmlspecialchars($_GET['action']) : 'consulter';
$membre = isset($_GET['m']) ? (int)$_GET['m'] : '';
$membreId = isset($_GET['m']) ? (int)$_GET['m'] : null;
switch($action){
case "consulter":
// On affiche les infos sur le membre
$data = get_MemberInfo();
require './vue/profile_view.html';
// Afficher les informations du membre
$userData = get_MemberInfo($membreId);
if ($userData === false) {
$message = "Impossible de récupérer les informations de l'utilisateur où il n'existe pas.";
require_once './vue/erreur.html';
} else {
require_once './vue/profile_view.html';
}
break;
case "modifier":
handleProfileModification();
@@ -24,124 +31,182 @@ switch($action){
default:
echo '<p>Cette action est impossible</p>';
}
function handleProfileModification(){
function handleProfileModification() {
if (empty($_POST['sent'])) {
// On commence par s'assurer que le membre est connecté
// if ($id == 0) erreur(ERR_IS_NOT_CO);
// Les infos du membre
$data = get_MemberInfoId();
require './vue/edit_profile_view.html';
$userData = get_MemberInfoId();
require_once './vue/edit_profile_view.html';
} else {
$i = 0;
$pass = /*md5*/($_POST['password']);
$confirm = /*md5*/($_POST['confirm']);
// Collecter les données du formulaire
$id = (int)$_SESSION['id_session'];
$pseudo = $_SESSION['pseudo_session'];
$password = $_POST['password'];
$confirm = $_POST['confirm'];
$email = $_POST['email'];
$localisation = $_POST['localisation'];
$phone = $_POST['phone'];
$pseudo = $_SESSION['pseudo_session'];
$extensions_valides = array('jpg', 'jpeg', 'gif', 'png');
// Vérification des champs du formulaire
if ($pass != $confirm || empty($confirm) || empty($pass)) {
$mdp_erreur = "Votre mot de passe et la confirmation sont différents ou sont vides";
$i++;
$avatar = $_FILES['avatar'];
$errors = [];
// Validation de l'email
if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "L'adresse e-mail est requise et doit être valide.";
}
if (!get_checkMyMail($email, $id)) {
$errors[] = "Votre adresse email est déjà utilisée par un membre.";
}
// Validation du mot de passe
if (empty($password) || strlen($password) < 6 || strlen($password) > 32) {
$errors[] = "Le mot de passe est requis et doit contenir entre 6 et 32 caractères.";
}
if (!preg_match('/^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*?&]).+$/', $password)) {
$errors[] = "Le mot de passe doit contenir au moins une lettre, un chiffre et un caractère spécial (@$!%*?&)";
}
if ($password !== $confirm) {
$errors[] = "Les mots de passe ne correspondent pas.";
}
// Validation du numéro de téléphone
if (empty($phone) || strlen($phone) < 10 || strlen($phone) > 15) {
$errors[] = "Le numéro de téléphone est requis et doit contenir entre 10 et 15 caractères.";
}
if (preg_match('/^\s+$/', $phone)) {
$errors[] = "Le numéro de téléphone ne peut pas être composé uniquement d'espaces.";
}
if (!preg_match('/^\d+$/', $phone)) {
$errors[] = "Le numéro de téléphone ne doit contenir que des chiffres.";
}
// Validation de l'adresse postale
if (empty($localisation) || strlen($localisation) < 6 || strlen($localisation) > 50) {
$errors[] = "L'adresse postale est requise et doit contenir entre 6 et 50 caractères.";
}
if (!preg_match('/^[A-Za-zÀ-ÖØ-öø-ÿ0-9 ]+$/', $localisation)) {
$errors[] = "L'adresse postale peut contenir uniquement des lettres, des chiffres et des espaces.";
}
if (preg_match('/^\s+$/', $localisation)) {
$errors[] = "L'adresse ne peut pas être composée uniquement d'espaces.";
}
// Validation de l'avatar
if (!empty($_FILES['avatar']['size'])) {
$extension_upload = strtolower(substr(strrchr($_FILES['avatar']['name'], '.'), 1));
$maxFileSize = 5 * 1024 * 1024; // 5 Mo en octets
if ($_FILES['avatar']['size'] > $maxFileSize) {
$errors[] = "La taille de l'avatar dépasse la limite autorisée de 5 Mo.";
}
$extensions_valides = ['jpg', 'jpeg', 'gif', 'png'];
$extension_upload = strtolower(pathinfo($_FILES['avatar']['name'], PATHINFO_EXTENSION));
if (!in_array($extension_upload, $extensions_valides)) {
$i++;
$avatar_erreur3 = "Extension de l'avatar incorrecte";
$errors[] = "Extension de l'avatar incorrecte. Seules les extensions JPG, JPEG, GIF et PNG sont autorisées.";
}
$allowedMimeTypes = ['image/jpeg', 'image/png', 'image/gif'];
$fileMimeType = mime_content_type($_FILES['avatar']['tmp_name']);
if (!in_array($fileMimeType, $allowedMimeTypes)) {
$errors[] = "Type de fichier non pris en charge. Veuillez télécharger une image au format JPG, JPEG, GIF ou PNG.";
}
}
if ($i == 0) {
if (empty($errors)) {
if (isset($_POST['delete'])) {
post_RemoveAvatar($pseudo);
}
// On modifie la table
post_UpdateProfile($pseudo, $pass, $email, $localisation, $phone);
$data = get_MemberInfoId(); // Récupérer les informations mises à jour
post_UpdateProfile($_SESSION['id_session'], $pseudo, $password, $email, $localisation, $phone, $avatar);
$userData = get_MemberInfoId(); // Récupérer les informations mises à jour
require_once './vue/edit_profile_view.html';
displayModificationProfilSuccessMessage();
exit;
exit();
} else {
$data = get_MemberInfoId(); // Récupérer les informations mises à jour
require_once './vue/edit_profile_view.html';
displayModificationProfilErrorMessage($i, $avatar_erreur3 ?? null, $mdp_erreur ?? null);
$userData = get_MemberInfoId(); // Récupérer les informations pour afficher les erreurs
require_once './vue/edit_profile_view.html';
displayModificationProfilErrorMessage($errors);
}
}
}
// Fonction pour afficher un message de succès
// Fonction pour afficher un message de succès lors de la modification du profil
function displayModificationProfilSuccessMessage() {
echo '<script>
document.addEventListener("DOMContentLoaded", function() {
var messageDiv = document.getElementById("message");
var successMessage = `
<div class="alert alert-success">
<div class="alert alert-success">
<section id="content" class="page-content">
<div class="card text-center">
<div class="card-header">
<h2>Modification de profil terminée</h2>
</div>
<div class="card-body">
<h5>Votre profil a été modifié avec succès !</h5>
</div>
</div>
</section>
</div>
<h2>Modification de profil terminée</h2>
</div>
<div class="card-body">
<h5>Votre profil a été modifié avec succès !</h5>
</div>
</div>
</section>
</div>
`;
messageDiv.innerHTML = successMessage;
});
</script>';
}
function displayModificationProfilErrorMessage($i, $avatar_erreur3 = null, $mdp_erreur = null) {
// Fonction pour afficher un message d'erreur lors de la modification du profil
function displayModificationProfilErrorMessage($errors) {
echo '<script>
document.addEventListener("DOMContentLoaded", function() {
var messageDiv = document.getElementById("message");
var errorMessage = `
<div class="alert alert-danger">
<div class="alert alert-danger">
<section id="content" class="page-content">
<div class="card text-center">
<div class="card-header">
<h2>Modification de profil interrompue</h2>
</div>
<div class="card-body">
<h5>Nous avons rencontré ' . $i . ' erreur(s) lors de la modification de votre profil :</h5><br>
<ul style="list-style-type:none;">';
if (isset($avatar_erreur3)) {
echo '<li>' . $avatar_erreur3 . '</li>';
}
if (isset($mdp_erreur)) {
echo '<li>' . $mdp_erreur . '</li>';
}
echo ' </ul>
</div>
</div>
</section>
</div>
<h3>Échec de la modification du profil</h3>
</div>
<div class="card-body">
<p>Erreur(s) dans le formulaire de modification :</p>
<ul style="list-style-type:none;">';
foreach ($errors as $error) {
echo "<li>" . htmlspecialchars($error, ENT_QUOTES, 'UTF-8') . "</li>"; // Ajouter chaque erreur à la liste
}
echo ' </ul>
</div>
</div>
</section>
</div>
`;
messageDiv.innerHTML = errorMessage;
});
</script>';
}
// Fonction pour afficher un message de succès lors de la suppression du profil
function displayDeleteProfilSuccessMessage() {
echo '<script>
document.addEventListener("DOMContentLoaded", function() {
var messageDiv = document.getElementById("message");
var errorMessage = `
<div class="alert alert-success">
var successMessage = `
<div class="alert alert-success">
<section id="content" class="page-content">
<div class="card text-center">
<div class="card-header">
<h2>Suppression de compte confirmée</h2>
</div>
<div class="card-body">
</div>
<div class="card-body">
<p>Votre compte a été supprimé avec succès. Nous vous remercions pour votre utilisation de notre service.</p>
</div>
</div>
</section>
</div>
</div>
</div>
</section>
</div>
`;
messageDiv.innerHTML = errorMessage;
messageDiv.innerHTML = successMessage;
});
</script>';
}
?>
?>
-61
View File
@@ -1,61 +0,0 @@
<?php
require_once './modele/vehicule.php';
if (empty($_POST['plaque'])) { // Si la variable est vide, on peut considérer qu'on est sur la page de formulaire
} else { // On est dans le cas traitement
$plaque_erreur1 = NULL;
$plaque_erreur2 = NULL;
$image_erreur3 = NULL;
// On récupère les variables
$i = 0;
$extensions_valides = array('jpg', 'jpeg', 'gif', 'png');
$plaque = $_POST['plaque'];
$marque = $_POST['marque'];
$modele = $_POST['modele'];
$annee = $_POST['annee'];
// Vérification des champs du formulaire
$plaque_free = get_checkPlaque();
if (!$plaque_free) {
$plaque_erreur1 = "Votre plaque est déjà utilisée par un vehicule";
$i++;
}
if (strlen($plaque) < 7 || strlen($plaque) > 9) {
$plaque_erreur2 = "Votre plaque est soit trop grande, soit trop petite";
$i++;
}
if (!empty($_FILES['image']['size'])) {
$extension_upload = strtolower(substr(strrchr($_FILES['image']['name'], '.'), 1));
if (!in_array($extension_upload, $extensions_valides)) {
$i++;
$image_erreur3 = "Extension de l'image incorrecte";
}
}
if ($i == 0) {
// Affichage du message de réussite
echo '
<div class="container">
<section id="content" class="page-content">
<div class="container text-center">
<hr><h2 style="color: green;">Ajout du véhicule terminé</h2><br>
<h5 style="color: green;">Le véhicule ' . stripslashes(htmlspecialchars($_POST['plaque'])) . ' a été ajouté au véhicule de la compagnie</h5><hr><br>
</div>
</section>
</div>';
// Inclure à nouveau le formulaire pour permettre à l'utilisateur de ressaisir des valeurs
post_RegistreCars();
} else {
// Affichage des erreurs et lien pour retourner au formulaire
echo '
<div class="container"><section id="content" class="page-content"><div class="container text-center">
<hr><h2>Ajout du véhicule interrompu</h2><br>
<h5>' . $i . ' erreurs se sont produites lors de l\'ajout du véhicule</h5><br>
<ul>';
if ($plaque_erreur1) echo "<p>$plaque_erreur1</p>";
if ($plaque_erreur2) echo "<p>$plaque_erreur2</p>";
if ($image_erreur3) echo "<p>$image_erreur3</p>";
echo '
</ul><hr><br>
</div></section></div>';
}
}
require './vue/vehicule.html';
?>
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Some files were not shown because too many files have changed in this diff Show More