Bonsoir à tous,
Bon.. Comme d'habitude, je suis désespérée... Je suis un tuto à la lettre et... Ben ça marche pas (pour moi uniquement).
En fait je m'explique :
Un utilisateur pour une application, doit s'inscrire pour pouvoir l'utiliser au mieux.
Il doit renseigner sa civilité, son nom/prénom, son adresse email, son mot de passe et le confirmer, puis doit accepter les conditions générales.
Par défaut, celles-ci sont cochées.
Dans le tuto, on m'explique un moyen de retenir les champs déjà renseignés pour que l'utilisateur n'ai pas à le retaper s'il produit une/des erreur(s) dans sa saisie.
Dans la logique, on retient d'abord tous les champs sauf le mot de passe, et on vient placer dans la propriété value des input, les champs qui ont déjà été renseignés, à l'aide d'une fonction, qui vient enregistrer ces derniers dans des sessions.
Mon code ci-après :
Mon formulaire (avec les champs dans value) :
<?php include('includes/functions.php');?>
<div class="col-xs-12 col-sm-6">
<h1 class="lead">Inscription</h1>
<form method="POST" autocomplete="off">
<div class="form-group col-xs-12">
<label for="nom">Civilité</label>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-venus-mars" aria-hidden="true"></i></span>
<select name="civilite" class="form-control">
<option disabled selected>Saisissez votre civilité</option>
<option value="madame">Madame</option>
<option value="monsieur">Monsieur</option>
</select>
</div>
</div>
<div class="form-group col-xs-12 col-sm-6">
<label for="nom">Nom</label>
<div class="input-group"> <span class="input-group-addon"><i class="fa fa-user"></i></span> <input type="text" value="<?= get_input('nom'); ?>" class="form-control" name="nom" id="nom" placeholder="Nom de famille"> </div>
</div>
<div class="form-group col-xs-12 col-sm-6">
<label for="prenom">Prénom</label>
<div class="input-group"> <span class="input-group-addon"><i class="fa fa-user"></i></span> <input type="text" value="<?= get_input('prenom'); ?>" class="form-control" name="prenom" id="prenom" placeholder="Prénom principal"/> </div>
</div>
<div class="form-group col-xs-12">
<label for="email">Adresse email</label>
<div class="input-group"> <span class="input-group-addon"><i class="fa fa-at"></i></span> <input type="email" value="<?= get_input('email'); ?>" class="form-control" name="email" id="email" placeholder="ex: [email protected]"/> </div>
</div>
<div class="form-group col-xs-12">
<label for="mdp">Sécurité</label>
<div class="input-group"> <span class="input-group-addon"><i class="fa fa-lock"></i></span> <input type="password" class="form-control" name="mdp" id="mdp" placeholder="Saisissez un mot de passe"> </div>
</div>
<div class="form-group col-xs-12">
<div class="input-group"> <span class="input-group-addon"><i class="fa fa-lock"></i></span> <input type="password" class="form-control" name="mdp2" id="mdp2" placeholder="Confirmez le mot de passe"> </div>
</div>
<div class="form-group col-xs-12">
<div class="checkbox checkbox-primary">
<input type="checkbox" id="engage" name="engage" class="checkbox-primary" checked> <!-- Mis à Checked par défaut -->
<label for="engage">
Je m'engage à respecter les <a href="assets/conditions.php">conditions générales d'utilisations</a> de <?php echo WEBSITENAME;?></span>
</label>
</div>
</div>
<input type="submit" class="btn btn-primary" name="inscription" value="Hop, je m'inscris !"/>
</form>
</div>
Mon traitement :
<?php
require('config/db_config.php');
require('includes/functions.php');
if(isset($_POST['inscription'])){
if(not_empty(['civilite','nom','prenom','email','mdp','mdp2','engage'])){
$errors = [];
extract($_POST);
if(mb_strlen($nom) < 3 || mb_strlen($prenom) < 2){
$errors[] = "Veuillez saisir 3 caractères minimum pour votre nom/prénom.";
}
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$errors[] = "Votre adresse email a un format non adapté.";
}
if(mb_strlen($mdp) < 6){
$errors[] = "Le mot de passe est trop court (6 caractères minimum).";
}
else{
if($mdp != $mdp2){
$errors[] = "Les deux mots de passe ne correspondent pas.";
}
}
if(is_already_in_use('email',$email,'users')){
$errors[] = "L'adresse email saisie est déjà utilisée pour un compte.";
}
if(count($errors)== 0){
$to = $email;
$subject = WEBSITENAME. " - ACTIVATION DE COMPTE";
$token = sha1($nom.$email.$mdp);
ob_start();
require('templates/emails/active.tmpl.php');
$content = ob_get_clean();
$headers = 'MIME-VERSION : 1.0'.'\r\n';
$headers .= 'Content-type: text/html; charset=iso-8859-1'.'\r\n';
$headers .= 'From: '.WEBSITENAME.' <[email protected]>'."\r\n";
$headers .= 'From: webmaster@'.WEBSITENAME.'.com' . "\r\n" .
'Reply-To: [email protected]' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1'.'\r\n';
mail($to,$subject,$content,$headers);
echo '<div class="col-xs-12 col-sm-6 alert alert-success"><i class="fa fa-check-circle"></i> Un mail d\'activation vous a été envoyé.</div>';
//set_flash("Un mail d'activation vous a été envoyé.", "succes");
}
else{
include('partials/_errors.php');
save_input_data();
}
}
else{
$errors[] = "Tous les champs doivent être renseignés.";
include('partials/_errors.php');
save_input_data();
}
}
?>
Mes fonctions :
if(!function_exists('save_input_data')){
function save_input_data(){
foreach($_POST as $key => $value){
if(strpos($key,'password') === false){
$_SESSION['input'][$key] = $value;
}
}
}
}
if(!function_exists('get_input')){
function get_input($key){
return !empty($_SESSION['input'][$key])
? $_SESSION['input'][$key]
: null;
}
}
Mon soucis ?
Bah ça ne marche tout simplement pas, quand y'a erreur (que l'utilisateur a mal renseigné le formulaire), ça m'affiche bien l'erreur relative (encore que des fois, ça bug....) mais pour ce qui est des champs sauvergardés ? Nada. Rien je dois tout retaper.
Vous pouvez m'aider s'il vous plaît ?
Bonsoir à tous,
Bon.. Comme d'habitude, je suis désespérée... Je suis un tuto à la lettre et... Ben ça marche pas (pour moi uniquement).
En fait je m'explique :
Un utilisateur pour une application, doit s'inscrire pour pouvoir l'utiliser au mieux.
Il doit renseigner sa civilité, son nom/prénom, son adresse email, son mot de passe et le confirmer, puis doit accepter les conditions générales.
Par défaut, celles-ci sont cochées.
Dans le tuto, on m'explique un moyen de retenir les champs déjà renseignés pour que l'utilisateur n'ai pas à le retaper s'il produit une/des erreur(s) dans sa saisie.
Dans la logique, on retient d'abord tous les champs sauf le mot de passe, et on vient placer dans la propriété value des input, les champs qui ont déjà été renseignés, à l'aide d'une fonction, qui vient enregistrer ces derniers dans des sessions.
Mon code ci-après :
[b]Mon formulaire (avec les champs dans value) :[/b]
[PHP]<?php include('includes/functions.php');?>
<div class="col-xs-12 col-sm-6">
<h1 class="lead">Inscription</h1>
<form method="POST" autocomplete="off">
<div class="form-group col-xs-12">
<label for="nom">Civilité</label>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-venus-mars" aria-hidden="true"></i></span>
<select name="civilite" class="form-control">
<option disabled selected>Saisissez votre civilité</option>
<option value="madame">Madame</option>
<option value="monsieur">Monsieur</option>
</select>
</div>
</div>
<div class="form-group col-xs-12 col-sm-6">
<label for="nom">Nom</label>
<div class="input-group"> <span class="input-group-addon"><i class="fa fa-user"></i></span> <input type="text" value="<?= get_input('nom'); ?>" class="form-control" name="nom" id="nom" placeholder="Nom de famille"> </div>
</div>
<div class="form-group col-xs-12 col-sm-6">
<label for="prenom">Prénom</label>
<div class="input-group"> <span class="input-group-addon"><i class="fa fa-user"></i></span> <input type="text" value="<?= get_input('prenom'); ?>" class="form-control" name="prenom" id="prenom" placeholder="Prénom principal"/> </div>
</div>
<div class="form-group col-xs-12">
<label for="email">Adresse email</label>
<div class="input-group"> <span class="input-group-addon"><i class="fa fa-at"></i></span> <input type="email" value="<?= get_input('email'); ?>" class="form-control" name="email" id="email" placeholder="ex:
[email protected]"/> </div>
</div>
<div class="form-group col-xs-12">
<label for="mdp">Sécurité</label>
<div class="input-group"> <span class="input-group-addon"><i class="fa fa-lock"></i></span> <input type="password" class="form-control" name="mdp" id="mdp" placeholder="Saisissez un mot de passe"> </div>
</div>
<div class="form-group col-xs-12">
<div class="input-group"> <span class="input-group-addon"><i class="fa fa-lock"></i></span> <input type="password" class="form-control" name="mdp2" id="mdp2" placeholder="Confirmez le mot de passe"> </div>
</div>
<div class="form-group col-xs-12">
<div class="checkbox checkbox-primary">
<input type="checkbox" id="engage" name="engage" class="checkbox-primary" checked> <!-- Mis à Checked par défaut -->
<label for="engage">
Je m'engage à respecter les <a href="assets/conditions.php">conditions générales d'utilisations</a> de <?php echo WEBSITENAME;?></span>
</label>
</div>
</div>
<input type="submit" class="btn btn-primary" name="inscription" value="Hop, je m'inscris !"/>
</form>
</div>[/PHP]
[b]Mon traitement : [/b]
[PHP]<?php
require('config/db_config.php');
require('includes/functions.php');
if(isset($_POST['inscription'])){
if(not_empty(['civilite','nom','prenom','email','mdp','mdp2','engage'])){
$errors = [];
extract($_POST);
if(mb_strlen($nom) < 3 || mb_strlen($prenom) < 2){
$errors[] = "Veuillez saisir 3 caractères minimum pour votre nom/prénom.";
}
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$errors[] = "Votre adresse email a un format non adapté.";
}
if(mb_strlen($mdp) < 6){
$errors[] = "Le mot de passe est trop court (6 caractères minimum).";
}
else{
if($mdp != $mdp2){
$errors[] = "Les deux mots de passe ne correspondent pas.";
}
}
if(is_already_in_use('email',$email,'users')){
$errors[] = "L'adresse email saisie est déjà utilisée pour un compte.";
}
if(count($errors)== 0){
$to = $email;
$subject = WEBSITENAME. " - ACTIVATION DE COMPTE";
$token = sha1($nom.$email.$mdp);
ob_start();
require('templates/emails/active.tmpl.php');
$content = ob_get_clean();
$headers = 'MIME-VERSION : 1.0'.'\r\n';
$headers .= 'Content-type: text/html; charset=iso-8859-1'.'\r\n';
$headers .= 'From: '.WEBSITENAME.' <
[email protected]>'."\r\n";
$headers .= 'From: webmaster@'.WEBSITENAME.'.com' . "\r\n" .
'Reply-To:
[email protected]' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1'.'\r\n';
mail($to,$subject,$content,$headers);
echo '<div class="col-xs-12 col-sm-6 alert alert-success"><i class="fa fa-check-circle"></i> Un mail d\'activation vous a été envoyé.</div>';
//set_flash("Un mail d'activation vous a été envoyé.", "succes");
}
else{
include('partials/_errors.php');
save_input_data();
}
}
else{
$errors[] = "Tous les champs doivent être renseignés.";
include('partials/_errors.php');
save_input_data();
}
}
?>[/PHP]
[b]Mes fonctions :[/b]
[PHP]
if(!function_exists('save_input_data')){
function save_input_data(){
foreach($_POST as $key => $value){
if(strpos($key,'password') === false){
$_SESSION['input'][$key] = $value;
}
}
}
}
if(!function_exists('get_input')){
function get_input($key){
return !empty($_SESSION['input'][$key])
? $_SESSION['input'][$key]
: null;
}
}[/PHP]
Mon soucis ?
Bah ça ne marche tout simplement pas, quand y'a erreur (que l'utilisateur a mal renseigné le formulaire), ça m'affiche bien l'erreur relative (encore que des fois, ça bug....) mais pour ce qui est des champs sauvergardés ? Nada. Rien je dois tout retaper.
Vous pouvez m'aider s'il vous plaît ?