Comment créer un lien avec des éléments d'une base de données?

Comment créer un lien avec des éléments d'une base de données? - PHP - Programmation

Marsh Posté le 05-02-2008 à 23:55:50    

Salut à tous,
 
Voici l'état actuel des choses:

Code :
  1. <? 
  2. include("connexion.php" ); 
  3. echo "<table border=\"1\" align=\"center\">\n";
  4. echo "<tr bgcolor=\"#F5CA89\">";
  5. echo "<td width=\"160\" align=\"left\" valign=\"middle\">";
  6. echo "Joueur:";
  7. echo "</td>";
  8. echo "<td width=\"80\" align=\"left\" valign=\"middle\">";
  9. echo "Points :"; 
  10. echo "</td>";
  11. echo "<td width=\"60\" align=\"left\" valign=\"middle\">";
  12. echo "Lieu :"."<br />";   echo "</td>";
  13. echo "</tr>";
  14. $query = "SELECT nom, points, lieu FROM production where idjoueur=id_joueur ORDER BY BINARY nom";
  15. $result = mysql_query($query) or die("Query failed" );
  16. while ($line = mysql_fetch_assoc($result)) {
  17.     echo "\t<tr>\n";
  18.     foreach ($line as $col_value) {
  19.         echo "\t\t<td>$col_value</td>\n";
  20.     }
  21.     echo "\t</tr>\n";
  22. }
  23. echo "</table>\n";
  24. ?>


Ceci me permet d'afficher les résultats de tous mes joueurs.
Maintenant, une fois que j'ai tous ces résultats qui s'affichent, je voudrais afficher le résultat d'un seul joueur en cliquant sur le nom de ce joueur (pour lui envoyer ses résultats personnels par exemple)
Mais comment puis-je intégrer un lien sur le nom de chaque joueur?
j'espère être clair...
Merci d'aider une nouvelle fois le petit débutant que je suis;)

Reply

Marsh Posté le 05-02-2008 à 23:55:50   

Reply

Marsh Posté le 06-02-2008 à 09:06:17    

