IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Affichage des épisodes d'une série par saison


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 226
    Points : 78
    Points
    78
    Par défaut Affichage des épisodes d'une série par saison
    Bonjour,

    Sur mon site, j'affiche une fiche pour chaque série télévisée. Dans chaque fiche, un lien renvoie vers une page qui doit afficher les épisodes de cette façon :
    Nom : episodes.jpg
Affichages : 182
Taille : 900,9 Ko

    Hors, je ne parviens pas à séparer les saisons comme sur l'images ci-dessus.
    En fait, mon script ne me permet pas de faire apparaître une bordure entre chaque saison.

    J'ai fait de nombreux essais, mais aucun n'est concluant.

    Voici mon code actuel qui, lui, m'affiche 4 fois le même épisode.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    42
    43
    44
    45
    46
    <?php
    	$titles = getTitle();
    	$episodeList = getEpisodes();
    	$seriesIdTest = getPageOnError();
     
    	if((isset($_GET['series'])) && ($_GET['series'] > 0) && ($_GET['series'] == $seriesIdTest)) { // If string is not empty then first test if string match the selection
    		$seriesIdTest = $_GET['series'];
    	} else { // If the test fails, return to greating page
    		header("Location: accueil.php");
    		ob_clean();
    		die();
    	}
    ?>
     
     
    <section class="series accueilContainer episodeSection col-10">
    	<article class="seriesRecord">
     
    		<!-- TITLE DISPLAY -->
    	  	<h1 class="episodesTitle epListTitle"><mark>EPISODES</mark></h1>
    	  	<h1 class="episodesTitle epListTitle"><mark><?php echo $titles['title']; ?><mark></h1>
     
    	  	<!-- EPISODES SECTION DISPLAY -->
     
    	  	<table class="episodeTable">
    			<?php
    				foreach ($episodeList as $episodes) {
    					$seasonEpisode[$episodes['seasonNumber']][$episodes['episodeId']][] = $episodes['seriesId'];		
    				}				
    					foreach ($seasonEpisode as $seriesSeason => $series) {
     
    						foreach ($series as $season => $episode) { ?>		 	
    							<tr class="seasonLine">	
    								<tr>
    									<td class="episodeCell episodeNumberCell"><span class="episodes"><?php echo $episodes['epNumber']; ?></span></td>
    									<td class="episodeCell episodeSeasonCell"><span class="episodes"><?php echo $episodes['seasonNumber']."-".$episodes['seasonEpNumber']; ?></span></td>
    									<td class="episodeCell episodeOrigCell"><span class="episodes"><?php echo $episodes['episodeTitle']; ?></span></td>
    									<td class="episodeCell episodeFrenchCell"><span class="episodes"><?php echo $episodes['frenchEpisodeTitle']; ?></span></td>
    								</tr>
    			<?php 	} ?>
    							</tr>
    			<?php	} ?>
    	  	</table>
     
      	</article>
    </section>

    Quelqu'un aurait-il une idée, SVP ?

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 436
    Points : 4 933
    Points
    4 933
    Par défaut
    Bonjour,

    Il va falloir nous montrer les valeurs des tableaux utilisés, chose qu'on ne peut pas deviner...

    S'il vous plait, mettez des var_dump($episodeList);var_dump($seasonEpisode); après la fin des boucles, et coller le résultat ici

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 226
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    Entre temps, j'ai trouvé une solution.

    Le code PHP pour l'affichage des épisodes :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    42
    43
    44
    45
    46
    <?php
    	$titles = getTitle();
    	$episodeList = getEpisodes();
    	$seriesIdTest = getPageOnError();
     
    	if((isset($_GET['series'])) && ($_GET['series'] > 0) && ($_GET['series'] == $seriesIdTest)) { // If string is not empty then first test if string match the selection
    		$seriesIdTest = $_GET['series'];
    	} else { // If the test fails, return to greating page
    		header("Location: accueil.php");
    		ob_clean();
    		die();
    	}
    ?>
     
    <section class="series accueilContainer episodeSection col-10">
    	<article class="seriesRecord">
     
    		<!-- TITLE DISPLAY -->
    	  	<h1 class="episodesTitle epListTitle"><mark>EPISODES</mark></h1>
    	  	<h1 class="episodesTitle epListTitle"><mark><?php echo $titles['title']; ?><mark></h1>
     
    	  	<!-- EPISODES SECTION DISPLAY -->
     
    	  	<table class="episodeTable">			
    <?php
    			foreach ($episodeList as $episodes) {
    ?>
     
    		 		<tr class="seasonLine">
    <?php
    		 		foreach($episodes as $row) {
    ?>
    					<tr>
    						<td class="episodeCell episodeNumberCell"><span class="episodes"><?php echo $row['epNumber']; ?></span></td>
    						<td class="episodeCell episodeSeasonCell"><span class="episodes"><?php echo $row['seasonNumber']."-".$row['seasonEpNumber']; ?></span></td>
    						<td class="episodeCell episodeOrigCell"><span class="episodes"><?php echo $row['episodeTitle']; ?></span></td>
    						<td class="episodeCell episodeFrenchCell"><span class="episodes"><?php echo $row['frenchEpisodeTitle']; ?></span></td>
    <?php			} ?>
     
    					</tr>
    <?php		} ?>
     
    				</tr>
    	</table>
      	</article>
    </section>

    Et la requête :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function getEpisodes() {
            global $pdo;
            global $seriesId;
            $sql = <<<SQL
    	    SELECT S.seriesId, E.episodeId, E.episodeNumber epNumber, E.seasonEpisodeNumber seasonEpNumber,
    		E.episodeTitle, FE.frenchEpisodeTitle, SN.seasonNumber
    		FROM EPISODE AS E
    		JOIN SERIES AS S ON S.seriesId = E.seriesId
    		JOIN FOREIGN_EPISODE AS FE ON FE.episodeId = E.episodeId
    		JOIN SEASON AS SN ON SN.seasonId = E.seasonId
    		WHERE S.seriesId = ?
    		GROUP BY seasonNumber, seasonEpisodeNumber
    		ORDER BY seasonNumber, episodeNumber, seasonEpisodeNumber
    		SQL;
     
    	$stmt = $pdo->prepare($sql);
    	$stmt->execute([ $seriesId ]);
    	$data = [];
    	foreach($stmt as $row) {
    		$row['epNumber'] = str_pad($row['epNumber'], 2, '0',STR_PAD_LEFT);
    		$row['seasonEpNumber'] = str_pad($row['seasonEpNumber'], 2, '0',STR_PAD_LEFT);
    		$data[$row['seasonNumber']][] = $row;
    	}
    	return $data;
    }

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 315
    Points : 39 680
    Points
    39 680
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Cette dernière requête est invalide et tout autre SGBD que MySQL l'aurait rejetée, car la clause GROUP BY est incohérente avec la clause SELECT.
    Toutes les colonnes ne faisant l'objet d'aucun calcul d'agrégat doivent être dans la clause GROUP BY.
    Si le but est de dédoublonner, alors il faut utiliser la clause DISTINCT

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 226
    Points : 78
    Points
    78
    Par défaut
    Effectivement, je m'avançait un peu quand je disait que ça fonctionnait.

    Il fallait effectivement supprimer la clause GROUP BY.

    Si le but est de dédoublonner, alors il faut utiliser la clause DISTINCT
    Il ne s'agit pas de dédoblonner, mais simplement de grouper les épisodes de chaque saison dans une cellule différente.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 315
    Points : 39 680
    Points
    39 680
    Billets dans le blog
    9
    Par défaut
    La clause GROUP BY sert à calculer des agrégats : SUM(), MIN(), MAX(), AVG() et COUNT(). On peut y associer la restriction HAVING pour filtrer sur le résultat de l'agrégation.
    Dans votre cas, il n'y a aucune raison d'utiliser GROUP BY.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/09/2014, 09h39
  2. Limiter l'affichage des elements d'une base par date
    Par john85 dans le forum ASP.NET MVC
    Réponses: 0
    Dernier message: 22/06/2011, 22h26
  3. Réponses: 4
    Dernier message: 09/02/2011, 17h00
  4. Affichage des chiffres dans une phrases arabe
    Par omda dans le forum Oracle
    Réponses: 4
    Dernier message: 30/09/2005, 13h36
  5. Réponses: 2
    Dernier message: 29/11/2004, 12h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo