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
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
Thumbs.db

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.

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>';
}
?>
?>

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';
?>

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';

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>';
}
?>
?>

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>';
}
?>
?>

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.

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

View File

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

View File

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

View File

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.

View File

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

View File

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 75 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

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