Probleme d'affichage les enregistrement d'une table de base de donnée

Résolu
cs_rinuom99 Messages postés 91 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 21 septembre 2014 - 18 mars 2008 à 22:31
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 -->

3 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
19 mars 2008 à 00:36
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
3
cs_rinuom99 Messages postés 91 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 21 septembre 2014 1
18 mars 2008 à 22:40
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 -->
0
cs_rinuom99 Messages postés 91 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 21 septembre 2014 1
20 mars 2008 à 09:27
merci neigedhiver c trés gentil
0
Rejoignez-nous