Probleme d'affichage les enregistrement d'une table de base de donnée [Résolu]

Messages postés
91
Date d'inscription
dimanche 12 août 2007
Statut
Membre
Dernière intervention
21 septembre 2014
- - Dernière réponse : cs_rinuom99
Messages postés
91
Date d'inscription
dimanche 12 août 2007
Statut
Membre
Dernière intervention
21 septembre 2014
- 20 mars 2008 à 09:27
salut,
je veux afficher tout les enregistrement d'une table de base de donnée, j'ai utilisé le code suivant:
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

$selectcli="SELECT * FROM client ORDER BY 'mat_cli'";
$cli = mysql_query($selectcli, $link) or die(mysql_error());
$lignes_cli = mysql_num_rows($cli);
$client =array();
$client['matricule'] =array();
$client['nom'] =array();
$client['prenom'] =array();
$client['adresse'] =array();
 
if($lignes_cli != 0){for($i=0;$i<$lignes_cli ;$i++){$row_cli = mysql_fetch_assoc($cli);
$client['matricule'][$i] = $row_cli['mat_cli'];
$client['nom'][$i]=$row_cli['nom_cli'];
$client['prenom'][$i]=$row_cli['prenom_cli'];
$client['adresse'][$i]=$row_cli['adresse_cli'];
$client['etat'][$i]=$row_cli['etat'];
mysql_data_seek($cli, $i);
 

<!-- END TEMPLATE: bbcode_code -->et pour l'affichage j'utilise le code suivant:
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
 
 
for($i=1; $i<$lignes_cli;$i++)$mat= $client['matricule'][$i];
$nom= $client['nom'][$i];
$prenom=$client['prenom'][$i];
$adresse=$client['adresse'][$i];
$eta=$client['etat'][$i];

echo '<tr>';
echo '<td width="8%">' ;
echo '</td>';

echo'<td width="76%" height="20" align="left" valign="middle">
[client.php?m='..'">'.$mat."\n".'-'."\n".$nom."\n".'-'."\n"
.$prenom."\n".'-'."\n".$adresse.']</td>';
echo '<td width="8%">';
echo '[addclient.php?m='..'">
]';

echo '</td>';
 

<!-- END TEMPLATE: bbcode_code -->

le probleme que le dernier enregistrement il n'affiche pas ??? si vous pouvez mz aidé svp et merci

<!-- / message -->
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
2492
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
12
3
Merci
Salut,

Essaie de faire un truc plus propre, pour mieux t'y retrouver :
$selectcli="SELECT * FROM client ORDER BY 'mat_cli'";

Déjà, évite d'utiliser * pour la liste des colonnes, ça bouffe des ressources pour rien. Préfère lister les colonnes une par une, ça évite de récupérer les colonnes inutiles, notamment si plus tard tu rajoutes des colonnes dans ta table...

$cli = mysql_query($selectcli, $link) or die(mysql_error());
$lignes_cli = mysql_num_rows($cli);

La définition du tableau $client ne sert à rien

Le reste, c'est presque illisible tellement c'est compact et pas indenté. Ton remplissage du tableau $client est assez peu orthodoxe... Quant à 'or die' => c'est crade

if ($cli = @mysql_query($selectcli, $link)) { # Si la requête s'est bien passée
if (mysql_num_rows($cli) > 0) { # Ca risque pas d'être négatif...
while ($row_cli = mysql_fetch_assoc($cli)) {
$clients[$i][] = $row_cli;
}
}
}
else {
# Gestion de l'erreur de manière plus propre, éventuellement en
# faisant appel à une fonction spécialisée
}

Pour l'affichage :

foreach ($clients as $client) {
echo '<tr><td width="8%">&nbsp;</td>
<td width="76%" height="20" align="left" valign="middle">
[client.php?m=' . $client['matricule'] . ' '.$client['matricule'] . "\n-\n" .
$client['nom'] . "\n-\n" .
$client['prenom'] . "\n-\n" .
$client['adresse'] .']</td>
<td width="8%">
[addclient.php?m='.$client['matricule'].'

]';
}

Ta boucle foreach va parcourir tous les clients sans en oublier.

Ta requête ne permet pas d'utiliser ce code correctement, il faut absolument que tu la corriges et que tu listes les champs à récupérer, et que tu leurs donnes un alias :

$selectcli = 'SELECT mat_cli AS matricule,
prenom_cli AS prenom,
nom_cli AS nom,
adresse_cli AS adresse,
etat
FROM client ORDER BY mat_cli ASC;';

Les alias seront utilisés comme index du tableau associatif renvoyé par mysql_fetch_assoc().

La fonction mysql_fetch_assoc() déplace le pointeur de la ressource résultat retournée par mysql_query, inutile donc de le faire.

Cette manière de faire présente un inconvénient : tu parcours 2 fois les résultats. Une fois pour la récupération, une autre pour l'affichage. Une solution consiste à utiliser un itérateur en PHP5, que l'on peut simuler en PHP4 (il existe au moins une source sur phpcs d'un itérateur en PHP4, postée par codefalse, si ma mémoire est bonne).

La boucle while() n'est pas plus consommatrice de ressources que for() : ici, elle est plus facile à utiliser, d'autant qu'on n'a pas besoin de compteur pour ajouter des éléments à un tableau.

La boucle foreach() par contre te permet de parcourir ton tableau du début à la fin sans te soucier du nombre d'éléments qu'il contient (c'est vraiment une information accessoire ici).

<hr size="2" width="100%" />Neige

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de neigedhiver
Messages postés
91
Date d'inscription
dimanche 12 août 2007
Statut
Membre
Dernière intervention
21 septembre 2014
1
0
Merci
je m'excuse pour le forma

voici le probleme:
je veux afficher tout les enregistrement d'une table de base de donnée, j'ai utilisé le code suivant:
<!-- BEGIN TEMPLATE: bbcode_code -->

 
$selectcli="SELECT * FROM client ORDER BY 'mat_cli'";
$cli = mysql_query($selectcli, $link) or die(mysql_error());
$lignes_cli = mysql_num_rows($cli);
$client =array(); $client['matricule'] =array();
$client['nom'] =array(); $client['prenom'] =array();
$client['adresse'] =array();  
if($lignes_cli != 0){for($i=0;$i<$lignes_cli ;$i++)
{$row_cli = mysql_fetch_assoc($cli);
$client['matricule'][$i] = $row_cli['mat_cli'];
$client['nom'][$i]=$row_cli['nom_cli'];
$client['prenom'][$i]=$row_cli['prenom_cli'];
$client['adresse'][$i]=$row_cli['adresse_cli'];
$client['etat'][$i]=$row_cli['etat'];
mysql_data_seek($cli, $i);  

<!-- END TEMPLATE: bbcode_code -->et pour l'affichage j'utilise le code suivant:
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
    for($i=1; $i<$lignes_cli;$i++)
{$mat= $client['matricule'][$i];
$nom= $client['nom'][$i];
$prenom=$client['prenom'][$i];
$adresse=$client['adresse'][$i];
$eta=$client['etat'][$i];
echo '<tr>';
echo '<td width="8%">' ;
echo '</td>';
echo'<td width="76%" height="20" align="left" valign="middle">
[client.php?m='.$mat.' '.$mat."\n".'-'."\n".$nom."\n".'-'."\n"
.$prenom."\n".'-'."\n".$adresse.']</td>';
echo '<td width="8%">';
echo '[addclient.php?m='.$mat.'
]'; echo '</td>';  

<!-- END TEMPLATE: bbcode_code -->
le probleme que le dernier enregistrement il n'affiche pas ??? si vous pouvez mz aidé svp et merci<!-- / message -->
Commenter la réponse de cs_rinuom99
Messages postés
91
Date d'inscription
dimanche 12 août 2007
Statut
Membre
Dernière intervention
21 septembre 2014
1
0
Merci
merci neigedhiver c trés gentil
Commenter la réponse de cs_rinuom99