8722 sujets

Développement web côté serveur, CMS

Bonjour
J'avais sollicité votre aide pour l'affichage dynamique d'un tableau ici... voilà que j'ai encore besoin de votre aide...

Décidément j'ai vraiment du mal avec les tableaux!
Alors voilà je doit faire afficher un tableau comme ça:
upload/22504-video1.jpg

Mais tout ce que j'arrive à faire c'est ça:
upload/22504-videophp.jpg

Donc j'ai 3 tables dans ma bdd.
upload/22504-tablesvide.jpg

Voilà ce que contient la table spec_video: upload/22504-specvideo.jpg
Puis spec_video_details: upload/22504-specvideod.jpg

Je pense que mon problème se situe au niveau de la 3e table qui doit en fait contenir l’association entre 2 id de spec_video_details... ça devrait donner un truc du genre: upload/22504-specdetail.jpg

J'ai tenté de m'inspirer du code de mon précédant poste, mais semblerais que je ne comprenne pas tout...
voilà mon code... (pas propre du tout):
<?php
	$requete = mysql_query("SELECT id,fr FROM spec_video ORDER BY ordre")or die("11 - ".mysql_error());
	while($info = mysql_fetch_array($requete)) {
		
		$req = mysql_query(
					"SELECT
						VD.id,
						VD.fr
					FROM spec_video S, 
						spec_video_details VD,
						spec_details_video_details VDD
					WHERE VDD.id_spec_details = VD.id
						AND VD.id_spec = '".$info['id']."'")or die("16 - ".mysql_error());
		while($info_spec = mysql_fetch_array($req)) {
			
			$q = mysql_query(
					"SELECT
						VD.id,
						VD.fr
					FROM spec_video S, 
						spec_video_details VD,
						spec_details_video_details VDD
					WHERE VDD.id_spec_details2 = VD.id
						AND VDD.id_spec_details = '".$info_spec['id']."'
						AND VD.id_spec = '".$info['id']."'")or die("29 - ".mysql_error());
			while($data = mysql_fetch_array($q)) {
				$details['details'][$data['id']] = $data['fr'];
			}
			$res[$info_spec['id']] = $info_spec['fr'];
		}
		$spec[] = $info;
			
		$nb_colonnes = count($spec);
		$nb_colonnes2 = count($details);
		$nb_lignes = count($res);
	}
	?>
<table>
	<caption>Vidéo</caption>
	<thead>
      <tr>
            <?php for ($c = 0; $c < $nb_colonnes; $c++): ?>
            <th>
			<?php echo $spec[$c]['fr']; ?>
			</th>
            <?php endfor ?>
        </tr>
    </thead>
    <tbody>
		<?php foreach ($res as $l => $resolution):?>
        <tr>
            <td><?php echo $resolution ?></td>
            <?php for ($c = 1; $c < $nb_colonnes; $c++):?>
            <td>
			<?php echo $details[$c]['details'][$l];?>
            </td>
            <?php endfor ?>
        </tr>
        <?php endforeach ?>
    </tbody>
</table>

Modifié par juliesunset (17 Jul 2013 - 15:07)
Vu du tableau de sortie, je pense que la conception de la bdd n'est peut être pas adaptée.
A ce que je comprends, dans "spec_video_details" tu as des informations qui ne sont pas de même catégorie (un coup cest une résolution, un coup c'est les IPS et un autre coup c'est le champ de vision).. Et tu "contournes" le problème en ajoutant une clé étrangère pour dire qui appartient à quoi.

A la logique, j'aurai plutôt fait 4 tables :
- spec_video_resolutions
- spec_video_ips
- spec_video_visions
- spec_video_resolutions_ips_visions

Et la table en gras fait la relation entre toutes les tables.

EDIT : Et pour les <th>, tu les mets en dur dans le code (en changeant selon la langue en php) si bien sûr ton tableau ne change pas de nombre de colonnes dans le temps.
Modifié par Apoooo (18 Jul 2013 - 08:46)
Merci pour ta réponse

Ok autrement dit ça donnerais une truc du genre?
upload/22504-tablevideo.jpg

Apoooo a écrit :
EDIT : Et pour les <th>, tu les mets en dur dans le code (en changeant selon la langue en php) si bien sûr ton tableau ne change pas de nombre de colonnes dans le temps.
Ben justement c'est là que ça se complique! Rien n'est sûr. Pour l'instant nous n'avons qu'un modèle, mais je sais qu'il y en a de nouveau prévu pour l'an prochain...
Yes!
J'ai revus mes tables de bdd et refait mon code, maintenant ça fonctionne!
Merci pour le coup de main!

<table>
                <caption>Vidéo</caption>
                <thead>
                	<tr>     
					<?php
                    $q = mysql_query(
                                    "SELECT fr as spec FROM spec_video ORDER BY ordre")or die("78 - ".mysql_error());
                    while ($info = mysql_fetch_assoc($q)){
                        ?>
                            <th><?php echo $info['spec'];?></th>
                        <?php
                        }
                    ?>
                    </tr>
                </thead>
                <tbody>
					<?php
                    $q = mysql_query(
                        "SELECT DISTINCT
                            R.id,
							R.fr as resolution,
							I.fr as ips,
							V.fr as vision
						FROM spec_video_resolution R,
							spec_video_ips I,
							spec_video_vision V,
							spec_video_resolution_ips_vision RIV
						WHERE RIV.id_spec_video_resolution = R.id
							AND RIV.id_spec_video_ips = I.id
							AND RIV.id_spec_video_vision = V.id")or die("96 - ".mysql_error());
                    while ($info = mysql_fetch_assoc($q)){
					$res['resolution'][$info['id']] = $info['resolution'];
					$nb_lignes = count($res);
                        ?>
					<?php foreach ($res as $l => $resolution):?>
                	<tr>
                            <td><?php echo $info['resolution'];?></td>
                            <td><?php echo $info['ips'];?></td>
                            <td><?php echo $info['vision'];?></td>
                    </tr>
        			<?php endforeach ?>
                    <?php
                    }
                    ?>
                </tbody>
            </table>

Modifié par juliesunset (18 Jul 2013 - 22:34)