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

Signaler
Messages postés
91
Date d'inscription
dimanche 12 août 2007
Statut
Membre
Dernière intervention
21 septembre 2014
-
Messages postés
91
Date d'inscription
dimanche 12 août 2007
Statut
Membre
Dernière intervention
21 septembre 2014
-
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

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
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
Messages postés
91
Date d'inscription
dimanche 12 août 2007
Statut
Membre
Dernière intervention
21 septembre 2014
1
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 -->
Messages postés
91
Date d'inscription
dimanche 12 août 2007
Statut
Membre
Dernière intervention
21 septembre 2014
1
merci neigedhiver c trés gentil