Progression du profil complété

Eléphant du PHP | 386 Messages

27 févr. 2014, 03:11

Bonjour,

J'aimerais afficher une progression du profil rempli.
Il me faut 10 champs à compléter pour arriver à 100% du profil rempli :

- Avatar : Si l'avatar existe, on ajoute 10
- Couverture : Si la couverture existe, on ajoute 10
- Sexe : (Enregistré à l'inscription par défaut)
- Emploi : Si l'emploi est rempli, on ajoute 10, sinon le champs est NULL
- Date de naissance : (Enregistré à l'inscription par défaut)
- Région : Si la région est rempli, on ajoute 10, sinon le champs est NULL
- Département : Si le département est rempli, on ajoute 10, sinon le champs est NULL
- Ville : Si la ville est rempli, on ajoute 10, sinon le champs est NULL
- Téléphone : Si le téléphone est rempli, on ajoute 10, sinon le champs est NULL
- Site web, facebook, twitter : Si l'adresse internet est rempli, on ajoute 10, sinon le champs est NULL

Le problème c'est pour vérifié si l'avatar et la couverture existe.
J'utilise file_exists();
Mais je ne sais pas comment faire pour conditionner tout ça !

Par exemple : if(file_exists($avatar) == TRUE){ On ajoute 10 } else { On reste à 0 }
Mais il y a 9 autres conditions à faire.

Il existe pas un moyen plus facile de faire ce système de progression ?

Merci d'avance ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 févr. 2014, 14:44

salut,

un moyen plus simple, oui garde cette info en base à chaque ajout d'une info tu incrémente.
pense, en cas de suppression d'une info à décrémenter en base ;)

par sur une base de 1 pour chaque élément tu fait le calcul de pourcentage ensuite.
ne t'amuse pas a mettre "10" pour chaque élément car si tu en rajoute un t'es obligé de tout recommencer.
alors qu'avec une unité par élément tu as juste à faire le calcule ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 386 Messages

27 févr. 2014, 17:41

Finalement, j'ai créé un nouveau champs dans ma table `users` : "profil_complete" de type INT(3)
Il contiendrait 20 par défaut, pour l'inscription du début.

Dès que le membre remplira un nouveau champs, j’exécute cette requête :
$profil_complete = $profil_complete++;
$req = $connect->prepare('UPDATE users SET profil_complete = :profil_complete WHERE pseudo = :pseudo');
$req->execute(array('profil_complete' => $profil_complete,'pseudo' => $_GET['pseudo']));
Il y a 2 problèmes :

- Dès que le membre rempli un champs, "profil_complete" est incrémenté, mais si il le modifie ou l'actualise, la requête est à nouveau exécuté.
- Et dès que la requête est exécuté, l'incrémentation ajoute 1 au champs "profil_complete", alors que j'aimerais faire un pourcentage de 10 en 10

Ensuite, pour vérifier si l'avatar et la couverture de profil existe, j'utilise cette condition :
if(file_exists($profil_membre) || file_exists($profil_cover)){
	$profil_complete = $data['profil_complete'] + 10;
	$req = $connect->prepare('UPDATE users SET profil_complete = :profil_complete WHERE pseudo = :pseudo');
	$req->execute(array('profil_complete' => $profil_complete,'pseudo' => $_GET['pseudo']));
}
Mais ça ajoute +10 à chaque réactualisation de la requête.
Je pense que c'est une mauvaise condition.

J'aimerais que quand on ajoute la couverture, on ajoute +10 au champs "profil_complete"
Pareil pour l'avatar.

Merci d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 févr. 2014, 00:11

as toi de ne faire cela que la première fois donc gérer le passage pas remplis a remplis (select des infos avant, mise en session le temps du formulaire etc).
perso je mettrais un tableau en session qui, à l'affichage du formulaire de modification, est remplis avec les infos existantes (en faite c'est le retour du sgnd).
A la validation du formulaire tu regarde si, en session, il y avait déja une valeur avant ou pas.
si pas de nouvelle valeur update, sinon pas d'update (+1).
pense a faire l'inverse si vide et avant pas vide update (-+).


Ensuite comme, expliquer avant, c'est une erreur de stocker des multiples de 10 en croyant que le calcul de pourcentage sera plus simple.
autant avoir une valeur simple et faire le calcul.
la chose sera évolutive dans problème.

rappel
% = (valeur * 100) / valeur maximal de l'échelle.

tu peux l'ajouter dans le select d'affichage, te faire une fonction perso sur le sgbd etc.

@+
Il en faut peu pour être heureux ......