Bonjour,

J'ai actuellement un questionnaire avec plusieurs questions et réponse.

Ce que je veux

J'aimerais que lorsque que la personne répond au questionnaire cela créer un identifiant qu'il conserve tout au long du questionnaire afin que dernière on puisse savoir que l'id a répondu tel ou tel réponse.
Cependant une fois que le questionnaire fini, on incrémenterais cette identifiant pour la personne suivante.

J'avais penser à un truc du genre

if($_GET['id_utilisateur']){ // S'il existe
    $top = 'select id_utilisateur from sondage_reponses order by id_utilisateur  DESC LIMIT 0,1';
    if($_GET['id_utilisateur'] == $top){
        $id_utilisateur = $_GET['id_utilisateur']+1;
    }else 
    $id_utilisateur = $_GET['id_utilisateur'];
} else { // N'existe pas donc on crée le premier utilisateur 
    $id_utilisateur = 1;
}

Cependant je m'apperçois que c'est pas possible. Quelqu'un aurait une idée ?

10 réponses


Bonjour.
Tu devrais utiliser la session en créant un uuid, soit un identifiant unique.
Car là ce que tu fais, c'est que tu dis que si la variable id_utilisateur n'est pas défini, qu'il vaut 1, ce qui veut dire que tous les utilisateurs auront comme identifiant 1 par défaut, ou plutôt 2, vu que tu l'incrémentes de 1.
Tu n'auras donc jamais d'identifiant du type 3, 4, etc.
Ou alors en utilisant un Cookie à la place de la Session.
Il aurait été mieux que tu donnes plus de précisions, car sans savoir dans quel contexte est utilisé le questionnaire, il est difficile de pouvoir t'aiguiller correctement.

gweared
Auteur

Pour répondre en fait, c'est pour un projet. L'utilisateur arrive sur le questionnaire. Il répond ensuite à 3 -4 questions.
Les réponses sont stockés dans une base de donnée et on aimerais par la suite savoir que l'utilisateur 1 a mis tel ou tel réponses.

if(isset($_SESSION['id_utilisateur']) && empty($_SESSION['id_utilisateur'])){
    $id_personne = $_SESSION['id_utilisateur'];

}else {
    session_start();
    $_SESSION['id_utilisateur'] = mt_rand(1, 100000);
    var_dump($_SESSION['id_utilisateur'] );
}

J'ai donc mis cela mais le souci c'est que la session se rénitialise quand je passe à la question suivante vu que j'utilise un header qui rafraichit la page.

Pour commencer, ta condition est incorrecte, car actuellement voici ce que tu dis :
Si$_SESSION['id_utilisateur'] existe et que $_SESSION['id_utilisateur']est vide, alors la valeur de la variable ìd_personne est $_SESSION['id_utilisateur'], sinon, on démarre la session et la valeur de $_SESSION['id_utilisateur'] est mt_rand(1, 100000).
Le premier problème vient de la condition comment veux-tu définir la valeur d'une variable, si tu utilises $_SESSION['id_utilisateur'] qui est vide ?
Le second problème, c'est que dans le else tu ne définis pas la valeur de la variable id_personne.
Ensuite, lorsque tu veux utiliser la variable de session, il faut d'abord initialiser la session, tu ne devrais donc pas initialiser la session que dans le else étant donné que tu l'utilises dans la condition.
Tu devrais donc plutôt avoir par exemple :

session_start();
if (!empty($_SESSION['id_utilisateur'])) {
    $id_personne = $_SESSION['id_utilisateur'];
} else {
    $_SESSION['id_utilisateur'] = mt_rand(1, 100000);
    $id_personne = $_SESSION['id_utilisateur'];
}

j'utilise un header qui rafraichit la page.

Le header qui raffraichi la page, tu l'as sur la page ou tu as ce code là ou sur une autre ?

Salut,

Attendez une minute, avant de corriger le code moi j'aimerai qu'on reparle de "l'idée" :

J'aimerais que lorsque que la personne répond au questionnaire cela créer un identifiant qu'il conserve tout au long du questionnaire,

Non, on attribue pas un ID à une personne au moment où elle répond à un questionnaire.
L'ID est créé au moment où la personne créer un compte.
Et quand elle répond au questionnaire, tu récupères son ID pour l'insérer avec ses réponses, dans la table "quiz_answers".

J'imagine que tu voulais permettre aux personnes de répondre au questionnaire SANS avoir à créer de compte c'est ça ?
Mais si elles n'ont pas de compte, leur attribuer un ID "pendant" le questionnaire ne sera pas utile, puisqu'on ne pourra pas associer cet ID à une personne plus tard.
Ce que tu peux faire tout de même, c'est de laisser quand même les personnes SANS compte répondre.
Et quand tu enregistres leurs réponses, dans le champ "id_user" tu mets "0", pour dire "anonyme", et on ne pourra pas savoir qui c'est mais tant pis.
Si les réponses "anonymes" ne te conviennent pas, il faut interdire aux personnes non connectées de répondre.

le souci c'est que la session se rénitialise quand je passe à la question suivante vu que j'utilise un header qui rafraichit la page.

Là aussi il y a quelque chose d'étrange, pourquoi changer de page (ou la rafraichir) réinitialise la Session ?
Ce n'est pas normal ça.

gweared
Auteur

