Page 1 sur 1

probleme un peu similaire (je crois)

Posté : 13 nov. 2007, 23:33
par diabolorange
Bonjour,
Je veux afficher le nom d'une categorie puis les élements qui leurs sont associées. Seulement quand j'éxecute la requête, cela affiche l'ensemble des résultats en omettant toujours le premier. (Donc il me manque le premier élement de chaque catégorie.)
Voici mon code:
<?
include ('cnx.php');
$select = 'SELECT * FROM matable';
$result = mysql_query($select,$connexion)  or die ('Erreur : '.mysql_error() );
$categ='';
while ($row = mysql_fetch_array($result)){
	if ($serie != $row['categorie']){
		echo "</table>\n";
?>
<table>
  <tr>
	<td width="150"><img src="images/<? echo $row['image']; ?>"></td>
	<td><? echo $row['categorie']; ?></td>
  </tr>
</table>
<table>
  <tr>
    <td>colonne1</td>
    <td>colonne2</td>
    <td>colonne3</td>
    <td>colonne4</td>
    <td>colonne5</td>
  </tr>
<?
 	}else{
		echo "<tr>\n";
		echo "<td>".$row['colonne1']."</td>\n";
		echo "<td>".$row['colonne2']."</td>\n";
		echo "<td>".$row['colonne3']."</td>\n";
		echo "<td>".$row['colonne4']."</td>\n";
		echo "<td>".$row['colonne5']."</td>\n";
		echo "</tr>\n";
	}
$categ = $row['categorie'];
}
?>
Comment afficher tous les élements de chaque categorie?:roll:
Le code est un peu chaotique, je l'avoue mais c'est encore en construction.

Posté : 13 nov. 2007, 23:53
par zeus
Modération :
diabolorange, si tu as une autre question ouvre un nouveau sujet,
cela te permettra d'avoir plus de réponses.

En plus, tu pourras mettre [Résolu] dès que ton problème évoqué ici sera réglé.

Merci de prendre le temps de lire les règlements.

Posté : 14 nov. 2007, 00:00
par h0_noMan
Il faudrait que tu regardes au code source que ta page renvoie.

Tu crée un nouveau tableau a chaque entrée de ta table.

<table> dans un while(mysql_fetch_assoc(....))

J'économise mon écran

Posté : 14 nov. 2007, 00:22
par diabolorange
Modération :
diabolorange, si tu as une autre question ouvre un nouveau sujet,
cela te permettra d'avoir plus de réponses.

En plus, tu pourras mettre [Résolu] dès que ton problème évoqué ici sera réglé.

Merci de prendre le temps de lire les règlements.
Par soucis de sujet trop nombreux à lire, blablaba, j'ai posté dans un sujet déjà existant.
Merci d'avoir ouvert un nouveau sujet.

Posté : 14 nov. 2007, 00:40
par Invité
Il faudrait que tu regardes au code source que ta page renvoie.

Tu crée un nouveau tableau a chaque entrée de ta table.