tu ajoutes simplement un lien avec une variable GET (dans l'url), le plus simple est d'utiliser id_joueur

Reply

Marsh Posté le 06-02-2008 à 09:46:12    

Juste pour préciser ce que dit soju :

soju a écrit :

tu ajoutes simplement un lien avec une variable GET (dans l'url), le plus simple est d'utiliser id_joueur


Tu modifies ton premier script en faisant un lien hypertexte sur le nom du joueur avec l'id_joueur dans l'URL puis tu crées un deuxième script (ou tu modifies celui existant) pour lequel tu affiches le détail par joueur à partir de l'id_joueur que tu auras passé via l'URL avec un GET
 


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 06-02-2008 à 23:55:55    

qu'appelles-tu mon 'premier script'? je suis perdu... je ne vois pas non plus trop à quoi doit ressembler mon lien. tu peux me donner un exemple, merci...

Reply

Marsh Posté le 07-02-2008 à 00:31:05    

Genre les pages http://monsite.com/index.php?monnumerodepage=54
 
Il est temps d'aller à l'école : http://www.siteduzero.com/tuto-3-7 [...] #ss_part_4
 
 
Dans ton cas ça ressemblerais à :  
 
foreach ($line as $col_value) {
  echo "\t\t<td>$col_value</td>\n";
}
 
à remplacer par :
 

Code :
  1. foreach ($line as $col_name => $col_value) {
  2.   if ($col_name == 'nom')
  3.     echo "\t\t<td><a href=\"?nom=$col_value\">$col_value</a></td>\n";
  4.   else
  5.     echo "\t\t<td>$col_value</td>\n";
  6. }

Message cité 1 fois
Message édité par czh le 07-02-2008 à 00:35:42
Reply

Marsh Posté le 07-02-2008 à 09:12:58    

L'idée, c'est de faire deux scripts (un pour afficher la liste des joueurs, l'autre pour afficher le détail du joueur) sur deux pages différentes (ca peut se faire sur la même page, mais je pense pas que ca apporte grand chose)
 
Première page : liste_joueur.php

  • Tu affiches la liste des joueurs
  • Dans la liste, tu mets un lien hypertexte vers la deuxième page : detail_joueur.php?id=$id_joueur


Deuxième page : detail_joueur.php

  • Tu récupères la valeur de ta variable id passée dans l'URL
  • Tu affiches ce que tu as besoins pour le joueur sélectionné


C'est plus clair pour toi maintenant ?


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 08-02-2008 à 22:03:31    

czh a écrit :


Dans ton cas ça ressemblerais à :  
 
foreach ($line as $col_value) {
  echo "\t\t<td>$col_value</td>\n";
}
 
à remplacer par :
 

Code :
  1. foreach ($line as $col_name => $col_value) {
  2.   if ($col_name == 'nom')
  3.     echo "\t\t<td><a href=\"?nom=$col_value\">$col_value</a></td>\n";
  4.   else
  5.     echo "\t\t<td>$col_value</td>\n";
  6. }



OK, jusque là j'ai bien un lien qui apparait sur chaque nom, mais quand je clique dessus, rien ne change... c'est la même page qui revient, avec les noms de TOUS les joueurs. Mais comment faire apparaitre le contenu du seul joueur que je sélectionne?
Désolé de mettre du temps à comprendre, mais c'est comme ca que j'apprends le mieux... Merci encore

Reply

Marsh Posté le 09-02-2008 à 10:45:28    

Il faut que tu exploite la variable $_GET['id_joueur'] et que tu t'en serves pour faire une requete plus fine (sur un seul joueur) et au lieu d'afficher un tableau tu fais un profil du joueur avec par exemple des <div> et des <span>.
 
Pense à vérifier la variable $_GET avant de t'en servir aussi, c'est un reflexe à adopter.
 
Le lien que tu semble avoir mis commence par '?' cela signifie que tu reste sur la même page, si tu veux aller sur une autre précede le du nom de la page en question.
 
ex: detail_joueur.php?id_joueur=10

Reply

Marsh Posté le 12-02-2008 à 18:35:13    

Voilà où j'en suis:

Code :
  1. while ($line = mysql_fetch_assoc($result)) {
  2.     echo "\t<tr>\n";
  3. foreach ($line as $col_name => $col_value) {
  4.   if ($col_name == 'nom')
  5.     echo "\t\t<td><a href=\"detail_joueur.php?id=$id_joueur\">$col_value</a></td>\n";
  6.   else
  7.     echo "\t\t<td>$col_value</td>\n";
  8. }
  9.     echo "\t</tr>\n";
  10. }
  11. echo "</table>\n";


Mais comment récuperer les GET? Je dois juste inclure ceci ? :

Code :
  1. $idcollaborateur=$_GET['idcollaborateur'];

Si oui, je dois mettre ca dans ma première page ? mais je ne vois pas trop ce que je dois mettre dans ma page detail_joueur.php...
J'imagine que je peux remettre la structure de mon tableau mais en-dessous je dois mettre quoi?
Merci................

Reply

Marsh Posté le 13-02-2008 à 13:44:21    

Plus personne pour m'aider? :(

Reply

Marsh Posté le 13-02-2008 à 13:44:21   

Reply

Marsh Posté le 13-02-2008 à 14:15:49    

Si ton lien est : detail_joueur.php?id=$id_joueur
=> Tu récupères ton résultat sur la page detail_joueur.php via la commande $_GET['id'] (vu que tu passes ton GET via la variable id)
 
Et dans ta page detail_joueur.php, tu affiches toutes les infos détaillés du joueur....

Citation :

je voudrais afficher le résultat d'un seul joueur en cliquant sur le nom de ce joueur (pour lui envoyer ses résultats personnels par exemple)


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 13-02-2008 à 14:17:42    

si tu fais:

bingojm a écrit :

Code :
  1. echo "\t\t<td><a href=\"detail_joueur.php?id=$id_joueur\">$col_value</a></td>\n";



c'est pas:

bingojm a écrit :

Code :
  1. $idcollaborateur=$_GET['idcollaborateur'];



 
mais:

Code :
  1. $idcollaborateur=$_GET['id'] // il faut relire la variable avec le même nom que tu l'as créé;


 
et ensuite, une requete dans ta base qui récup les infos WHERE idcollaborateur = $idcollaborateur
et voilou ;)
 
PS: les variables GET même si elle sont des nombres, arrivent sous forme de string, donc un pti intval($_GET['id']) ça mange pas de pain, et gérer aussi, que si la requête ne renvoie rien (genre le visiteur qui irait directement sur l'URL de la page d'un collaborateur n'existant pas/plus ou autre bizarrerie du genre...) ben tu affiche que le collaborateur en question n'existe pas.
Pour savoir facilement si la requête a retourné quelque chose:
[code]if mysql_num_rows($res) > 0 //si tu es avec mysql biensur, sinon l'équivalent qui va bien[/cpp]


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 13-02-2008 à 15:55:12    

le intval permet aussi de securiser un minimum pour pas avoir d'injections sql

Reply

Marsh Posté le 14-02-2008 à 16:00:29    

Salut,
 
Tout d'abord, merci pour ces conseils. Je comprends mieux...
Pour la première page, je laisse ainsi. (si j'ai bien compris)
Et pour la deuxième detail_joueur.php, j'ai mis ceci, mais ca n'est pas complet vu que jusque là ca ne donne rien.

Code :
  1. <?
  2. include("connexion.php" ); 
  3. $resultat=$_GET['id'];
  4. echo $resultat;
  5. ?>


Que dois-je mettre d'autre sur cette page?
Où dois-je mettre WHERE resultat= $resutat (cette syntaxe est bien exacte? je ne la comprends pas bien...)
Je pensais à un truc comme ca mais ca ne va pas:

Code :
  1. $resultat = mysql_query("SELECT * FROM collaborateur, production WHERE id_collaborateur='".$_GET['id']."' " )or die(mysql_error());
  2. echo $resultat;


Je suis sûr qu'il manque qqch pour cette deuxième page mais quoi? éclairez-moi svp. merci!


Message édité par bingojm le 14-02-2008 à 16:24:22
Reply

Marsh Posté le 14-02-2008 à 16:21:05    

On va repartir de ton besoin :

bingojm a écrit :

Salut à tous,
Voici l'état actuel des choses:

Code :
  1. [...]


Ceci me permet d'afficher les résultats de tous mes joueurs.


Tu as ta première page qui affiche les résultats "globaux" pour tous les joueurs (page liste_joueur.php)

bingojm a écrit :


Maintenant, une fois que j'ai tous ces résultats qui s'affichent, je voudrais afficher le résultat d'un seul joueur en cliquant sur le nom de ce joueur (pour lui envoyer ses résultats personnels par exemple)


Là, tu veux une autre page pour visualiser le détail d'où les conseils que l'on te donne (créer une deuxième page : detail_joueur.php, passer la variable en GET, ....)
Aprés nous, on ne sait pas ce que tu veux y mettre, à toi de décider...
 
Pour répondre à ta question, si tu lances la page : http://monsite/detail_joueur.php?id=4
Alors ton code doit te renvoyer "4".


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 14-02-2008 à 16:32:46    

oui oui c'est bien ca. j'ai créé cette deuxième page detail_joueur.php.
Imaginons que je veux y afficher les mêmes résultats que sur la première page mais rien que ceux correspondants au joueur que j'ai sélectionné: nom, points, lieu.
Mais je ne vois pas comment je dois faire concrètement pour récupérer ces variables GET...
Comme ceci je me rapproche?

Code :
  1. $resultat = mysql_query("SELECT * FROM collaborateur, production WHERE id_collaborateur='".$_GET['id']."' " )or die(mysql_error());
  2. echo $resultat;


J'avais édité le message précédent le temps que tu répondes;) merci...
Aussi, lorsque je suis sur la première page et que je mets la souris sur un joueur, le lien est: http://monsite/fichiers/detail_joueur.php?id=
Est ce bien correct? je ne dois rien voir après le id=?

Message cité 1 fois
Message édité par bingojm le 14-02-2008 à 16:35:41
Reply

Marsh Posté le 14-02-2008 à 16:42:58    

bingojm a écrit :

Aussi, lorsque je suis sur la première page et que je mets la souris sur un joueur, le lien est: http://monsite/fichiers/detail_joueur.php?id=
Est ce bien correct? je ne dois rien voir après le id=?


Le premier pb est là.... Tu dois voir qqch après "id=", tu dois voir l'id de ton joueur (celui qui est dans ta table). Il faut que tu t'arranges pour le récupèrer dans ta requete SQL (sur la première page) afin de l'afficher dans ton lien hypertexte...


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 14-02-2008 à 17:01:28    

ok... je n'arrive pas à récupérer la bonne info...
J'ai donc:

Code :
  1. <?
  2. include("connexion.php" );
  3. echo "<table border=\"1\" align=\"center\">\n";
  4. echo "<tr bgcolor=\"#F5CA89\">";
  5. echo "<td width=\"160\" align=\"left\" valign=\"middle\">";
  6. echo "Joueur:";
  7. echo "</td>";
  8. echo "<td width=\"80\" align=\"left\" valign=\"middle\">";
  9. echo "Points :";
  10. echo "</td>";
  11. echo "<td width=\"60\" align=\"left\" valign=\"middle\">";
  12. echo "Lieu :"."<br />";   echo "</td>";
  13. echo "</tr>";
  14. $query = "SELECT nom, points, lieu FROM production where idjoueur=id_joueur ORDER BY BINARY nom";
  15. $result = mysql_query($query) or die("Query failed" );
  16. while ($line = mysql_fetch_assoc($result)) {
  17.     echo "\t<tr>\n";
  18. foreach ($line as $col_name => $col_value) {
  19.   if ($col_name == 'nom')
  20.     echo "\t\t<td><a href=\"detail_joueur.php?id=$id_joueur\">$col_value</a></td>\n";
  21.   else
  22.     echo "\t\t<td>$col_value</td>\n";
  23. }
  24.     echo "\t</tr>\n";
  25. }
  26. echo "</table>\n";
  27. ?>[cpp]
  28. Mais pq est-ce que $id_joueur ne récupère pas la valeur?

Reply

Marsh Posté le 14-02-2008 à 17:18:48    

Tout simplement parce que ce n'est pas comme ca que l'on récupère une valeur d'une requete SQL
Pour récupérer la valeur, il faut rajouter l'id dans ta liste de champs "SELECT nom, points, lieu, idjoueur FROM production where idjoueur=id_joueur" (au passage la syntaxe SQL est [:vomi] , il faut mieux utiliser un inner join).
Par contre cela va te poser un problème dans ton bout de code (que au passage je trouve complètement idoit pour afficher trois colonnes):

Code :
  1. foreach ($line as $col_name => $col_value) {
  2. if ($col_name == 'nom')
  3. echo "\t\t<td><a href=\"detail_joueur.php?id=$id_joueur\">$col_value</a></td>\n";
  4. else
  5. echo "\t\t<td>$col_value</td>\n";
  6. }


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 14-02-2008 à 18:20:07    

en réalité, j'ai plus de colonnes que ca... j'ai simplifié ici.
mais j'ai bien rajouté l'id dans la liste de champs mais je n'arrive tjs pas à voir le lien complet!!! pourquoi??? j'ai tjs "detail_joueur.php?id=" puis plus rien....

Reply

Marsh Posté le 14-02-2008 à 18:22:04    

essaye qqch comme $line['idjoueur']


Message édité par babasss le 14-02-2008 à 18:22:11

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 14-02-2008 à 18:31:40    

non plus... voilà ce que j'ai:
syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING on line 63

Reply

Marsh Posté le 14-02-2008 à 19:05:48    

Et à la ligne 63 de ton code, il y à quoi ?

 

En tout cas, si tu écris :

Code :
  1. $query = "SELECT idjoueur FROM production where idjoueur=id_joueur ORDER BY BINARY nom";
  2. $result = mysql_query($query) or die("Query failed" );
  3. while ($line = mysql_fetch_assoc($result))
  4. {
  5. echo $line['idjoueur'];
  6. }


Il va te renvoyer tous les idjoueur....


Message édité par babasss le 14-02-2008 à 19:08:10

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 14-02-2008 à 19:19:31    

Non, voilà ce que j'ai:

Code :
  1. $query = "SELECT nom, points, lieu, id_joueur FROM joueurs, production where idjoueur=id_joueur ORDER BY BINARY nom";
  2. $result = mysql_query($query) or die("Query failed" );
  3. while ($line = mysql_fetch_assoc($result)) {
  4.     echo "\t<tr>\n";
  5. foreach ($line as $col_name => $col_value) {
  6.   if ($col_name == 'nom')
  7.     echo "\t\t<td><a href=\"detail_joueur.php?id=$line['id_joueur]\">$col_value</a></td>\n";
  8.   else
  9.     echo "\t\t<td>$col_value</td>\n";
  10. }
  11.     echo "\t</tr>\n";
  12. }


Est-ce censé être correct?

Reply

Marsh Posté le 14-02-2008 à 19:36:12    

Non. Ton code est truffé d'erreur de syntaxe :

  • ligne 7 à 10 : la structure classique d'un if est : if (condition) { condition_then } else {condition_else}
  • ligne 8 : il faut écrire $line['id_joueur'] et non $line['id_joueur] (fermeture de la quote manquante)
  • ligne 8 : quand tu lis une variable dans un echo, le plus propre est d'arrêter ton echo et de le reprendre après : echo "Maman a dit ".$variable_bonjour." et elle est partie...";
  • ligne 8 : perso je déteste les \" et je les évite le plus possible => je préfère écrire : echo '\t\t<td><a href="detail_joueur.php?id='.$line['id_joueur'].'">$col_value</a></td>\n';


Code :
  1. $query = "SELECT nom, points, lieu, id_joueur FROM joueurs, production where idjoueur=id_joueur ORDER BY BINARY nom";
  2. $result = mysql_query($query) or die("Query failed" );
  3. while ($line = mysql_fetch_assoc($result)) {
  4.     echo "\t<tr>\n";
  5. foreach ($line as $col_name => $col_value) {
  6.   if ($col_name == 'nom')
  7.     echo "\t\t<td><a href=\"detail_joueur.php?id=$line['id_joueur]\">$col_value</a></td>\n";
  8.   else
  9.     echo "\t\t<td>$col_value</td>\n";
  10. }
  11.     echo "\t</tr>\n";
  12. }


 
Ton code devient alors :

Code :
  1. $query = "SELECT nom, points, lieu, id_joueur FROM joueurs, production where idjoueur=id_joueur ORDER BY BINARY nom";
  2. $result = mysql_query($query) or die("Query failed" );
  3. while ($line = mysql_fetch_assoc($result)) {
  4.   echo "\t<tr>\n";
  5.   foreach ($line as $col_name => $col_value) {
  6.   if ($col_name == 'nom')
  7.     { echo '\t\t<td><a href="detail_joueur.php?id='.$line['id_joueur'].'">'.$col_value.'</a></td>\n'; }
  8.     else
  9.     { echo '\t\t<td>'.$col_value.'</td>\n'; }
  10.   }
  11.   echo "\t</tr>\n";
  12. }


Message édité par babasss le 14-02-2008 à 19:42:25

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 14-02-2008 à 20:40:40    

Super! j'ai fait une petite modif et ca marche.!!
Maintenant il m'envoie bien la valeur correspondante.
Revenons au problème de la 2è page si tu veux bien:
voilà ce que j'ai mis pour voir si cela fonctionne mais ce n'est pas le cas malheureusement:

Code :
  1. $query = mysql_query("SELECT nom, points, lieu, id_joueur FROM joueurs, production WHERE id_joueur='".$_GET['id']."' " )or die(mysql_error());
  2. $result = mysql_query($query) or die("Query failed" );
  3. while ($line = mysql_fetch_assoc($result)) {
  4.     echo "\t<tr>\n";
  5.     foreach ($line as $col_value) {
  6.         echo "\t\t<td>$col_value</td>\n";
  7.     }
  8.     echo "\t</tr>\n";
  9. }
  10. echo "</table>\n";


le message d'erreur est le même que tout à l'heure.
Que faire?

Message cité 1 fois
Message édité par bingojm le 14-02-2008 à 21:18:30
Reply

Marsh Posté le 14-02-2008 à 21:45:04    

bingojm a écrit :

Super! j'ai fait une petite modif et ca marche.!!

Code :
  1. $query = mysql_query("SELECT nom, points, lieu, id_joueur FROM joueurs, production WHERE id_joueur='".$_GET['id']."' " )or die(mysql_error());
  2. $result = mysql_query($query) or die("Query failed" );
  3. [...]




Y'a un mysql_query en trop...
 
Nota : un bon moyen pour débuguer tout seul ton code est de tester d'où vient l'erreur :

  • tu testes le sql directement dans phpmyadmin en prenant le code qui ser tà ta requete
  • si c'est pas le sql, tu cherches ligne par ligne en désactivant les lignes uen par une


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 14-02-2008 à 22:26:21    

Super, j'ai bien de l'affichage maintentant, mais...
J'ai bien le même nom du joueur, sauf que pour le reste des données, elles sont toutes affichées (les données de tous les joueurs comme si elles correspondaient toutes au même joueur, mais ce n'est pas le cas).
Je dois certainement préciser davantage mon WHERE non? mais je ne vois pas comment...


Message édité par bingojm le 14-02-2008 à 22:29:51
Reply

Marsh Posté le 14-02-2008 à 22:29:10    

il manquerait pas un idjoueur=id_joueur de manière à avoir  

Code :
  1. WHERE idjoueur=id_joueur AND id_joueur= $_GET['id']


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed