Le voici :
Requête SQL
La boucle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $query_selection_cours_tp_eleve = mysql_query("SELECT DISTINCT(titre_cours_tp), t3.matiere_cours_tp, t3.classe_cours_tp, t3.date_depot_cours_tp, contenu_cours_tp, t3.nom_auteur_cours_tp, type_devoir_cours_tp, t3.date_cloture_validation_cours_tp FROM test_site_utilisateur t1, test_site_cours_tp t3 WHERE t1.pseudo_utilisateur='$pseudo_utilisateur' AND t3.type_devoir_cours_tp='1' ORDER BY date_cloture_validation_cours_tp") or die ('Erreur lors de la requête SQL qui permet de récupérer les Cours/TP d\'un élève.');
C'est le code de la page qui liste les cours.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 while ($donnees_cours_tp_eleve = mysql_fetch_assoc($query_selection_cours_tp_eleve)) { echo '<a href="adresse.php" target="_blank" id="lien_cours_tp">'.$donnees_cours_tp_eleve['titre_cours_tp'].'</a>'; }
Cordialement
Plusieurs remarques : (déjà dites, pour la plupart, mais tu n'en tiens pas compte)
1/ Une requête comme celle-là se fait avec JOIN (INNER JOIN, LEFT JOIN...).
2/ Un cours est, normalement identifié de manière unique par un champ auto-incrémenté. On va l'appelé id_cours_tp.
N.B. ON t1.id_cours_tp = t3.id_cours_tp$query_selection_cours_tp_eleve = mysql_query("
SELECT DISTINCT(id_cours_tp), t3.titre_cours_tp, t3.matiere_cours_tp, t3.classe_cours_tp, t3.date_depot_cours_tp, contenu_cours_tp, t3.nom_auteur_cours_tp, type_devoir_cours_tp, t3.date_cloture_validation_cours_tp
FROM test_site_utilisateur t1
LEFT JOIN test_site_cours_tp t3
ON t1.id_cours_tp = t3.id_cours_tp
WHERE t1.pseudo_utilisateur='$pseudo_utilisateur' AND t3.type_devoir_cours_tp='1'
ORDER BY date_cloture_validation_cours_tp
")
or die ('Erreur lors de la requête SQL qui permet de récupérer les Cours/TP d\'un élève.');
=> à toi de nous dire comment sont reliées les deux tables : id_cours_tp ? titre_cours_tp ?
3/ On transmet cet id dans le lien.
4/ On récupère alors dans la page adresse.php :while ($donnees_cours_tp_eleve = mysql_fetch_assoc($query_selection_cours_tp_eleve)) {
echo '<a href="adresse.php?id_cours_tp='. $donnees_cours_tp_eleve['id_cours_tp'] .'" target="_blank" id="lien_cours_tp">'.$donnees_cours_tp_eleve['titre_cours_tp'].'</a>';
}
Code php : Sélectionner tout - Visualiser dans une fenêtre à part $id_cours_tp = intval($_GET['id_cours_tp']);
J'ai des erreurs dans les tables.
Je vous mets les CREATE TABLE des deux tables :
test_site_utilisateur
test_site_cours_tp
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 CREATE TABLE IF NOT EXISTS `test_site_utilisateur` ( `id_utilisateur` int(11) NOT NULL AUTO_INCREMENT, `nom_etablissement_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `nom_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `prenom_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `date_naissance_utilisateur` date NOT NULL, `civilite_utilisateur` varchar(12) CHARACTER SET utf8 NOT NULL, `sexe_utilisateur` varchar(8) CHARACTER SET utf8 NOT NULL, `acces_utilisateur` int(11) NOT NULL DEFAULT '5', `email_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `pseudo_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `password_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `code_postal_etablissement_utilisateur` varchar(5) CHARACTER SET utf8 NOT NULL, `classe_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `matiereenseignee_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `ville_etablissement_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `date_inscription_utilisateur` datetime NOT NULL, `date_derniere_connexion_utilisateur` datetime NOT NULL, `date_creation_classe_utilisateur` datetime NOT NULL, PRIMARY KEY (`id_utilisateur`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
Je sais que je débute mais comme on dit c'est en faisant des "bêtises" qu'on apprend.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE TABLE IF NOT EXISTS `test_site_cours_tp` ( `id_cours_tp` int(11) NOT NULL AUTO_INCREMENT, `date_depot_cours_tp` datetime NOT NULL, `date_cloture_validation_cours_tp` datetime NOT NULL, `titre_cours_tp` varchar(255) CHARACTER SET utf8 NOT NULL, `contenu_cours_tp` longtext CHARACTER SET utf8 NOT NULL, `type_devoir_cours_tp` int(11) NOT NULL DEFAULT '1', `matiere_cours_tp` varchar(255) CHARACTER SET utf8 NOT NULL, `nom_auteur_cours_tp` varchar(255) CHARACTER SET utf8 NOT NULL, `classe_cours_tp` varchar(255) CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id_cours_tp`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
Donc là, il faut que je rajoute un champs id_cours_tp dans la table test_site_utilisateur.
Il y a t'il d'autres erreurs dans les CREATE TABLE ?
Par contre, ne croyez pas que j'attends vos réponses en me tournant les pouces. Je cherche mais sur ce coup, j'ai du mal !
Voilà !
Merci d'avance
PS : J'ai ajouté id_cours_tp dans la table test_site_utilisateur. Voici la requête SQL :. Il n'y a pas d'erreur affichée mais aussi pas de données (page blanche).
Code : Sélectionner tout - Visualiser dans une fenêtre à part $query_selection_cours_tp_eleve = mysql_query("SELECT DISTINCT(t1.id_cours_tp), t3.titre_cours_tp, t3.matiere_cours_tp, t3.classe_cours_tp, t3.date_depot_cours_tp, contenu_cours_tp, t3.nom_auteur_cours_tp, type_devoir_cours_tp, t3.date_cloture_validation_cours_tp FROM test_site_utilisateur t1 LEFT JOIN test_site_cours_tp t3 ON t1.id_cours_tp = t3.id_cours_tp WHERE t1.pseudo_utilisateur='$pseudo_utilisateur' AND t3.type_devoir_cours_tp='1' ORDER BY date_cloture_validation_cours_tp") or die ('Erreur lors de la requête SQL qui permet de récupérer les Cours/TP d\'un élève.'); // Envoie une requête à un serveur MySQL
Quelle relation existe-t-il entre `test_site_utilisateur` et `test_site_cours_tp` ?
Aucune, apparemment. Ce qui, à priori, est normal.
Car relier les utilisateurs aux cours nécessiterait une 3ème table : appelée table "relationnelle".
Elle se présenterait comme ça :
On ne sait pas si tu en as besoin, car tu N'EXPLIQUES PAS CLAIREMENT CE QUE TU AS AU DEPART, CE QUE TU FAIS, et LE RÉSULTAT QUE TU VEUX OBTENIR !
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CREATE TABLE IF NOT EXISTS `test_relation_cours_user` ( `id_rel_cours_user` int(11) NOT NULL AUTO_INCREMENT, `id_cours_tp` int(11) NOT NULL, `id_utilisateur` int(11) NOT NULL, PRIMARY KEY (`id_rel_cours_user`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Donc... explique-nous ce que tu cherches à faire avec ta requête, dans laquelle figurent ces 2 tables ?
Dixit : "la requête SQL qui permet de récupérer les Cours/TP d'un élève"
A MON AVIS, ton plus GROS problème est un problème de CONCEPTION.
Avant aucune mais j'ai rajouté id_cours_tp dans la table test_site_utilisateur...
Je cherche à faire en sorte que quand l'utilisateur choisit un cours, celui-ci et uniquement celui-ci s'affiche...
Effectivement...A MON AVIS, ton plus GROS problème est un problème de CONCEPTION.
Ajouter n'importe quoi, n'importe où et n'importe comment ne résoudra rien.
On ne se lance pas dans le codage à l'aveuglette.
Il faut de la rigueur, du papier et un stylo.
Et rédiger une "feuille de route".
Une bonne CONCEPTION suppose de savoir :
- d'où on part,
- avec quoi,
- où on va,
- comment y aller,
- de quoi on a besoin.
De la page où il y a la liste des cours.[*]d'où on part,
Avec l'identifiant et pas le titre du cours que l'utilisateur aura choisi.[*]avec quoi,
Sur la page d'affichage du cours choisi.[*]où on va,
On y va via un lien[*]comment y aller,.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <a href="adresse.php?id_cours_tp='. $donnees_cours_tp_eleve['id_cours_tp'] .'" target="_blank" id="lien_cours_tp">'.$donnees_cours_tp_eleve['titre_cours_tp'].'</a>
On a besoin de l'identifiant du cours choisi par l'utilisateur.[*]de quoi on a besoin.
Ça, c'était la version "Micro Cosmos".
La vision globale :
- d'où on part :
cahier des charges, liste des besoins pour le site.- avec quoi :
langage dynamique (PHP), base de données SQL,...- où on va :
objectif(s) à atteindre- comment y aller :
moyens à mettre en oeuvre pour atteindre les objectifs- de quoi on a besoin :
éléments nécessaires (base de données, tables + champs, formulaire, récupération des données....)
Dans ton cas précis ici :
- d'où on part :
une page où est affichée la liste des cours pour pouvoir sélectionner...........- avec quoi :
des données en Base de données, une page pour afficher la liste.- où on va :
sur une autre page : afficher, après sélection dans la liste, le ...........- comment y aller :
transmission d'un paramètre (id_cours_td) ? comment ? comment le récupérer ? .............- de quoi on a besoin :
un formulaire ? une liste déroulante ? des liens ?....... puis récupéré un paramètre, puis.............
En clair, c'est plus complexe que tu sembles le croire, mais ça permet de définir clairement tout ce qu'il faut prendre en compte.
Notamment : les tables en base de données sont-elles correctement conçues par rapport aux besoins ? (exemple de la table relationnelle : nécessaire ou pas ?)
@vinceom92
pas vraiment, il te demande de remplir les ..........On est d'accord jusque là !!!
est un plan de travail VIDEDans ton cas précis ici :
$moi= ( !== ) ? : ;
Petit test simple : au début de adresse.php, tu ajoutesSi la partie de ton code qui affiche les cours est correcte, tu devrais visualiser la valeur de $donnees_cours_tp_eleve['id_cours_tp']
Code php : Sélectionner tout - Visualiser dans une fenêtre à part echo $_REQUEST['id_cours_tp'];
Participez vous aussi !
Message utile
Discussion résolue
je crois qu'il faut deja savoir la relation entre les deux tables user et cours (n<->n ?)
si un utilisateur a plusieurs cours
si un cours est pour plusieurs utilisateurs
ce qui me semble logique ..... mais j'ai un doute ...
alors il faut une table pivot pour faire la relation entre les 2 et donc encore un gros travail de conception avant tout codage.
ce que proposait jreaux62 avec une 3eme table test_relation_cours_use
$moi= ( !== ) ? : ;
J'ai ajouté ce code, il ne m'affiche rien mais c'est logique puisque je n'ai pas choisi un cours sur l'autre page.
Justement, l'autre page affiche lede la requête SQL qui permet de récupérer les Cours/TP d'un élève.
Code : Sélectionner tout - Visualiser dans une fenêtre à part or die
Pour l'instant, il n'y en a pas. J'ai un problème conceptuel.
Je te mets les CREATE TABLE des deux tables :
test_site_utilisateur
test_site_cours_tp
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 CREATE TABLE IF NOT EXISTS `test_site_utilisateur` ( `id_utilisateur` int(11) NOT NULL AUTO_INCREMENT, `nom_etablissement_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `nom_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `prenom_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `date_naissance_utilisateur` date NOT NULL, `civilite_utilisateur` varchar(12) CHARACTER SET utf8 NOT NULL, `sexe_utilisateur` varchar(8) CHARACTER SET utf8 NOT NULL, `acces_utilisateur` int(11) NOT NULL DEFAULT '5', `email_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `pseudo_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `password_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `code_postal_etablissement_utilisateur` varchar(5) CHARACTER SET utf8 NOT NULL, `classe_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `matiereenseignee_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `ville_etablissement_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL, `date_inscription_utilisateur` datetime NOT NULL, `date_derniere_connexion_utilisateur` datetime NOT NULL, `date_creation_classe_utilisateur` datetime NOT NULL, PRIMARY KEY (`id_utilisateur`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE TABLE IF NOT EXISTS `test_site_cours_tp` ( `id_cours_tp` int(11) NOT NULL AUTO_INCREMENT, `date_depot_cours_tp` datetime NOT NULL, `date_cloture_validation_cours_tp` datetime NOT NULL, `titre_cours_tp` varchar(255) CHARACTER SET utf8 NOT NULL, `contenu_cours_tp` longtext CHARACTER SET utf8 NOT NULL, `type_devoir_cours_tp` int(11) NOT NULL DEFAULT '1', `matiere_cours_tp` varchar(255) CHARACTER SET utf8 NOT NULL, `nom_auteur_cours_tp` varchar(255) CHARACTER SET utf8 NOT NULL, `classe_cours_tp` varchar(255) CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id_cours_tp`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
Tout à fait !!!
Est-ce que déjà tu vois des erreurs dans les?
Code : Sélectionner tout - Visualiser dans une fenêtre à part CREATE TABLE
Pour la troisième table, je vais la faire.
PS : J'ai fait la troisième table. A mon avis, il faut changer la requête SQL qui permet de récupérer les cours (pour éviter qu'elle affiche leet affiche les données), la voici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part or dieAvec cette requête SQL, je voudrais lister les cours de l'élève connecté.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT DISTINCT(t1.id_cours_tp), t3.titre_cours_tp, t3.matiere_cours_tp, t3.classe_cours_tp, t3.date_depot_cours_tp, contenu_cours_tp, t3.nom_auteur_cours_tp, type_devoir_cours_tp, t3.date_cloture_validation_cours_tp FROM test_site_utilisateur t1 LEFT JOIN test_site_cours_tp t3 ON t1.id_cours_tp = t3.id_cours_tp WHERE t1.pseudo_utilisateur='$pseudo_utilisateur' AND t3.type_devoir_cours_tp='1' ORDER BY date_cloture_validation_cours_tp
Bonsoir,
Ce matin, j'ai créé la table "relationnelle". Mais pour l'instant elle est vide donc même si j'adapte la requête SQL (celle pour sélectionner les cours), certes le message d'erreur ne s'affiche plus mais une page blanche s'affiche. Donc, qu'est-ce qu'il faut que je fasse pour que tout marche ?
On est d'accord maintenant, il y a trois tables :
-test_site_utilisateur (là où il y a tous les utilisateurs)
-test_site_cours_tp (là où il y a tous les cours)
- test_site_relation_cours_tp_utilisateur (table qui permet de faire la liaison entre test_site_utilisateur et test_site_cours_tp)
Est-ce que dans la requête d'insertion des cours que je fasse en sorte qu'à chaque fois qu'on poste un cours, ça insère l'identifiant du cours dans la table relationnelle (test_site_relation_cours_tp_utilisateur) ?
Est-ce qu'il faut que je fasse des ALTER TABLE ?
On crée toujours un cours indépendant "des utilisateurs".
mais une fois le cours créé
dans le page cours il faut pouvoir ajouter des utilisateur (nouveau formulaire) et la !
a chaque ajout d'utilisateur il faut créer simplement une ligne dans la table relation_cours_tp_utilisateur avec l'id du tp et l'id du cours.
Mais...
pour tout simplifier il faut aussi dans cette page pouvoir supprimer un utilisateur = a supprimer une ligne dans relation_cours_tp_utilisateur mais pas supprimer l'utilisateur dans table utilisateur
AVANT il faut quand meme savoir qui a acces a cette administration car si plusieurs types d'administrateurs alors c'est plusieurs pages
$moi= ( !== ) ? : ;
Quand on insère un cours, on choisi la matière et la classe qui sont issues de la base de données...
Ce sont que les professeurs qui ont accès à cette partie.
Je vais m'en sortir de ce problème...
Ce n'est pas mais a chaque ajout de cours/tp il faut créer simplement une ligne dans la table relation_cours_tp_utilisateur avec l'id de l'auteur et l'id du cours/tp.
Bonjour,
Pour vous tenir au courant, j'essaye de faire ces trois requêtes SQL sur la page d'insertion de cours :
mais ça ne fonctionne (pour l'instant) pas.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // Trois requêtes SQL qui permettent de gérer l'affichage du cours - DEBUT // Sélectionnement de l'utilisateur connecté dans la base de données $query_selection_identifiant_cours_tp=mysql_query("SELECT id_cours_tp FROM test_site_cours_tp WHERE titre_cours_tp='$titre_cours_tp'") or die('Erreur lors de la sélection du Cours\TP)'.mysql_error()); // Envoie une requête à un serveur MySQL // Sélectionnement de l'utilisateur connecté dans la base de données $query_selection_utilisateur_connecte=mysql_query("SELECT id_utilisateur FROM test_site_utilisateur WHERE pseudo_utilisateur='$pseudo_utilisateur'") or die('Erreur lors de la sélection du pseudo de l\'utilisateur connecté)'.mysql_error()); // Envoie une requête à un serveur MySQL // Insertion de la relation Cours-TP/Utilisateur dans la base de données $query_insertion_relation_cours_tp_utilisateur=mysql_query("INSERT INTO test_site_relation_cours_tp_utilisateur (id_cours_tp,id_utilisateur) VALUES ('$query_selection_identifiant_cours_tp','$query_selection_utilisateur_connecte')") or die('Erreur lors de l\'insertion de la relation Cours-TP/Utilisateur (pour assurer l\'affichage)'.mysql_error()); // Envoie une requête à un serveur MySQL // Trois requêtes SQL qui permettent de gérer l'affichage du cours - FIN
Je vous explique ce que je voudrais faire à travers ces trois requêtes SQL : J'aimerais insérer les identifiants du Cours/TP et de l'utilisateur issus des deux autres tables : test_site_cours_tp et test_site_utilisateur, c'est ça qui ne marche pas (pour l'instant).
Pouvez-vous me dire si je suis dans la bonne voie et si oui comment insérer le résultat d'und'une autre table SVP ?
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part SELECT
PS : J'ai aussi essayé cette requête SQL :mais alors elle ne provoque pas d'erreurs mais n'insère rien dans la table relationnelle.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part $query_insertion_relation_cours_tp_utilisateur=mysql_query("INSERT INTO test_site_relation_cours_tp_utilisateur (id_cours_tp,id_utilisateur) SELECT id_utilisateur,id_cours_tp FROM test_site_utilisateur,test_site_cours_tp WHERE pseudo_utilisateur='$pseudo_utilisateur' AND titre_cours_tp='$titre_cours_tp'") or die('Erreur lors de l\'insertion de la relation Cours-TP/Utilisateur (pour assurer l\'affichage)'.mysql_error()); // Envoie une requête à un serveur MySQL
Finalement, cette requête SQL fonctionne en la mettant après les autres, ça avance !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager