Page 1 sur 1

Problème d'affichage requete MySQL

Posté : 09 nov. 2005, 22:57
par lord.anonymous
Salut à toutes et à tous.
Je vous soumets un petit problème que je n'arrive pas à régler.
Lors de l'affichage de la requête, il manque systématiquement la première ligne dans mon tableau de données, pendant la boucle "while", comme si on commençait directement par la 2ième ligne de l'array renvoyé par Mysql.
Je précise également que les requêtes sont apparemment correctes, et que le reste du code ne pose à priori pas de problèmes. J'ai bien l'affichage du tableau désiré ainsi que ses éléments, mais il ne manque que la 1ere ligne de résultats.
Quelqu'un peut m'aider? Merci.
// connection à la BDD
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

if($objet=='Lampe de poche'){  
	$select="SELECT `id`, `objet`, `piece`, `phase`, `objectif`, `conformes`, `rebuts` FROM `suivi_pieces` WHERE `objet`='Lampe de poche'&&((`piece`='Corps'&&`phase`='50')||(`piece`='Parabole'&&`phase`='40')||(`piece`='Bouchon'&&`phase`='50')||(`piece`='Entretoise'&&`phase`='10'))";
  $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
	$row = mysql_fetch_row($result);	
  $total = $row[0];
	//echo $total;
	
	//si on a récupéré un résultat on l'affiche.
  if($total) {
    //début du tableau
    echo '<table border="2" cellpadding="10" cellspacing="3" style="border-collapse: collapse" bordercolor="white" width="100%" 	id="AutoNumber1">'."\n";
    //première ligne on affiche les titres Pièce, Objectif, Conformes et Rebuts dans 4 colonnes
    echo '<tr>';
    echo '<td width="20%" height="100%" valign="top"><p align="center">';
	  echo '<b><font size="5">Pièce</font></b>';
	  echo '</td>';
          echo '<td width="20%" height="100%"><p align="center">';
	  echo '<b><font size="5" color="#666699">Objectif</font></b>';
	  echo '</td>';
	  echo '<td width="20%" height="100%"><p align="center">';
	  echo '<b><font size="5" color="#66FF33">Conformes</font></b>';
	  echo '</td>';
	  echo '<td width="20%" height="100%"><p align="center">';
	  echo '<b><font size="5" color="#FF0000">Rebuts</font></b>';
	  echo'</td>';
	  echo '</tr>'."\n";
	 
	  //lecture et affichage des résultats sur 4 colonnes, 1 résultat par ligne.    
    while($row = mysql_fetch_array($result)) {
      echo '<tr>';
      echo '<td  width="20%" height="100%" valign="top">';
      echo '<font size="4">'.$row['piece'].'</font>';		 
      echo '</td>';
      echo '<td  width="20%" height="100%" valign="top">';
      echo '<font size="4" color="#666699">'.$row['objectif'].'</font>'; 
      echo '</td>';
      echo '<td  width="20%" height="100%" valign="top">';
      echo '<font size="4" color="#66FF33">'.$row['conformes'].'</font>';		 
      echo '</td>';
      echo '<td  width="20%" height="100%" valign="top">';
      echo '<font size="4" color="#FF0000">'.$row['rebuts'].'</font>';	 
      echo '</td>';        
      echo '</tr>'."\n";	
}
echo '</table>'."\n";
  //fin du tableau
  }	
}

Posté : 09 nov. 2005, 23:16
par Truc
Salut, tu fait appel a mysql_fetch_row() 2 fois donc la lecture de la 1ere ligne de données se fait deja mais tu n'affiche pas ensuite dans la boucle tu relis et affiche.

Enleve le 1er mysql_fetch_row() et remplace le par mysql_num_row() par exemple :wink:

Posté : 09 nov. 2005, 23:46
par Cyrano
Suggestion et petite optimisation:
<?php
// connection à la BDD
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

if($objet=='Lampe de poche')
{
    $select="SELECT `id`, `objet`, `piece`, `phase`, `objectif`, `conformes`, `rebuts` FROM `suivi_pieces` WHERE `objet`='Lampe de poche'&&((`piece`='Corps'&&`phase`='50')||(`piece`='Parabole'&&`phase`='40')||(`piece`='Bouchon'&&`phase`='50')||(`piece`='Entretoise'&&`phase`='10'))";
    $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
    $total = mysql_num_rows($result);
    //echo $total;

    //si on a récupéré un résultat on l'affiche.
    if($total > 0)
    {
        //début du tableau
?>
<table border="2" cellpadding="10" cellspacing="3" style="border-collapse: collapse" bordercolor="white" width="100%" id="AutoNumber1">'."\n";
<!-- première ligne on affiche les titres Pièce, Objectif, Conformes et Rebuts dans 4 colonnes -->
  <tr>
    <td width="20%" height="100%" valign="top"><p align="center">
      <b><font size="5">Pièce</font></b>
    </td>
    <td width="20%" height="100%"><p align="center">
      <b><font size="5" color="#666699">Objectif</font></b>
    </td>
    <td width="20%" height="100%"><p align="center">
      <b><font size="5" color="#66FF33">Conformes</font></b>
    </td>
    <td width="20%" height="100%"><p align="center">
      <b><font size="5" color="#FF0000">Rebuts</font></b>
    </td>
  </tr>
<?php
        //lecture et affichage des résultats sur 4 colonnes, 1 résultat par ligne.
        while($row = mysql_fetch_array($result))
        {
?>
  <tr>
    <td width="20%" height="100%" valign="top">
      <font size="4"><?php echo($row['piece']); ?></font>
    </td>
    <td width="20%" height="100%" valign="top">
      <font size="4" color="#666699"><?php echo($row['objectif']); ?></font>
    </td>
    <td width="20%" height="100%" valign="top">
      <font size="4" color="#66FF33"><?php echo($row['conformes']); ?></font>
    </td>
    <td width="20%" height="100%" valign="top">
      <font size="4" color="#FF0000"><?php echo($row['rebuts']); ?></font>
    </td>
  </tr>
<?php
        }
?>
</table>
<?php
        //fin du tableau
    }
}
?>

Posté : 09 nov. 2005, 23:48
par lord.anonymous
Le premier appel est un mysql_fetch_row($result).
Le deuxième appel est un mysql_fetch_array($result).
Apparemment ça ne marche pas.

Posté : 09 nov. 2005, 23:58
par Truc
Le premier appel est un mysql_fetch_row($result).
Le deuxième appel est un mysql_fetch_array($result).
ça ne change rien ... malgré le changement de fonction (*_array, *_row) toutes 2 listent les résultat de la requete.

De toute façon tu as un code qui roule maintenant :wink:

Posté : 10 nov. 2005, 00:02
par lord.anonymous
Ok merci beaucoup le problème est réglé.
Merci à Cyrano, j'ai nettoyé mon code ;-)