par
filou80 » 20 avr. 2024, 08:28
Bonjour à tous,
Je suis entrain de refaire ma page de connexion inscription (1 page pour les 2).
Mon soucis c'est quand je valide une inscription et qu'il y a une erreur elle me recharge bien la page mais c'est mon inscription en premier.
Alors que je souhaite que se soit inscription qui reviens en sachant que je souhaite de base lors que l'internaute arrive pour une première fois se soit la connexion.
Je ne sais pas si je suis clair.
Voici ma vue :
Code : Tout sélectionner
<?php
ob_start();
?>
<!-- Titre -->
<!-- <div class="container">
<div class="row justify-content-center">
<div class="col-10">
<div class="mt-3">
<h1>Connexion | Inscription</h1>
</div>
</div>
</div>
</div> -->
<section class="forms-section">
<div class="forms">
<div class="form-wrapper is-active">
<button type="button" class="switcher switcher-login texte">
Connexion
<span class="underline"></span>
</button>
<form class="form form-login" action="<?=htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post" enctype="multipart/form-data">
<fieldset>
<legend>Please, enter your email and password for login.</legend>
<div class="input-block">
<label for="login-email">Mail</label>
<input
id="mailConnexion"
name="mailConnexion"
type="email"
value="<?= htmlentities($_POST['mailConnexion'] ?? '', ENT_QUOTES, 'UTF-8') ?>"
required>
</div>
<div class="error mb-3"><?= htmlentities($error['mailConnexion'] ?? '', ENT_QUOTES, 'UTF-8')?></div>
<div class="input-block">
<label for="login-password">Mot de passe</label>
<input
id="mdpConnexion"
name="mdpConnexion"
type="password"
maxlength="20"
value="<?= htmlentities($_POST['mdpConnexion'] ?? '', ENT_QUOTES, 'UTF-8') ?>"
required>
</div>
<div class="error mb-3"><?= htmlentities($error['mdpConnexion'] ?? '', ENT_QUOTES, 'UTF-8')?></div>
</fieldset>
<!-- On envoie le token de session pour eviter les attaques -->
<input type="hidden" name="csrfToken" value="<?= $csrfToken ?>">
<div class = "text-center">
<button type="submit" name = "validation" value = "Connexion" class="btn btn-outline-success">Connexion</button>
</div>
</form>
</div>
<div class="form-wrapper">
<button type="button" class="switcher switcher-signup" >
Inscription
<span class="underline"></span>
</button>
<form class="form form-signup" action="<?=htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post" enctype="multipart/form-data">
<fieldset>
<legend>Please, enter your email, password and password confirmation for sign up.</legend>
<div class="input-block">
<label for="signup-email">Mail</label>
<input
id="mailInscription"
name="mailInscription"
type="email"
required>
</div>
<div class="error mb-3"><?= htmlentities($error['mailInscription'] ?? '', ENT_QUOTES, 'UTF-8')?></div>
<div class="input-block">
<label for="signup-email">Confirmation du Mail</label>
<input
id="confirmationMailInscription"
name="confirmationMailInscription"
type="email"
required>
</div>
<div class="error mb-3"><?= htmlentities($error['confirmationMailInscription'] ?? '', ENT_QUOTES, 'UTF-8')?></div>
<div class="input-block">
<label for="signup-password">Mot de passe</label>
<input
id="mdpInscription"
name="mdpInscription"
type="password"
maxlength="20"
required>
</div>
<div class="error mb-3"><?= htmlentities($error['mdpInscription'] ?? '', ENT_QUOTES, 'UTF-8')?></div>
<div class="input-block">
<label for="signup-password-confirm">Confirmation mot de passe</label>
<input
id="confirmationMdpInscription"
name="confirmationMdpInscription"
type="password"
maxlength="20"
required>
</div>
<div class="error mb-3"><?= htmlentities($error['confirmationMdpInscription'] ?? '', ENT_QUOTES, 'UTF-8')?></div>
<!-- On envoie le token de session pour eviter les attaques -->
<input type="hidden" name="csrfToken" value="<?= $csrfToken ?>">
</fieldset>
<div class = "text-center">
<button type="submit" name = "validation" value = "Inscription"class="btn btn-outline-success">Inscription</button>
</div>
</form>
</div>
</div>
</section>
<?php
$content = ob_get_clean();
$titrePage = 'Connexion | Inscription'; /// Titre à la page onglet ///
$metaDescription = "Inscrivez-vous ou connectez-vous pour accéder à notre plateforme. Profitez d'une expérience utilisateur exceptionnelle.";
$metaKeywords = "inscription, connexion, compte utilisateur, plateforme, expérience utilisateur";
$google = "index, follow"; /// Demander a google de ne pas suivre ou suivre
include(dirname(__FILE__).'/../Modeles/vueBase.php');
?>
Voici mon contrôleur :
Code : Tout sélectionner
<?php
// Vérifier si la requête est effectuée via HTTPS
if (!isset($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] !== "on") {
// Rediriger vers la même URL en utilisant HTTPS
header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
// Arrêter le script pour éviter toute autre exécution
exit();
}
// Redémarrez une nouvelle session si elle n'est pas déjà active
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
// Génère un jeton CSRF aléatoire s'il n'existe pas déjà dans la session
if (!isset($_SESSION['csrfToken'])) {
$csrfToken = bin2hex(random_bytes(32));
$_SESSION['csrfToken'] = $csrfToken;
} else {
// Si le jeton CSRF existe déjà dans la session, utilisez-le
$csrfToken = $_SESSION['csrfToken'];
}
// Pour utiliser le CSS lié à la page de connexion
$css = '';
// Pour afficher le menu et le pied de page connectés ou non connectés
$affichage = "nonConnecter";
// Vérifier si le formulaire est soumis
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Vérifier le jeton CSRF
if (!isset($_POST['csrfToken']) || $_POST['csrfToken'] !== $_SESSION['csrfToken']) {
// Jeton CSRF invalide, redirection vers la page d'erreur
$code = 4;
header('Location: erreurs-ctrl.php?code=' . $code);
exit; // Assurez-vous de terminer le script après la redirection
} else {
$validation = trim(filter_input(INPUT_POST, 'validation', FILTER_SANITIZE_STRING));
switch ($validation) {
case "Connexion": //Connexion
// Champ mail
$mailConnexion = trim(strtolower(filter_input(INPUT_POST, 'mailConnexion', FILTER_SANITIZE_EMAIL)));
if (empty($mailConnexion)) {
$error["mailConnexion"] = 'Le mail est obligatoire.';
}
// Mot de passe connexion
$mdpConnexion = trim(filter_input(INPUT_POST, 'mdpConnexion', FILTER_SANITIZE_STRING));
if (empty($mdpConnexion)) {
$error["mdpConnexion"] = 'Mot de passe obligatoire.';
} elseif (strlen($mdpConnexion) > 20) {
$error["mdpConnexion"] = 'Le mot de passe ne doit pas dépasser 20 caractères.';
} elseif (!preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/', $mdpConnexion)) {
$error["mdpConnexion"] = 'Mot de passe incorrect.';
}
if(empty($error)){
$code = 1;
header('Location: erreurs-ctrl.php?code=' . $code);
exit; // Assurez-vous de terminer le script après la redirection
}
break;
case "Inscription": //Inscription
// Champ mail Inscription
$mailInscription = trim(strtolower(filter_input(INPUT_POST, 'mailInscription', FILTER_SANITIZE_EMAIL)));
if (empty($mailInscription)) {
$error["mailInscription"] = 'Le mail est obligatoire.';
}
// Confirmation mail inscription
$confirmationMailInscription = trim(strtolower(filter_input(INPUT_POST, 'confirmationMailInscription', FILTER_SANITIZE_EMAIL)));
if (empty($confirmationMailInscription)) {
$error["confirmationMailInscription"] = 'Le mail est obligatoire.';
}
if($mailInscription !== $confirmationMailInscription) {
$error["mailInscription"] = 'Les adresses e-mail ne correspondent pas.';
$error["confirmationMailInscription"] = 'Les adresses e-mail ne correspondent pas.';
}
// Mot de passe inscription
$mdpInscription = trim(filter_input(INPUT_POST, 'mdpInscription', FILTER_SANITIZE_STRING));
if (empty($mdpInscription)) {
$error["mdpInscription"] = 'Mot de passe obligatoire.';
} elseif (strlen($mdpInscription) > 20) {
$error["mdpInscription"] = 'Le mot de passe ne doit pas dépasser 20 caractères.';
} elseif (!preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/', $mdpInscription)) {
$error["mdpInscription"] = 'Mot de passe incorrect.';
}
// Confirmation mdp inscription
$confirmationMdpInscription = trim(filter_input(INPUT_POST, 'confirmationMdpInscription', FILTER_SANITIZE_STRING));
if (empty($confirmationMdpInscription)) {
$error["confirmationMdpInscription"] = 'Mot de passe obligatoire.';
} elseif (strlen($confirmationMdpInscription) > 20) {
$error["confirmationMdpInscription"] = 'Le mot de passe ne doit pas dépasser 20 caractères.';
} elseif (!preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/', $confirmationMdpInscription)) {
$error["confirmationMdpInscription"] = 'Mot de passe incorrect.';
}
if($mdpInscription !== $confirmationMdpInscription) {
$error["mdpInscription"] = 'Les mots de passe ne correspondent pas.';
$error["confirmationMdpInscription"] = 'Les mots de passe ne correspondent pas.';
}
if(empty($error)){
$code = 9;
header('Location: erreurs-ctrl.php?code=' . $code);
exit; // Assurez-vous de terminer le script après la redirection
}
break;
} // Fin du switch validation
} // Fin de la condition du contrôle de variable
} // Fin du post
include(dirname(__FILE__).'/../Vues/Vues/connexion.php');
?>
et pour finir mon js ou je suis nul mais nul :
Code : Tout sélectionner
const switchers = [...document.querySelectorAll('.switcher')]
switchers.forEach(item => {
item.addEventListener('click', function() {
switchers.forEach(item => item.parentElement.classList.remove('is-active'))
this.parentElement.classList.add('is-active')
})
})
Merci par avance pour votre aide.
@+ Filou80
Bonjour à tous,
Je suis entrain de refaire ma page de connexion inscription (1 page pour les 2).
Mon soucis c'est quand je valide une inscription et qu'il y a une erreur elle me recharge bien la page mais c'est mon inscription en premier.
Alors que je souhaite que se soit inscription qui reviens en sachant que je souhaite de base lors que l'internaute arrive pour une première fois se soit la connexion.
Je ne sais pas si je suis clair.
Voici ma vue :
[code]<?php
ob_start();
?>
<!-- Titre -->
<!-- <div class="container">
<div class="row justify-content-center">
<div class="col-10">
<div class="mt-3">
<h1>Connexion | Inscription</h1>
</div>
</div>
</div>
</div> -->
<section class="forms-section">
<div class="forms">
<div class="form-wrapper is-active">
<button type="button" class="switcher switcher-login texte">
Connexion
<span class="underline"></span>
</button>
<form class="form form-login" action="<?=htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post" enctype="multipart/form-data">
<fieldset>
<legend>Please, enter your email and password for login.</legend>
<div class="input-block">
<label for="login-email">Mail</label>
<input
id="mailConnexion"
name="mailConnexion"
type="email"
value="<?= htmlentities($_POST['mailConnexion'] ?? '', ENT_QUOTES, 'UTF-8') ?>"
required>
</div>
<div class="error mb-3"><?= htmlentities($error['mailConnexion'] ?? '', ENT_QUOTES, 'UTF-8')?></div>
<div class="input-block">
<label for="login-password">Mot de passe</label>
<input
id="mdpConnexion"
name="mdpConnexion"
type="password"
maxlength="20"
value="<?= htmlentities($_POST['mdpConnexion'] ?? '', ENT_QUOTES, 'UTF-8') ?>"
required>
</div>
<div class="error mb-3"><?= htmlentities($error['mdpConnexion'] ?? '', ENT_QUOTES, 'UTF-8')?></div>
</fieldset>
<!-- On envoie le token de session pour eviter les attaques -->
<input type="hidden" name="csrfToken" value="<?= $csrfToken ?>">
<div class = "text-center">
<button type="submit" name = "validation" value = "Connexion" class="btn btn-outline-success">Connexion</button>
</div>
</form>
</div>
<div class="form-wrapper">
<button type="button" class="switcher switcher-signup" >
Inscription
<span class="underline"></span>
</button>
<form class="form form-signup" action="<?=htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post" enctype="multipart/form-data">
<fieldset>
<legend>Please, enter your email, password and password confirmation for sign up.</legend>
<div class="input-block">
<label for="signup-email">Mail</label>
<input
id="mailInscription"
name="mailInscription"
type="email"
required>
</div>
<div class="error mb-3"><?= htmlentities($error['mailInscription'] ?? '', ENT_QUOTES, 'UTF-8')?></div>
<div class="input-block">
<label for="signup-email">Confirmation du Mail</label>
<input
id="confirmationMailInscription"
name="confirmationMailInscription"
type="email"
required>
</div>
<div class="error mb-3"><?= htmlentities($error['confirmationMailInscription'] ?? '', ENT_QUOTES, 'UTF-8')?></div>
<div class="input-block">
<label for="signup-password">Mot de passe</label>
<input
id="mdpInscription"
name="mdpInscription"
type="password"
maxlength="20"
required>
</div>
<div class="error mb-3"><?= htmlentities($error['mdpInscription'] ?? '', ENT_QUOTES, 'UTF-8')?></div>
<div class="input-block">
<label for="signup-password-confirm">Confirmation mot de passe</label>
<input
id="confirmationMdpInscription"
name="confirmationMdpInscription"
type="password"
maxlength="20"
required>
</div>
<div class="error mb-3"><?= htmlentities($error['confirmationMdpInscription'] ?? '', ENT_QUOTES, 'UTF-8')?></div>
<!-- On envoie le token de session pour eviter les attaques -->
<input type="hidden" name="csrfToken" value="<?= $csrfToken ?>">
</fieldset>
<div class = "text-center">
<button type="submit" name = "validation" value = "Inscription"class="btn btn-outline-success">Inscription</button>
</div>
</form>
</div>
</div>
</section>
<?php
$content = ob_get_clean();
$titrePage = 'Connexion | Inscription'; /// Titre à la page onglet ///
$metaDescription = "Inscrivez-vous ou connectez-vous pour accéder à notre plateforme. Profitez d'une expérience utilisateur exceptionnelle.";
$metaKeywords = "inscription, connexion, compte utilisateur, plateforme, expérience utilisateur";
$google = "index, follow"; /// Demander a google de ne pas suivre ou suivre
include(dirname(__FILE__).'/../Modeles/vueBase.php');
?>[/code]
Voici mon contrôleur :
[code]<?php
// Vérifier si la requête est effectuée via HTTPS
if (!isset($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] !== "on") {
// Rediriger vers la même URL en utilisant HTTPS
header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
// Arrêter le script pour éviter toute autre exécution
exit();
}
// Redémarrez une nouvelle session si elle n'est pas déjà active
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
// Génère un jeton CSRF aléatoire s'il n'existe pas déjà dans la session
if (!isset($_SESSION['csrfToken'])) {
$csrfToken = bin2hex(random_bytes(32));
$_SESSION['csrfToken'] = $csrfToken;
} else {
// Si le jeton CSRF existe déjà dans la session, utilisez-le
$csrfToken = $_SESSION['csrfToken'];
}
// Pour utiliser le CSS lié à la page de connexion
$css = '';
// Pour afficher le menu et le pied de page connectés ou non connectés
$affichage = "nonConnecter";
// Vérifier si le formulaire est soumis
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Vérifier le jeton CSRF
if (!isset($_POST['csrfToken']) || $_POST['csrfToken'] !== $_SESSION['csrfToken']) {
// Jeton CSRF invalide, redirection vers la page d'erreur
$code = 4;
header('Location: erreurs-ctrl.php?code=' . $code);
exit; // Assurez-vous de terminer le script après la redirection
} else {
$validation = trim(filter_input(INPUT_POST, 'validation', FILTER_SANITIZE_STRING));
switch ($validation) {
case "Connexion": //Connexion
// Champ mail
$mailConnexion = trim(strtolower(filter_input(INPUT_POST, 'mailConnexion', FILTER_SANITIZE_EMAIL)));
if (empty($mailConnexion)) {
$error["mailConnexion"] = 'Le mail est obligatoire.';
}
// Mot de passe connexion
$mdpConnexion = trim(filter_input(INPUT_POST, 'mdpConnexion', FILTER_SANITIZE_STRING));
if (empty($mdpConnexion)) {
$error["mdpConnexion"] = 'Mot de passe obligatoire.';
} elseif (strlen($mdpConnexion) > 20) {
$error["mdpConnexion"] = 'Le mot de passe ne doit pas dépasser 20 caractères.';
} elseif (!preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/', $mdpConnexion)) {
$error["mdpConnexion"] = 'Mot de passe incorrect.';
}
if(empty($error)){
$code = 1;
header('Location: erreurs-ctrl.php?code=' . $code);
exit; // Assurez-vous de terminer le script après la redirection
}
break;
case "Inscription": //Inscription
// Champ mail Inscription
$mailInscription = trim(strtolower(filter_input(INPUT_POST, 'mailInscription', FILTER_SANITIZE_EMAIL)));
if (empty($mailInscription)) {
$error["mailInscription"] = 'Le mail est obligatoire.';
}
// Confirmation mail inscription
$confirmationMailInscription = trim(strtolower(filter_input(INPUT_POST, 'confirmationMailInscription', FILTER_SANITIZE_EMAIL)));
if (empty($confirmationMailInscription)) {
$error["confirmationMailInscription"] = 'Le mail est obligatoire.';
}
if($mailInscription !== $confirmationMailInscription) {
$error["mailInscription"] = 'Les adresses e-mail ne correspondent pas.';
$error["confirmationMailInscription"] = 'Les adresses e-mail ne correspondent pas.';
}
// Mot de passe inscription
$mdpInscription = trim(filter_input(INPUT_POST, 'mdpInscription', FILTER_SANITIZE_STRING));
if (empty($mdpInscription)) {
$error["mdpInscription"] = 'Mot de passe obligatoire.';
} elseif (strlen($mdpInscription) > 20) {
$error["mdpInscription"] = 'Le mot de passe ne doit pas dépasser 20 caractères.';
} elseif (!preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/', $mdpInscription)) {
$error["mdpInscription"] = 'Mot de passe incorrect.';
}
// Confirmation mdp inscription
$confirmationMdpInscription = trim(filter_input(INPUT_POST, 'confirmationMdpInscription', FILTER_SANITIZE_STRING));
if (empty($confirmationMdpInscription)) {
$error["confirmationMdpInscription"] = 'Mot de passe obligatoire.';
} elseif (strlen($confirmationMdpInscription) > 20) {
$error["confirmationMdpInscription"] = 'Le mot de passe ne doit pas dépasser 20 caractères.';
} elseif (!preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/', $confirmationMdpInscription)) {
$error["confirmationMdpInscription"] = 'Mot de passe incorrect.';
}
if($mdpInscription !== $confirmationMdpInscription) {
$error["mdpInscription"] = 'Les mots de passe ne correspondent pas.';
$error["confirmationMdpInscription"] = 'Les mots de passe ne correspondent pas.';
}
if(empty($error)){
$code = 9;
header('Location: erreurs-ctrl.php?code=' . $code);
exit; // Assurez-vous de terminer le script après la redirection
}
break;
} // Fin du switch validation
} // Fin de la condition du contrôle de variable
} // Fin du post
include(dirname(__FILE__).'/../Vues/Vues/connexion.php');
?>
[/code]
et pour finir mon js ou je suis nul mais nul :
[code]const switchers = [...document.querySelectorAll('.switcher')]
switchers.forEach(item => {
item.addEventListener('click', function() {
switchers.forEach(item => item.parentElement.classList.remove('is-active'))
this.parentElement.classList.add('is-active')
})
})[/code]
Merci par avance pour votre aide.
@+ Filou80