Afficher valeurs des champs d' un ID en particulier

Fid3L

Revolutionary
Salut tout le monde, moi je suis en train d apprendre le php pour transformer petit à petit mon site en quelque chose de plus dynamique. J' ai lu quelques tuto et un livre php jsuis donc assez débutant...

Mon problème :
Je boss sur un script php qui reprend les données et stats des joueurs à partir d' une base de données. J' ai reussi a faire apparaitre les champs que je voulais d une base de données en utilisant la fonction fetch (Ca me met toutes les infos ID par ID). C'est très beau et ca marche niquel mais moi je voudrais afficher que les infos des champs de l' ID 1 par exemple puis de l' ID 2 sur une autre page. Je ne veux pas que tout s affiche a la suite l un de l autre mais les séparer!!!!
J' ai essayer plusieurs manip mais sans succès, je sais que la réponse est toute bête mais j' ai du mal...

ps : j ai du relié 2tables entre elle car je reprends les infos de 2tables différentes. 1pour les coordonnées des joueurs et 1pour leurs statistiques.

Quelqu' un pourait il me donner une astuce pour garder un code général et que juste en modifiant l id ou le nom avoir juste les données d'un joueur précis. (Je crois qu il y a un systeme avec les liens (colombus.php?id=1) ou qqchose comme ça mais je ne suis pas arrivé a faire fonctionner ça.

voici le lien de ma page ( http://colombus80.heberge.co.cc/effectifa.php )

voici le code de ma page :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="description" content="FC Colombus 80 - Futsal Bruxelles Club" />
<meta name="keywords" content="colombus, fc, futsal, foot, salle, lffs, mini, foot, statistiques" />
<meta name="Subject" content="Club Futsal" />
<title>FC Colombus - Bruxelles Futsal Club</title>
</head>
<body>
<?php
mysql_connect("", "", "");
mysql_query("SET NAMES UTF8");
mysql_select_db("");

$reponse = mysql_query("SELECT * FROM colombus_a, stats WHERE colombus_a.ID_stats = stats.ID ORDER BY numero");

while ($donnees = mysql_fetch_array ($reponse) )
{
?>

<br /:colere:br />

<table width="81%" border="0">
<tr bgcolor="#CCCCCC">
<td colspan="4":colere:h2:colere:?php echo $donnees['nom']; ?:colere:/h2:colere:/td>
</tr>
<tr>
<td width="6%":colere:img src="<?php echo $donnees['photo']; ?>" /:colere:/td>
<td width="1%">&nbsp;</td>
<td width="54%":colere:table width="294">
<tbody>
<tr>
<th align="left">Nom</th>
<td align="left":colere:b:colere:?php echo $donnees['nom']; ?:colere:/b:colere:/td>
</tr>
<tr>
<th width="175" align="left">N°</th>
<td width="107" align="left":colere:?php echo $donnees['numero']; ?:colere:/td>
</tr>
<tr>
<th align="left">Poste</th>
<td align="left":colere:?php echo $donnees['poste']; ?:colere:/td>
</tr>
<tr>
<th align="left">Fonction</th>
<td align="left":colere:?php echo $donnees['fonction']; ?:colere:/td>
</tr>
<tr>
<th align="left">Année d' arrivée</th>
<td align="left":colere:?php echo $donnees['arrive']; ?:colere:/td>
</tr>
</tbody>
</table:colere:/td>
<td width="39%" align="left":colere:img src="images/logonew2.jpg" width="192" height="144" /:colere:/td>
</tr>
<tr>
<td colspan="3":colere:h2>Ses statistiques :</h2:colere:/td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="3":colere:br />
<h3>Ligue L.F.F.S 2010-2011</h3>
<br />
<table cellspacing="0" cellpadding="0">
<tr>
<th width="218" align="left">Matchs</th>
<td width="152" align="left":colere:?php echo $donnees['match_joue']; ?:colere:/td>
</tr>
<tr>
<th align="left">Buts</th>
<td align="left":colere:?php echo $donnees['but']; ?:colere:/td>
</tr>
<tr>
<th align="left">Moyenne but/match</th>
<td align="left":colere:?php $moyenne = $donnees['but'] / $donnees['match_joue']; echo round ($moyenne, 2) ; ?:colere:/td>
</tr>
<tr>
<th align="left"> Passes désicives</th>
<td align="left":colere:?php echo $donnees['passes']; ?:colere:/td>
</tr>
<tr>
<th align="left">Cartons <img src="images/carton_jaune_22.gif" width="8" height="10" /:colere:/th>
<td align="left":colere:?php echo $donnees['c_jaune']; ?:colere:/td>
</tr>
<tr>
<th align="left">Cartons <img src="images/carton_rouge_22.gif" alt="" width="8" height="10" /:colere:/th>
<td align="left":colere:?php echo $donnees['c_rouge']; ?:colere:/td>
</tr>
</table:colere:/td>

<td:colere:br /:colere:h3>Coupe L.F.F.S 2010-2011</h3>

<br />
<table cellspacing="0" cellpadding="0">
<tr>
<th width="218" align="left">Matchs</th>
<td width="152":colere:?php echo $donnees['match_coupe']; ?:colere:/td>
</tr>
<tr>
<th align="left">Buts</th>
<td:colere:?php echo $donnees['but_coupe']; ?:colere:/td>
</tr>
<tr>
<th align="left">Moyenne but/match</th>
<td:colere:?php $moyenne = $donnees['but_coupe'] / $donnees['match_coupe']; echo round ($moyenne, 2) ; ?:colere:/td>
</tr>
<tr>
<th align="left"> Passes désicives </th>
<td:colere:?php echo $donnees['pass_coupe']; ?:colere:/td>
</tr>
<tr>
<th align="left">Cartons <img src="images/carton_jaune_22.gif" width="8" height="10" /:colere:/th>
<td:colere:?php echo $donnees['cartonj_coupe']; ?:colere:/td>
</tr>
<tr>
<th align="left">Cartons <img src="images/carton_rouge_22.gif" width="8" height="10" /:colere:/th>
<td:colere:?php echo $donnees['cartonr_coupe']; ?:colere:/td>
</tr>
</table:colere:/td>
</tr>
<tr bgcolor="#FFFFFF">
<td height="21" colspan="4">&nbsp;</td>
</tr>
</table>
<p>&nbsp;</p>
<?php
}

mysql_close();
?>
</body>
</html>


Merci d'avance mes amis gamerziens :p
 

Wallabix

Touriste
Il ne faut pas faire de boucle while pour sélectionner une seule entrée dans ta base de données. Tu peux sélectionner une entrée en utilisant un paramètre transmit via l'URL.

Imaginons ton url est de ce type: index.php?id=7

La partie intéressante de l'url est: id=7

La première chose a faire, c'est de vérifier si cette partie de l'url est présente, car si elle ne l'est pas, ça ne sert à rien de continuer:

PHP:
if(isset($_GET['id']))
{
//On vérifie si l'ID contient bien quelque chose
}
else
{
//On affiche un message d'erreur
exit('Aucun paramètres transmit');
La seconde chose à faire, c'est de blinder le paramètre transmit avant de l'utiliser dans une requête sql. En effet, il est simple pour l'utilisateur de modifier la donnée qui est transmise dans l'url et il pourrait récupérer autre chose que les données que tu veux bien afficher. Pour ce faire, on va simplement faire en sorte que ce qui est transmit par l'url soit uniquement une valeur numérique (Le type de l'identifiant). Ainsi, même si l'utilisateur modifie l'url, tout ce qu'il indiquera deviendra numérique.

PHP:
$ID = $_GET['id']; //On récupère l'ID
if (is_numeric($ID))
{
//Si la valeur est numérique, alors on fait notre requête
//On ne va sélectionner uniquement l'entrée où l'id qui représente cette entrée dans la table vaut l'ID qui est envoyée par URL
$reponse = mysql_query(SELECT * FROM colombus_a, stats WHERE colombus_a.ID_stats = stats.ID WHERE Id = \''.$ID.'\'');
$donnees = mysql_fetch_array($reponse);
//Une fois la requête effectuée, on peut afficher les données de la base:
echo $donnees['nom'];
echo $donnees['numero'];
//Etc.
}
else
{
//Si c'est pas une valeur numérique, on arrête le script et on affiche un message d'erreur
exit('Erreur, la valeur n\'est pas une valeur numérique');
}
Au final, le code ressemble à ceci:

PHP:
if(isset($_GET['id']))
{
//On vérifie si l'ID contient bien quelque chose. Si c'est le cas, on continue le script:
$ID = $_GET['id']; //On récupère l'ID
if (is_numeric($ID))
{
//Si la valeur est numérique, alors on fait notre requête
//On ne va sélectionner uniquement l'entrée où l'id qui représente cette entrée dans la table vaut l'ID qui est envoyée par URL
$reponse = mysql_query(SELECT * FROM colombus_a, stats WHERE colombus_a.ID_stats = stats.ID WHERE Id = \''.$ID.'\'');
$donnees = mysql_fetch_array($reponse);
//Une fois la requête effectuée, on peut afficher les données de la base:
echo $donnees['nom'];
echo $donnees['numero'];
//Etc.
}
else
{
//Si c'est pas une valeur numérique, on arrête le script et on affiche un message d'erreur
exit('Erreur, la valeur n\'est pas une valeur numérique');
}
}
else
{
//On affiche un message d'erreur
exit('Aucun paramètres transmit');
J'espère avoir pu t'aider. N'hésite pas à demander plus d'explications.
 
1er
OP
Fid3L

Fid3L

Revolutionary
ok merci beaucoup mec jvais essayer.

Par contre ton code ne s affiche pas bien, on voit pas la fin des lignes... :/ Tu serais modif stp ? merci
 

Xou

I ♥ rien
"is_numeric" fait un isset par défaut.

ensuite, le mieux est de vérifier si $ID est plus grand que 0, car dans le cas ccontraire, tu as peu de chances de récupérer un résultat.
 

Wallabix

Touriste
Après avoir tenu compte des remarques de Xou, voici ce que ça donne:

$ID = $_GET['id']; //On récupère l'ID
if (is_numeric($ID) AND $ID > 0)
{
//Si la valeur est numérique, alors on fait notre requête
//On ne va sélectionner uniquement l'entrée où l'id qui représente cette entrée dans la table vaut l'ID qui est envoyée par URL
$reponse = mysql_query(SELECT * FROM colombus_a, stats WHERE colombus_a.ID_stats = stats.ID WHERE Id = ''.$ID.'\'');
$donnees = mysql_fetch_array($reponse);
//Une fois la requête effectuée, on peut afficher les données de la base:
echo $donnees['nom'];
echo $donnees['numero'];
//Etc.
}
else
{
//Si c'est pas une valeur numérique, on arrête le script et on affiche un message d'erreur
exit('Erreur, la valeur n\'est pas une valeur numérique');
}

Je fais d'une pierre deux coups, je suis paresseux :)-D ), pour répondre à ton MP, les fonctions mysql connect et mysql select db doivent être placée avant le code que je t'ai donnée. Mais tu peux les mettre dans les même balises PHP que le code, mais avant le début, c'est mieux ;)
 
1er
OP
Fid3L

Fid3L

Revolutionary
Après avoir tenu compte des remarques de Xou, voici ce que ça donne:

$ID = $_GET['id']; //On récupère l'ID
if (is_numeric($ID) AND $ID > 0)
{
//Si la valeur est numérique, alors on fait notre requête
//On ne va sélectionner uniquement l'entrée où l'id qui représente cette entrée dans la table vaut l'ID qui est envoyée par URL
$reponse = mysql_query(SELECT * FROM colombus_a, stats WHERE colombus_a.ID_stats = stats.ID WHERE Id = ''.$ID.'\'');
$donnees = mysql_fetch_array($reponse);
//Une fois la requête effectuée, on peut afficher les données de la base:
echo $donnees['nom'];
echo $donnees['numero'];
//Etc.
}
else
{
//Si c'est pas une valeur numérique, on arrête le script et on affiche un message d'erreur
exit('Erreur, la valeur n\'est pas une valeur numérique');
}

Je fais d'une pierre deux coups, je suis paresseux :)-D ), pour répondre à ton MP, les fonctions mysql connect et mysql select db doivent être placée avant le code que je t'ai donnée. Mais tu peux les mettre dans les même balises PHP que le code, mais avant le début, c'est mieux ;)
ok merci j ai essayer tout ça en recopiant exactement ton code + les fonction connect, et ca n affiche toujours rien quand je fais lien.php?id=1

Ce n est pas a cause de la confusion des 2 WHERE ? c'est bizarre...
 

Wallabix

Touriste
Oui, en effet, j'avais pas fais attention. Essaye comme ceci:

$reponse = mysql_query(SELECT * FROM colombus_a, stats WHERE colombus_a.ID_stats = stats.ID AND Id = ''.$ID.'\'');

Remplace le Id par le nom du champs qio correspond à l'identifiant
 

Xou

I ♥ rien
Afin de mieux s'y retrouver, vous pouvez faire un truc du style :

$request = sprintf('SELECT champ1,champ2,... FROM matable WHERE id = %d',$id);

Et comme le dit null, faites attention aux injections SQL, car là ça peut très vite passer, quoique en vérifiant si on a un numérique, j'ai un doute que ça passe. Non ?
 
Haut