<table> dans un while(mysql_fetch_assoc(....))
En fait, je ferme un tableau au début de ma page, ce qui n'est pas très propre en effet (j'avais po vu ça) mais n'empêche normalement pas l'affichage au complet de ma requête. Chose qui se fait très bien sans l'ajout de la condition.
Est-ce que un foreach pourrait résoudre le problème ou est-ce une idée délirante?
Un isset($serie) ne fonctionne evidemment pas (j'ai verifié quand même 8-|).
Le problème est donc de ne pas faire de vérification lors du premier passage. Ce qui necéssite, je crois, un profond remaniement de l'ensemble.
J'ai bon?

Suite

Posté : 14 nov. 2007, 23:07
par diabolorange
Toujours dans un esprit aussi brut, j'ai UNE solution pour un affichage correct. Lors du premier passage while, on realise quand même la condition if, la fin du tableau (html) ne peut donc pas s'afficher et on repart du while. En répetant le même bout de code hors du if, cela permet d'afficher le premier résultat.
Voici donc le code qui affichera l'ensemble des résultats:
<?
include ('cnx.php');
$select = 'SELECT * FROM matable';
$result = mysql_query($select,$connexion)  or die ('Erreur : '.mysql_error() );
$categ='';
echo "<table>";
while ($row = mysql_fetch_assoc($result)){
	if ($categ != $row['categorie']){
		echo "</table>\n";
?>
<table>
  <tr>
	<td width="150"><img src="images/<? echo $row['image']; ?>"></td>
	<td><? echo $row['categorie']; ?></td>
  </tr>
</table>
<table>
  <tr>
    <td>colonne1</td>
    <td>colonne2</td>
    <td>colonne3</td>
    <td>colonne4</td>
    <td>colonne5</td>
  </tr>
<?
		echo "<tr>\n";
		echo "<td>".$row['colonne1']."</td>\n";
		echo "<td>".$row['colonne2']."</td>\n";
		echo "<td>".$row['colonne3']."</td>\n";
		echo "<td>".$row['colonne4']."</td>\n";
		echo "<td>".$row['colonne5']."<br>ISBN:".$row['isbn']."</td>\n";
		echo "</tr>\n";
$categ = $row['categorie'];
 	}else{
		echo "<tr>\n";
		echo "<td>".$row['colonne1']."</td>\n";
		echo "<td>".$row['colonne2']."</td>\n";
		echo "<td>".$row['colonne3']."</td>\n";
		echo "<td>".$row['colonne4']."</td>\n";
		echo "<td>".$row['colonne5']."<br>ISBN:".$row['isbn']."</td>\n";
		echo "</tr>\n";
	}
$categ = $row['categorie'];
}
?>
Ok c'est franchement dégeu comme code mais ça marche. Reste à passer un serieux coup de balai.
(chui un peu tout seul là non? :-s )
La table comporte 8 champs
1 champ 'id'
1 champ 'categorie'
1 champ 'image'
5 champs colonne (respectivement 1, 2, 3, 4, 5)
Merci à tout ceux qui m'aideront pour le ménage.

Posté : 15 nov. 2007, 02:16
par AB
A ta place je ferais une table pour les catégories et une autre pour les éléments des catégories. C'est habituellement de cette façon que l'on procède.

Posté : 15 nov. 2007, 11:45
par diabolorange
A ta place je ferais une table pour les catégories et une autre pour les éléments des catégories. C'est habituellement de cette façon que l'on procède.
Ca ne réduirai pas le nombre de lignes du code ni la répetition de celui-ci au niveau du else.

Posté : 16 nov. 2007, 15:54
par diabolorange
Par contre ça ferai déjà un peu de ménage.

code propre et sans longueur

Posté : 03 déc. 2007, 20:11
par diabolorange
Cette solution permet un affichage propre sans répetition de code et de conditions inutiles.
<?
include ('cnx.php');
$select = 'SELECT * FROM matable';
$result = mysql_query($select,$connexion)  or die ('Erreur : '.mysql_error() );
// liste les elements qui ne seront afficher qu'une fois
$tab = array();
$i=0;
while ($row = mysql_fetch_assoc($result)){
	$tab['categorie'][$i] = $row['categorie'];
	$i++;
}
$categorie = array_unique($tab['categorie']);
$categorie = array_merge($categorie);
// toutes les categories se trouve dans $categorie avec cle de 0 à $i
$j=0;
$k=0;
//liste
for ($j=0;$j<count($categorie);$j++){
	echo '<table>\n';
	echo '<tr>\n';
	echo '<td>'.$categorie[$j].'</td>\n';
	echo ' </tr>\n';
	echo '<tr>\n';
	echo '<td><img src="images/'.$image[$j].'"></td>\n';
	echo '</tr>\n';
	echo '</table>\n';
	// recale le curseur mysql
	mysql_data_seek($result, $k);
	//On associe aux resultats de la requête les tableaux qui ne sont affichés qu'une fois avec l'operateur AND
	while ($row = mysql_fetch_assoc($result) AND $categorie[$j] == $row['categorie']){
		echo "<table>\n";
		echo "<tr>\n";
		echo "<td>".$row['colonne1']."</td>\n";
		echo "<td>".$row['colonne2']."</td>\n";
		echo "<td>".$row['colonne3']."</td>\n";
		echo "<td>".$row['colonne4']."</td>\n";
		echo "<td>".$row['colonne5']."</td>\n";
		echo "</tr>\n";
		echo "</table>\n";
		$k++;
	}
}
?>
Le but était de pouvoir tout afficher depuis une table unique et avec une seule requête.
Mis du temps |*() ...