Pour être plus précis : on propose à des personnes après une présentation de projet de répondre à un questionnaire en rapport avec ce qui a été proposé juste avant.
Ce questionnaire est bien entendu anonyme mais on a quand même besoin de savoir que la personne qui a répondu par exemple à la question " Etes vous un homme ou une femme" a répondu par exemple oui ou non à la question 2 d'où la nécessité de mettre un id à la personne qui répond au questionnaire.
Cela permet une fois rempli derrière d'analyser celui-ci.

Pour le deuxième point, non ce n'était pas normal mais c'est surtout parce que je mettais planter dans mon code

Ce n'est pas très clair. Est-ce que le questionnaire s'effectue en une seule fois ou est-ce que les questions posées avec les éventuelles réponses possibles changent au fur et à mesure ? (Par exemple est-ce que les questions suivantes différent selon qu'on soit un homme ou une femme ? Est-ce que les informations données par la personne sont utiles au processus de réponse au questionnaire lui même ?)

Dans le cas simple où le questionnaire n'est pas "évolutif" (mêmes questions pour tout le monde) :

Eh bien il n'existe pas de personnes puisqu'elles sont anonymes. Ce qui existe, ce ne sont pas des personnes mais des jeux de réponses. (Des ensembles de réponses au questionnaire.) Déjà, il me semble important de faire cette nuance.

Ensuite, un id c'est un élément fixe. Ca sert à identifier quelque chose. (Un acteur du programme, un objet... ici le jeu de réponses.) Le mieux est de faire en sorte que l'id s'incrémente automatiquement en base de données. On enregistre un jeu de réponses en base de données... l'id est créé automatiquement. Une autre personne enregistre un autre jeu de résultat, l'id+1 est créé automatiquement et ainsi de suite... Si on a besoin de cet id pour un autre traitement, on le récupère. (Je ne comprends pas très bien pourquoi il faudrait créer et incrémenter des id dans le code php ni à quoi servent les sessions dans le cas présent.)

Comment faire pour qu'une même personne ne réponde pas plusieurs fois ? Eh bien on ne peut pas, puisqu'elle est anonyme. On ne sait pas identifier une personne anonyme, par définition. Mais on peut faire en sorte qu'une personne utilisant un même poste ne réponde pas plusieurs fois (Avec les cookies. On crée le cookie lors de la validation du formulaire, dans lequel on met un couple clé / valeur, sans même que ce soit nécessairement un id. Avant d'afficher le formulaire quand on atteint la page, on vérifie l'éventuelle existance de ce couple clé / valeur dans le cookie. ) Néanmoins, ce n'est pas super clean car la personne peut toujours effacer elle-même le cookie. Ce qui serait clean, ce serait de créer des comptes utilisateurs avec adresse mail unique en bdd. Là on aurait bien des personnes, et non pas juste des jeux de réponses ou des postes (cookies.)

Ce questionnaire est bien entendu anonyme mais on a quand même besoin de savoir que la personne qui a répondu par exemple à la question " Etes vous un homme ou une femme" a répondu par exemple oui ou non à la question 2 d'où la nécessité de mettre un id à la personne qui répond au questionnaire.

Moi c'est avec cette partie que j'ai du mal.
Si la personne qui répond, n'est pas connectée, tu aura beau lui affecter un soi-disant "identifiant", en vérité cette personne reste anonyme. Impossible d'associer cet identifiant à cette personne plus tard dans des traitements ultérieurs (i.e quand la SESSION se sera fermée).
Si elle est connectée, alors le questionnaire n'est plus anonyme.

Soit quelque chose m'échappe, soit tu essaies de faire quelque chose qui n'est pas possible.

Si le questionnaire est VRAIMENT anonyme, je suis du même avis que @stef-dg, notamment le 4ème paragraphe :

Ensuite, un id c'est un élément fixe. Ca sert à identifier quelque chose. (Un acteur du programme, un objet... ici le jeu de réponses.) Le mieux est de faire en sorte que l'id s'incrémente automatiquement en base de données. On enregistre un jeu de réponses en base de données... l'id est créé automatiquement. Une autre personne enregistre un autre jeu de résultat, l'id+1 est créé automatiquement et ainsi de suite... Si on a besoin de cet id pour un autre traitement, on le récupère. (Je ne comprends pas très bien pourquoi il faudrait créer et incrémenter des id dans le code php ni à quoi servent les sessions dans le cas présent.)

J'imagine que tu voulais permettre aux personnes de répondre au questionnaire SANS avoir à créer de compte c'est ça ?
Mais si elles n'ont pas de compte, leur attribuer un ID "pendant" le questionnaire ne sera pas utile, puisqu'on ne pourra pas associer cet ID à une personne plus tard. mobdro

@theresa72

Il y a 2 ans

Check la date avant de répondre à un sujet, depuis 2 ans, j'espère qu'il a résolu son problème.

gweared
Auteur

Oui Oui j'ai résolu le problème ^^ et non pas de compte de créer. Mais l'id permettait de savoir que la personne a l'id 1 a répondu de tel ou tel façon, la personne a l'id 2 de tel ou ou tel façon et ainsi de suite.
Le souci si on met pas d'id, comment savoir si la personne qui a répondu A a la première question a répondu B à la deuxième. Voilà à quoi cela servait de mettre un id défini