[BDD] Problème avec SELECT "dynamique"
Bonjour,
Merci tout d'abord pour cette mine d'informations qui m'a souvent permis de me tirer d'affaire.
J'ai un problème pour récupérer mes enregistrements dans mes tables avec 'SELECT * FROM table', mon but étant de disposer d'un script qui me permette d'afficher le contenu d'une table sans la connaitre. Je souhaite afficher le couple nom du champ et valeur dans un tableau. J'ai résolu une bonne parti du problème, sauf qu'il me manque systématiquement toujours le premier enregistrement de chaque table interrogée. Voici mon script si quelqu'un voit mon erreur (peut-être qu'il n'y en a qu'une :wink: )
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
$connexion = connexion(SERVEUR, NOM, PASSE);
$requete = "SELECT * FROM " . $_GET['table'] ."";
$resultat = mysql_query($requete,$connexion);
// controle la présence d'enregistrement dans la table
if (!mysql_fetch_assoc($resultat))
{
echo '<font size="+1"><br>IL n\'y a pas d\'enregistrements dans la table'.$_GET['table'].'</font>';
exit;
}
else
{
echo '<h2>La table '.$_GET['table'].' contient les enregistrements suivants :</h2>';
}
// Création d'un tableau des méta données de la colonne
$i = 0;
while ($i < mysql_num_fields($resultat))
{
$meta = mysql_fetch_field($resultat, $i);
$nomChamp[$i] = $meta->name;
$i++;
}
// traitement de la requete, récupération des valeurs enregistrées
// et affichage des couples NOM de CHAMP/VALEURS
$i=0;
echo '<table width="90%" border="1" cellpadding="2" cellspacing="1"><col width="220" valign="top">';
while ($ligne = mysql_fetch_assoc($resultat))
{
foreach ($nomChamp as $value)
{
echo '<tr><td>'.$nomChamp[$i].'</td><td>'.$ligne[$value].'</td></tr>';
$i++;
if (mysql_num_fields($resultat)==$i)
{
$i = 0;
echo '</table><br><hr align="left" size="3" color="b50000"><br>';
echo '<table width="90%" border="1" cellpadding="2" cellspacing="1"><col width="250" valign="top">';
}
}
}
echo '</table>'; |
J'ai retiré les parties gestion d'erreur qui me paraissent pas concernées.
Je suis débutant donc vous avez le droit de rigoler pour mon usine à gaz :D . J'utilise PHP4.4.2/MySQL4.1 le tout sous XP Pro avec Apache 1.3.34 et c'est destiné à être hébergé dans les pages persos de Free.
Merci d'avance pour vos coneils éclairés.
Phil "Vecine"
Re: [BDD] Problème avec SELECT "dynamique"
Le problème vient de cette ligne :
Citation:
Envoyé par Vecine
Code:
1 2 3
|
// controle la présence d'enregistrement dans la table
if (!mysql_fetch_assoc($resultat)) |
Tu affectes la première ligne de résultat dans cette instruction, avant de faire une boucle pour les afficher (donc à partir de la 2e ligne).
La solution : pour savoir s'il y a des résultats, utilise mysql_num_rows(), qui ne déplace pas le pointeur de résultats.
[resolu] Problème avec SELECT "dynamique"
Bonjour,
Merci beaucoup pour votre aide à tout les deux.
Je me doutais bien que ça venait de la position du pointeur
mais j'avais pas capté le fait qu'il s'était déplacé avec
mysql_fetch_assoc().
Donc mysql_num_rows() a résolu le problème.
Il ne me reste plus qu'à reprendre le tout avec les conseils
pour comprendre un peu mieux et mettre mon usine à l'électricité
:lol:
Encore merci
Vecine