1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
| <?php
$bdd = new PDO('mysql:host=localhost;dbname=BDD_SP', 'root', 'root', [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, // erreurs PDO sous forme d'exception
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, // mode de lecture des données sélectionnées => tableau associatif
\PDO::ATTR_EMULATE_PREPARES => false // pas besoin d'émuler la préparation, mysql n'en a pas besoin
]);
$hsc = function(string $p): string { return htmlspecialchars($p, ENT_QUOTES, 'utf-8'); }; // échappement à l'affichage des caractères dangereux
$err = []; // collecteur d'erreurs
$check_len = function($v, int $len_min, int $len_max): bool {
$len = mb_strlen($v);
return (($len_min <= $len) && ($len <= $len_max));
};
if (isset($_POST['forminscription'])) {
$pseudo = $_POST['uname'] ?? '';
$mdp = $_POST['psw'] ?? '';
$mdp_verif = $_POST['pswverif'] ?? '';
$mail = $_POST['mail'] ?? '';
$date_naiss = $_POST['datenaiss'] ?? '';
if ($check_len($pseudo, 3, 255) === false) {
$err['uname'] = 'Pseudo invalide (minimum 3 caractères et maximum 255)';
}
if ($check_len($mdp, 10, 255) === false) {
$err['psw'] = 'Mot de passe invalide (minimum 10 caractères et maximum 255)';
} elseif ($mdp !== $mdp_verif) {
$err['pswverif'] = 'Les mots de passe ne correspondent pas';
}
if (filter_var($mail, FILTER_VALIDATE_EMAIL) === false) {
$err['mail'] = 'Mail invalide';
}
$date = \DateTime::createFromFormat('Ymd', preg_replace('/[^\d]/u', '', $date_naiss)); // on retire au passage tous les caractères non numérique AAAAMMJJ
if (($date === false) || ($date <= new \DateTime())) {
$err['datenaiss'] = 'Date de naissance invalide';
}
if (empty($err)) {
$sql = 'INSERT INTO Visiteurs (pseudo, mdp, mail, anniversaire, date_inscription) VALUES (:pseudo, :mdp, :mail, :anniv, CURDATE())';
try {
$stmt = $bdd->prepare($sql);
$exec = $stmt->execute([
':pseudo' => $pseudo,
':mdp' => password_hash($mdp, PASSWORD_DEFAULT),
':mail' => $mail,
':anniv' => $date->format('Y-m-d')
]);
$msg = <<<html
<div class="alert success"><span class="closebtn">×</span><strong>Success !</strong>Le compte à été crée avec success !</div>
<div class="alert info"><span class="closebtn">×</span><strong>Info!</strong> Indicates a neutral informative change or action.</div>
html;
} catch (\PDOException $e) {
echo 'Erreur de persistance : ',$e->code, ' - ', $e->message;
exit;
}
}
}
foreach ($err as $e) {
$err_html[] = <<<html
<div class="alert warning"><span class="closebtn">×</span><strong>Warning !</strong>{$hsc($e)}</div>
html;
}
?>
<!DOCTYPE html>
<html>
<head>
<?php include 'header.php' ?>
<?php include 'script.php' ?>
</head>
<body>
<?php include 'Menu.php' ?>
<div class="divfrom">
<form class="modal-content" method="SESSION">
<div style="padding: 5px;">
<label for="uname"><b>Pseudo</b></label>
<input type="text" placeholder="Entrer votre pseudo" name="uname" required>
<label for="psw"><b>Mot de passe</b></label>
<input type="password" placeholder="Entrer votre mot de passe" name="psw" required>
<button type="submit" name="connexion" value="OK">Connexion</button>
<button type="button" class="btnCompte" onclick="openCreation()">Crée un compte</button>
<button type="button" style="background-color: #f44336;">Mot de passe oublié ?</button>
</div>
<?= implode('', $err_html ?? []), $msg ?? '' ?>
</form>
</div>
<!--Creation compte-->
<div id="id02" class="modal">
<form class="modal-content animate" method="POST">
<div class="imgcontainer">
<span onclick="fermerCreation()" class="close" title="Close Modal">×</span>
</div>
<div class="container">
<label for="uname"><b>Pseudo</b></label>
<input type="text" placeholder="Entrer votre Pseudo" name="uname" required value="<?= $hsc($pseudo ?? '') ?>">
<label for="psw"><b>Mot de passe</b></label>
<input type="password" placeholder="Entrer votre Mot de passe" name="psw" required>
<label for="psw"><b>Mot de passe</b></label>
<input type="password" placeholder="Entrer votre Mot de passe" name="pswverif" required>
<label for="psw"><b>Adresse Mail</b></label>
<input type="email" placeholder="Entrer votre Mail" name="mail" style="width: 100%; padding: 12px 20px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; box-sizing: border-box;" required value="<?= $hsc($mail ?? '') ?>">
<label for="psw"><b>Date de naissance</b> (AAAA/MM/JJ)</label>
<input type="text" placeholder="Entrer votre Date de naissance" name="datenaiss" required value="<?= $hsc($date_naiss ?? '') ?>">
<button type="submit" name="forminscription">Crée un compte</button>
</div>
<div class="container" style="background-color:#f1f1f1">
<button type="button" onclick="fermerCreation()" class="cancelbtn">Annuler</button>
</div>
</form>
</div>
<script>
//MESSAGE ALERTE
var close = document.getElementsByClassName("closebtn");
var i;
for (i = 0; i < close.length; i++) {
close[i].onclick = function(){
var div = this.parentElement;
div.style.opacity = "0";
setTimeout(function(){ div.style.display = "none"; }, 600);
}
}
</script>
</body>
</html> |