par
Unyck » 12 mai 2019, 16:22
Alors, j'ai pu avancer sur mon formulaire, j'ai réussi a afficher les messages d'erreurs de saisie de cette façon :
<?php
class Session{
public function __construct(){
session_start();
}
public function setFlash($message,$type = 'error'){
$_SESSION['flash'] = array(
'message' => $message,
'type' => $type
);
}
public function flash(){
if(isset($_SESSION['flash'])){
?>
<div id="alert" class="alert alert-<?php echo $_SESSION['flash']['type'];
?>">
<a class="close">x</a>
<?php echo $_SESSION['flash']['message']; ?>
</div>
<?php
unset($_SESSION['flash']);
}
}
}
ma page principal :
<?php
require("session.class.php");
$Session = new Session();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Aria s'enregister</title>
<link href="//db.onlinewebfonts.com/c/a4e256ed67403c6ad5d43937ed48a77b?family=Core+Sans+N+W01+35+Light" rel="stylesheet" type="text/css"/>
<link rel="stylesheet" href="register.css" type="text/css">
</head>
<body>
<div class="body-content">
<div class="module">
<h1>Créer un compte</h1>
<?php $Session->flash(); ?>
<form class="form" action="register.php" method="post" enctype="multipart/form-data" autocomplete="off">
<input type="text" placeholder="Nom d'utilisateur" name="username" required />
<input type="email" placeholder="Email" name="email" required />
<input type="password" placeholder="Mot de passe" name="password" autocomplete="new-password" required />
<input type="password" placeholder="Confirmer le mot de passe" name="confirmpassword" autocomplete="new-password" required />
</br></br></br>
<input type="submit" value="S'enregistrer" name="register" class="btn btn-block btn-primary" />
</form>
</div>
</div>
<script src="js/jquery.js"></script>
<script type="text/javascript" src="js/main.js"></script>
</body>
</html>
ma page de traitement :
<?php
require("session.class.php");
header('Location:toregister.php');
// Change this to your connection info.
$DATABASE_HOST = 'localhost';
$DATABASE_USER = 'root';
$DATABASE_PASS = '********';
$DATABASE_NAME = 'Aria_Game';
// essaie de ce connecter
$con = mysqli_connect($DATABASE_HOST, $DATABASE_USER, $DATABASE_PASS, $DATABASE_NAME);
if (mysqli_connect_errno()) {
// affiche le message d'erreur si problème de connection
$Session = new Session();
$Session->setFlash('Problème de connection Mysql','warning');
}
// Verification des données
if (!isset($_POST['username'], $_POST['password'], $_POST['email'])) {
$Session = new Session();
$Session->setFlash('Veuillez remplir le formulaire d\'enregistrement!','error');
}
// tout doit être rempli
if (empty($_POST['username']) || empty($_POST['password']) || empty($_POST['confirmpassword']) || empty($_POST['email'])) {
$Session = new Session();
$Session->setFlash('Veuillez remplir le formulaire d\'enregistrement!','error');
}
// vérification du nom utilisateur mail mot de passe
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$Session = new Session();
$Session->setFlash('l\'email n\'est pas valide !','error');
}
if (preg_match('/[A-Za-z]+/', $_POST['username']) == 0) {
$Session = new Session();
$Session->setFlash('Seul les charactères alphanumériques minuscules et majuscules sont autorisés','error');
}
if (strlen($_POST['username']) > 20 || strlen($_POST['username']) < 5) {
$Session = new Session();
$Session->setFlash('Le nom d\'utilisateur doit comporter 5 à 20 charactères','error');
}
if (strlen($_POST['password']) > 20 || strlen($_POST['password']) < 5) {
$Session = new Session();
$Session->setFlash('Le mot de passe doit comporter 5 à 20 charactères!','error');
}
if ($_POST["password"] === $_POST["confirmpassword"]) {
}
else {
$Session = new Session();
$Session->setFlash('Les mots de passe ne sont pas identiques','error');
}
if ($stmt = $con->prepare('SELECT id, password, FROM users WHERE username = ?')) {
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();
$stmt->store_result();
// vérifie si le compte existe dans la base
if ($stmt->num_rows > 0) {
// le nom utilisateur existe déjà
echo 'Le nom d\'utilisateur existe déjà!';
} else {
// creation nouveau compte
if ($stmt = $con->prepare('INSERT INTO users (username, password, email) VALUES (?, ?, ?)')) {
// encryption du mot de passed
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$stmt->bind_param('sss', $_POST['username'], $password, $_POST['email']);
$stmt->execute();
echo 'Vous êtes désormais inscrit, veuillez télécharger l\'installateur de jeu ci-dessous pour continuer';
} else {
// problème état dans la base de données vérifier si elle comporte les champs requis
echo 'Déclaration invalide!';
}
}
$stmt->close();
} else {
// problème état dans la base de données vérifier si elle comporte les champs requis
echo 'Déclaration invalide!';
}
$stmt->close();
?>
depuis que j'ai rajouté les $Session je n'arrive plus a écrire dans la base mais les erreurs de saisie fonctionne, j'aimerai de l'aide pour corriger cette partie :
if ($stmt = $con->prepare('SELECT id, password, FROM users WHERE username = ?')) {
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();
$stmt->store_result();
// vérifie si le compte existe dans la base
if ($stmt->num_rows > 0) {
// le nom utilisateur existe déjà
echo 'Le nom d\'utilisateur existe déjà!';
} else {
// creation nouveau compte
if ($stmt = $con->prepare('INSERT INTO users (username, password, email) VALUES (?, ?, ?)')) {
// encryption du mot de passed
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$stmt->bind_param('sss', $_POST['username'], $password, $_POST['email']);
$stmt->execute();
echo 'Vous êtes désormais inscrit, veuillez télécharger l\'installateur de jeu ci-dessous pour continuer';
} else {
// problème état dans la base de données vérifier si elle comporte les champs requis
echo 'Déclaration invalide!';
}
}
$stmt->close();
} else {
// problème état dans la base de données vérifier si elle comporte les champs requis
echo 'Déclaration invalide!';
}
$stmt->close();
?>
mes objectifs non atteint: revalider le fonctionnement du formulaire, ajouter la vérification d'email existant dans la BDD, redirection sur un autre page quand le formulaire est validé.
Alors, j'ai pu avancer sur mon formulaire, j'ai réussi a afficher les messages d'erreurs de saisie de cette façon :
[PHP]
<?php
class Session{
public function __construct(){
session_start();
}
public function setFlash($message,$type = 'error'){
$_SESSION['flash'] = array(
'message' => $message,
'type' => $type
);
}
public function flash(){
if(isset($_SESSION['flash'])){
?>
<div id="alert" class="alert alert-<?php echo $_SESSION['flash']['type'];
?>">
<a class="close">x</a>
<?php echo $_SESSION['flash']['message']; ?>
</div>
<?php
unset($_SESSION['flash']);
}
}
}
[/PHP]
ma page principal :
[PHP]
<?php
require("session.class.php");
$Session = new Session();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Aria s'enregister</title>
<link href="//db.onlinewebfonts.com/c/a4e256ed67403c6ad5d43937ed48a77b?family=Core+Sans+N+W01+35+Light" rel="stylesheet" type="text/css"/>
<link rel="stylesheet" href="register.css" type="text/css">
</head>
<body>
<div class="body-content">
<div class="module">
<h1>Créer un compte</h1>
<?php $Session->flash(); ?>
<form class="form" action="register.php" method="post" enctype="multipart/form-data" autocomplete="off">
<input type="text" placeholder="Nom d'utilisateur" name="username" required />
<input type="email" placeholder="Email" name="email" required />
<input type="password" placeholder="Mot de passe" name="password" autocomplete="new-password" required />
<input type="password" placeholder="Confirmer le mot de passe" name="confirmpassword" autocomplete="new-password" required />
</br></br></br>
<input type="submit" value="S'enregistrer" name="register" class="btn btn-block btn-primary" />
</form>
</div>
</div>
<script src="js/jquery.js"></script>
<script type="text/javascript" src="js/main.js"></script>
</body>
</html>
[/PHP]
ma page de traitement :
[PHP]<?php
require("session.class.php");
header('Location:toregister.php');
// Change this to your connection info.
$DATABASE_HOST = 'localhost';
$DATABASE_USER = 'root';
$DATABASE_PASS = '********';
$DATABASE_NAME = 'Aria_Game';
// essaie de ce connecter
$con = mysqli_connect($DATABASE_HOST, $DATABASE_USER, $DATABASE_PASS, $DATABASE_NAME);
if (mysqli_connect_errno()) {
// affiche le message d'erreur si problème de connection
$Session = new Session();
$Session->setFlash('Problème de connection Mysql','warning');
}
// Verification des données
if (!isset($_POST['username'], $_POST['password'], $_POST['email'])) {
$Session = new Session();
$Session->setFlash('Veuillez remplir le formulaire d\'enregistrement!','error');
}
// tout doit être rempli
if (empty($_POST['username']) || empty($_POST['password']) || empty($_POST['confirmpassword']) || empty($_POST['email'])) {
$Session = new Session();
$Session->setFlash('Veuillez remplir le formulaire d\'enregistrement!','error');
}
// vérification du nom utilisateur mail mot de passe
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$Session = new Session();
$Session->setFlash('l\'email n\'est pas valide !','error');
}
if (preg_match('/[A-Za-z]+/', $_POST['username']) == 0) {
$Session = new Session();
$Session->setFlash('Seul les charactères alphanumériques minuscules et majuscules sont autorisés','error');
}
if (strlen($_POST['username']) > 20 || strlen($_POST['username']) < 5) {
$Session = new Session();
$Session->setFlash('Le nom d\'utilisateur doit comporter 5 à 20 charactères','error');
}
if (strlen($_POST['password']) > 20 || strlen($_POST['password']) < 5) {
$Session = new Session();
$Session->setFlash('Le mot de passe doit comporter 5 à 20 charactères!','error');
}
if ($_POST["password"] === $_POST["confirmpassword"]) {
}
else {
$Session = new Session();
$Session->setFlash('Les mots de passe ne sont pas identiques','error');
}
if ($stmt = $con->prepare('SELECT id, password, FROM users WHERE username = ?')) {
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();
$stmt->store_result();
// vérifie si le compte existe dans la base
if ($stmt->num_rows > 0) {
// le nom utilisateur existe déjà
echo 'Le nom d\'utilisateur existe déjà!';
} else {
// creation nouveau compte
if ($stmt = $con->prepare('INSERT INTO users (username, password, email) VALUES (?, ?, ?)')) {
// encryption du mot de passed
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$stmt->bind_param('sss', $_POST['username'], $password, $_POST['email']);
$stmt->execute();
echo 'Vous êtes désormais inscrit, veuillez télécharger l\'installateur de jeu ci-dessous pour continuer';
} else {
// problème état dans la base de données vérifier si elle comporte les champs requis
echo 'Déclaration invalide!';
}
}
$stmt->close();
} else {
// problème état dans la base de données vérifier si elle comporte les champs requis
echo 'Déclaration invalide!';
}
$stmt->close();
?>
[/PHP]
depuis que j'ai rajouté les $Session je n'arrive plus a écrire dans la base mais les erreurs de saisie fonctionne, j'aimerai de l'aide pour corriger cette partie :
[PHP]
if ($stmt = $con->prepare('SELECT id, password, FROM users WHERE username = ?')) {
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();
$stmt->store_result();
// vérifie si le compte existe dans la base
if ($stmt->num_rows > 0) {
// le nom utilisateur existe déjà
echo 'Le nom d\'utilisateur existe déjà!';
} else {
// creation nouveau compte
if ($stmt = $con->prepare('INSERT INTO users (username, password, email) VALUES (?, ?, ?)')) {
// encryption du mot de passed
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$stmt->bind_param('sss', $_POST['username'], $password, $_POST['email']);
$stmt->execute();
echo 'Vous êtes désormais inscrit, veuillez télécharger l\'installateur de jeu ci-dessous pour continuer';
} else {
// problème état dans la base de données vérifier si elle comporte les champs requis
echo 'Déclaration invalide!';
}
}
$stmt->close();
} else {
// problème état dans la base de données vérifier si elle comporte les champs requis
echo 'Déclaration invalide!';
}
$stmt->close();
?>[/PHP]
mes objectifs non atteint: revalider le fonctionnement du formulaire, ajouter la vérification d'email existant dans la BDD, redirection sur un autre page quand le formulaire est validé.