Malheureusement il y a d'abord des points importants que je ne comprends pas,
et tant que ces points là je ne les comprends pas je ne peux pas avancer.
Il faut que je revienne à des points de compréhension plus généraux, je n'ai pas le choix.
J'ai une session à accès réservé avec une première page où je demande un nom d'utilisateur et un mot de passe.
Si cette première étape est validée, l'utilisateur arrive à un formulaire de réservation. C'est la deuxième étape.
J'ai dans mon SGBD une table qui correspond à mon formulaire pour le couple nom d'utilisateur/mot de passe
que j'appelle table A.
J'ai aussi dans mon SGBD une table qui correspond à mon formulaire de réservation que j'appelle table B.
La table A a un champs numéro de client (clef primaire), un champs nom d'utilisateur et un champs mot de passe.
La table B a plein de champs afférents à des choix spécifiques pour une réservation (nombre de personnes, réservation pour 1/2 journée ou une journée,...).
Le gros problème que je rencontre est quand je commence à me poser la question de savoir qu'est-ce que je dois mettre comme clef primaire
pour ma table B.
En effet, alors que je pensais utiliser le numéro de client comme clef primaire pour ma table B (qui est déjà clef primaire de ma table A),
je me rencontre que ça ne va pas le paramètre de l'auto_incrémentation que doit prendre la clef primaire donne des valeurs différentes
pour toutes les réservation d'un même client, alors que ce client lui est toujours unique.
Tu m'as alors proposé pour résoudre le problème d'utiliser des champs id qui ont l'avantage de pouvoir être un clef avec le paramètre AUTO_INCREMENT
tout en donnant une seule valeur seulement pour toutes les réservations d'un même client.
1ère question: est-ce que c'est pertinent d'un point de vue conception générale de rajouter un champs id en plus pour la table A et pour la table B
- en position de deuxième champs en dessous du champs numéro de client pour la table A et en position de premier champs pour la table B - en plus des champs déjà existants
(sachant dans ce cas que le champs numéro de client est toujours clef primaire dans la table A et c'est le champs id qui devient clef primaire dans la table B)?
2ème question: si j'ai alors un champs id dans les deux tables A et B, il convient mieux comme tu me l'as fait remarquer d'ajouter
la présence obligatoire en plus de $_SESSION['id_utilisateur'] sur toutes les pages de la session comme suit:
session_start();
if (isset($_SESSION['id_utilisateur]) && isset($_SESSION['nom_utilisateur']) && isset($_SESSION['mot_de_passe'])){
...
au lieu seulement de:
session_start();
if (isset($_SESSION['nom_utilisateur']) && isset($_SESSION['mot_de_passe'])){
...
Je suis sûr ainsi de pouvoir disposer de cette variable chaque fois que j'en ai besoin.
Ma question est de savoir comment récupérer cette variable?
Je récupère les variables du nom d'utilisateur et du mot passe avec le premier formulaire car
j'ai des champs text, mais je n'ai pas de champs text me permettant de récupérer l'id qui se trouve
dans ma base de données.
J'ai donc pensé à mettre un champs caché sur mon premier formulaire mais je galère vachement...
J'arrive à coder sur ma page du premier formulaire pour récupérer toutes les données sur trouvant
dans le champs id dans ma base de données, à mettre ces données en attente, dans un endroit
temporaire grâce à Mysqli_query et j'arrive bien sûr à créer un champs caché dans mon formulaire
avec name="id_utilisateur".
Mais c'est pas simple car il me reste un travail d'association à faire. C'est ça sur quoi je bloque
En effet, il faut encore que j'associe la valeur qui se trouve dans l'endroit temporaire
avec la valeur qui se trouve dans le champs caché.
Pour dire ça autrement, il faut que je permette au programme de prendre la bonne variable dans l'endroit temporaire et de l'associer
au champs caché, sinon la variable restera éternellement dans l'endroit temporaire et sera toujours déconnectée du champs caché.
Moi, je veux permettre la connexion entre les deux.
Mais c'est encore plus compliqué que ça, car je ne sais pas parmi toutes les valeurs id qui se trouvent dans l'endroit temporaire
laquelle est celle qui va correspondre à la référence de l'utilisateur qui va cliquer sur envoi.
Ca je pourrai le savoir une fois seulement que l'utilisateur aura cliqué sur envoi,...
Si maintenant je mets la portion de code avec mysqli_query dans la page de traitement de formulaire et non dans
la page de formulaire, je ne peux pas mettre mon champs caché dans ma page de traitement de formulaire.
C'est le chat qui essaye de se mordre la queue.
Pour moi c'est un vrai casse-tête chinois.
Je ne sais pas si tu peux m'éclairer.
Si j'ai une solution pour ça, je peux alors répercuter l'id sur toutes les pages de ma session!!
3ème question: ma table en SQL
CREATE TABLE reservations (
id_utilisateur char(5) NOT NULL AUTO_INCREMENT,
...
et patati et patata tout ça ça marche très bien il s'agit des détails de la réservation du client X
...
PRIMARY KEY (id_utilisateur)
);
Je n'arrive pas à créer la table!
L'interface de phpmyadmin m'informe:
#1063 - Incorrect column specifier for column 'id_utilisateur'
Il suffit que l'enlève le paramètre AUTO_INCREMENT comme suit pour que ça marche:
CREATE TABLE reservations (
id_utilisateur char(5) NOT NULL,
...
et patati et patata tout ça ça marche très bien il s'agit des détails de la réservation du client X
...
PRIMARY KEY (id_utilisateur)
);
Mais bien sûr ça ne va pas: aucune ligne de réservation ne peut fonctionner
sans un champs avec le paramètre AUTO_INCREMENT.
4ème question: c'est moi qui donne un mot de passe et un nom d'utilisateur à mes clients.
Mes clients, eux, ne peuvent pas les choisir eux-mêmes (c'est un choix voulu par rapport à
mon projet professionnel).
Il en est de même pour le champs id.
Comme c'est nouveau pour moi, est-ce que tu pourrais me donner un conseil sur quelle valeur
mettre pour le champs id? Le champs id est tout-à-fait nouveau pour moi et je ne sais pas trop comment
l'appréhender.
D'après ce que j'ai dis tout en haut de la question 4, mon premier formulaire ne permet donc pas à l'utilisateur d'entrer des
données dans une base de données alors que le deuxième si.
Le premier formulaire vérfie si les données saisies correspondent à celles qui sont dans la base de données
et le deuxième permet à l'utilisateur de remplir la base de données (pour dire ça simplement).
5ème question: est-ce que tu peux me dire si cette façon de voir les choses est bonne?
Le champs id donne une valeur unique à toutes les réservations d'un même client dans ma table B
et il permet aussi de permettre à l'ordinateur d'assurer l'AUTO_INCREMENTATION.
C'est pour cela que je dois avoir ce champs dans ma table B.
Pour des raisons pratiques, il convient de garder "en mémoire vive" la variable du champs id sur toutes les
pages de ma session. Il faut pour ce faire récupérer cette variable dans la base de données même pour
un utilisateur qui a ses identifiants mais qui n'a encore jamais fait de réservation.
C'est pour cela que je dois avoir ce champs dans ma table A aussi.
Mon champs numéro de client qui se trouve dans ma table A est le seul champs qui donne une
identification VRAIMENT unique pour un seul client.
Je le garde dans ma table A car c'est très significatif avec le couple nom d'utilisateur/mot de passe.
Je ne le garde pas dans ma table B car c'est mon significatif dans cette table là.
Je crois que je n'ai jamais autant galérer sur la conception d'un programme
Vraiment, désolé pour toutes ces questions et un grand merci!!!