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

Langage PHP Discussion :

[Tableaux] Navigation dans un diaporama


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Points : 40
    Points
    40
    Par défaut [Tableaux] Navigation dans un diaporama
    Bonjour à tous,

    J'ai repris le développement d'un site sur lequel existe dejà un diaporama.
    Lorsque l'on clique sur une vignette, la photo s'affiche au dessus en taille normale.

    Je souhaiterais ajouter 2 boutons "précédent et "suivant" mais je ne m'en sors pas, par rapport au code existant que voici :

    Code : 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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    <?php
    require_once('dyn/lib/app.php');
    require("_includes/bdacc.php");
    require("_includes/comp.php");
    require("dyn/settings/config.php");
    $id_prog = $_GET['picture'];
    $galerie = isGalerie($id_prog, $db);
     
    define ("NBRE_COLONNES", 12);
     
    if(isset($_GET['selec']) && ($_GET['selec']) != ""){$premier=$_GET['selec'];}
    else{$premier = selectionPremier($id_prog, $db);}
     
    // ********************* FONCTIONS **********************
     
    function isGalerie($id_prog, $db)
    {
    	$sql = "SELECT * FROM galery WHERE galery.idp=".$id_prog;
    	$res=mysql_db_query($db, $sql);
     
    	$galerie = array();
    	while($rs=mysql_fetch_object($res))
    	{
    		// Créer le lien
    		// $lien = DYNPROGURL.$rs->lien_image;
     
            if( $rs->local )
            {
                  $lien = DYNPROGURL.$rs->lien_image;
            }else{
                  $lien = $rs->lien_image;
            }
     
    		$galerie[]= array(
    			'nom_image' => $rs->nom_image,
    			'com_image' => $rs->com_image,
    			'lien_image' => $lien,
    		);
    	}
    	return $galerie;
    }
     
    function selectionPremier($id_prog, $db)
    {
    	$sql = "SELECT * FROM galery WHERE galery.idp=".$id_prog." LIMIT 1";
    	$res=mysql_db_query($db, $sql);
    	$rs=mysql_fetch_object($res);
     
            if( $rs->local )
            {
                  $lien = DYNPROGURL.$rs->lien_image;
            }else{
                  $lien = $rs->lien_image;
            }
     
     
    	return $lien;
    }
     
    ?>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
     
    <body>
     
    <div><a href="#" onClick="self.close();">Fermer la fenêtre</a></div>
    <table width="100" border="0" align="center" cellpadding="0" cellspacing="0" height="550">
    <tr>
    <td width="15px" valign="center"><img src="images/fleche_g.gif" alt="Précédent" style="margin-right:15px" /></td>
    <td valign="center"><div align="center">
    	<img style="border:1px solid #c2c2c2" alt="Diaporama" src="<?=$premier;?>">
    </div>
    </td>
    <td width="15px" valign="center"><img src="images/fleche_d.gif" alt="Suivant" style="margin-left:15px" /></td>
    </tr>
    <tr height="0"><td colspan="3"></td></tr>
    </table>
     
    <table align="center">
      <tr><td align="center" style="font-family:Arial, Helvetica, sans-serif; font-size:12px; color:#666;">Cliquez sur une photo pour l'agrandir</td></tr>
      <tr><td height="5"></td></tr>
    </table>
     
    <div align="center">
    <table border="0" align="center" cellpadding="0" cellspacing="0">
      <tr>
      <?php 
      $compteur = 1;
      foreach($galerie as $k=>$v){ 
     
    		if ($compteur % NBRE_COLONNES == 1) {
    		echo ('</tr><tr>'); } ?>
     
        <td style="padding:5px 5px 1px 5px;" align="center">
     
    	<a href="photos.php?picture=<?=$id_prog;?>&selec=<?=$v['lien_image'];?>">
    	<img style="border:1px solid #c2c2c2" name="<?=$v['nom_image'];?>" src="<?=$v['lien_image'];?>" width="40" height="40" alt="<?=$v['com_image'];?>" title="<?=$v['com_image'];?>" border="0">
    	</a>
     
    	</td>
      <? $compteur++; } ?>
      </tr>
    </table>
    </div>
    </body>
    </html>
    Apparemment, la meilleure solution est d'utiliser un array mais je ne vois pas comment l'implémenter et récupérer l'affichage de mes photos avec les flèches droite et gauche.
    J'ai essayé diverses choses mais sans succès.
    Y a t il parmi vous quelqu'un qui puisse me mettre sur la bonne voie ?

    Merci à vous.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    je n'ai pas lu ton code, trop long...

    mais sur le principe :

    dans ta fonction selectionpremier, tu ajoutes comme paramètre ton tableau/array galerie
    et dans cette fonction, tu parcours avec un while ou un for cet array jusqu'à y trouver id_prog et tu retiens son indice x.
    Avec les indices x-1 et x+1 tu connais les id_prog précédente et suivante

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Points : 40
    Points
    40
    Par défaut
    ok, je te remercie.
    J'ai essayé : j'ai ajouté cette partie dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $resp = "SELECT * FROM galery WHERE galery.idp='$id_prog' ORDER BY id_image ASC";
    $request = mysql_query($resp);
    $tab = mysql_fetch_array($request);
    Le champ dans ma base qui correspond au chemin de mes images est "lien_image".
    Je ne vois pas comment récupérer l'indice de ce champ et l'utiliser pour créer les boutons "précédent" et "suivant" tant qu'il ya des images dans mon dossier.

    est-il préférable d'utiliser le champ id de mes images ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut
    Citation Envoyé par creatchy
    Je ne vois pas comment récupérer l'indice de ce champ et l'utiliser pour créer les boutons "précédent" et "suivant" tant qu'il ya des images dans mon dossier.
    Pour récupérer ton champ tu fais : $tab['lien_image'];

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Points : 40
    Points
    40
    Par défaut
    Merci pour ta réponse mais je ne m'en sors pas. Impossible de comprendre comment passer d'une image à l'autre en cliquant sur un lien (suivant ou précédent), à partir des indices de mon tableau.... je craque

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut
    Tu affiches une image d'ID : X
    L'image d'avant sera d'ID : X-1
    L'image suivante sera d'ID : X+1

    Donc tu peux faire un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $id = $tab['id'];
    echo '<a href="viewpicture.php?id='.($id-1).'">Précédent</a> | <a href="viewpicture.php?id='.($id+1).'">Suivant</a>';
    Ensuite tu as juste à vérifier, au début de ta page, si $_GET['id'] contient un chiffre, et tu vas chercher l'image qu'il indique.

    Tu peux, et tu dois, essayer de sécuriser cette idée de base.

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Points : 40
    Points
    40
    Par défaut
    Le problème, c'est que je passe dejà des informations dans l'url : picture et selec, qui me sont utiles lorsque je clique sur une vignette, pour afficher la photo en grand juste au dessus.

    Je souhaiterais ajouter les 2 boutons à côté de la grande photo pour parcourir ma gallerie. Ce qui me ferait 2 systèmes de navigation dans le diaporama.

    La partie du code qui m'affiche ma photo en format normal est la suivante (j'ai ajouté ce que tu m'as conseillé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img style="border:1px solid #c2c2c2" alt="Diaporama" src="<?php echo $premier; $id = $tab['id_image']; ?>">
    Et pour le bouton suivant (pour faire un test), j'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="photos.php?picture=<?=$id_prog;?>&id='.($id+1).'"><img src="images/fleche_d.gif" alt="Suivant" style="margin-left:15px" /></a>
    Lorsque je clique dessus, une autre image apparait et après plus rien.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut
    Ba ... tu as combien d'image ?

    Il faut faire des vérifications hein ... s'il $_GET['id'] > nombre d'image dans la table, tu écris un message d'erreur.

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Points : 40
    Points
    40
    Par défaut
    je peux avoir jusqu'à 20 images. Mais, là je ne comprends plus ton histoire de vérif.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    je reviens en arrière (cela veut dire que je pars sur mon idée qui diffère légèrement de celle de spirit_of_doc)

    comme je n'avais pas lu ton code, j'ai certainement écrit un peu vite au début...

    petit aparté : je ne sais pas très bien ce que représente id_prog (j'avais initiallement supposé que c'était l'id de ta photo, mais en lisant je me rends compte que non), mais je suppose qu'il s'agit d'un chapitre ou d'une séquence et qu'elle est renseignée en get par la page appelante de ta galerie. et à mon avis tu devrais sécuriser par un isset...

    bon fini l'aparté, et si j'ai mal compris, sorry

    dans ta fonction isgalerie, au moment de la création du tableau galerie, tu rajoutes un indice du genre 'indice'=> $indice et dans ta boucle while tu augmentes $indice de 1 à chaque passage

    ainsi, chaque photo est définie par la valeur de son indice (oui j'ai remarqué qu'elle est également définie par $lien, mais cela n'est pas gênant)

    du coup, tu peux poubelliser ta fonction selectionpremier : la première image est celle dont l'indice actif = 1 (j'appelle l'indice actif $actif)

    le selec dans ta galerie ne sera plus 'lien_image' mais doit devenir 'indice': <a href="photos.php?picture=<?=$id_prog;?>&selec=<?=$v['indice'];?>"> et ton GET['selec'] contient l'indice actif. je ne l'appelle donc plus $premier mais plutôt $actif = $_GET['selec'];

    tu fais une petite fonction très simple (appelée lien par exemple) qui retourne $lien en fonction de $indice. ainsi les sources de tes images seront src="<?php lien($indice); ?>"

    voilà pour la préparation.


    ainsi, tu as créé un ordre dans tes images et ta variable $actif sait quel est le numéro d'ordre

    ensuite tu rajoutes un lien pour l'image précédente qui est ultra-simple : <a href="photos.php?picture=<?=$id_prog;?>&selec=<?=$actif-1;?>">

    bon il y a quelques subtilités à rajouter : t'assurer de ne pas avoir un lien = 0 dans le précédent ou un lien supérieur aux nombres d'images dans le suivant

    je ne vais pas tout écrire il faut que tu cherches un peu

    ah j'oubliais : personnellement je trouve ton code à partir du foreach absolument illisible : je n'aime pas le mélange du php et du html, et comme ton html n'arrête pas d'appeler php, je ferais tout en php avec des echo du code html, et ce jusqu'à $compteur++. et en vitesse d'exécution je ne crois pas que tu perdras, au contraire

  11. #11
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Points : 40
    Points
    40
    Par défaut
    Salut,

    Je te remercie d'avoir pris le temps de lire mon code !!!
    Tu as bien analysé la situation. Comme je l'ai dit plus haut, j'ai repris un code existant et il est vrai, pas très propre.

    Qui plus est, je ne suis pas expert en php et j'apprends petit à petit avec des personnes comme toi, sur ce forum.

    Je bute sur une chose : je ne vois pas comment faire correspondre l'indice au lien (lien_image dans ma table) d'une photo.

    Quelqu'un a une idée ?

    y-a-t-il moyen de rediriger l'indice de mon tableau vers le champ lien_image de ma table mysql, de manière à ce que ma photo s'affiche en fonction de l'indice ?

    je suis planté...

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    c'est la petite fonction lien dont je te parlais avant

    sur le fond c'est simple :

    dans ta fonction tu entres les paramètres indice et galerie
    tu fais une boucle avec while ou for sur ta galerie
    et lorsque indice = $galerie['indice'] tu définis $lien = $galerie['lien_image']
    et tu retournes $lien
    tu peux utiliser la fonction count pour connaître le nombre de photos dans galerie

  13. #13
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Points : 40
    Points
    40
    Par défaut
    Merci pour l'info. mais je ne m'en sors pas pour créer la fonction (entrée des paramètres dans la fonction entre autres).
    De plus, je ne vois pas l'intérêt de la fonction car ça n'affichera pas mes photos; en effet, j'ai suivi tes conseils en affichant ma photo principale et les liens suivant et précédent en faisant ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <td width="15px" valign="center"><a href="photos.php?picture=<?=$id_prog;?>&selec=<?=$actif-1;?>"><img src="images/fleche_g.gif" alt="Précédent" style="margin-right:15px; border:none;" /></a></td>
    <td valign="center"><div align="center">
     
    	<img style="border:1px solid #c2c2c2" alt="Diaporama" src="<?php echo $actif; ?>">
     
    </div>
    </td>
    <td width="15px" valign="center"><a href="photos.php?picture=<?=$id_prog;?>&selec=<?=$actif+1;?>"><img src="images/fleche_d.gif" alt="Suivant" style="margin-left:15px; border:none;" /></a></td>
    Donc, vu que $actif est déterminée par le selec (qui est lui même l'indice de mon tableau), comment la photo va-t-elle s'afficher ?

    A moins que je n'aie loupé qqchose....

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="<?php echo lien($actif); ?>">
    Je te laisse ajouter les autres paramètres

    et la fonction lien retourne le lien en fonction de l'indice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function lien ($tableau, $actif)
    	{
    	foreach ($tableau as $element)
    		{
    		if ($element['indice'] == $actif) $lien = $element['lien_image'];
    		}
    	return $lien;
    Je souhaite rajouter une petite remarque : j'ai essayé de garder au mieux la structure de tes variables. Mais si j'avais du faire le tout moi-même, j'aurais fait de façon différente : au lieu de créer $galerie, j'aurais créé trois tableaux nommés $lien_image, $nom_image et $com_image et assigné comme suit : $lien_image[] = $rs['lien_image'] et pareil pour les autres. Cela crée des tableaux à indices (je ne sais plus le terme exact) au lieu de tableaux associatifs. De ce fait, pour accéder à un élément du tableau, il suffit de mettre $lien = $lien_image[$actif]. Pas besoin de fonction de recherche etc.

  15. #15
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Points : 40
    Points
    40
    Par défaut
    Salut Francis,
    Merci encore pour ton aide. ça fonctionne !
    J'ai adapté mes variables et j'arrive au résultat espéré.

    Cependant, en ce qui concerne la gestion des liens lorsque le selec est supérieur
    au nombre d'images ou egal à zero, j'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $request = mysql_query ("SELECT COUNT(*) FROM galery WHERE galery.idp='$id_prog'");
    $count = mysql_fetch_array($request);
     
    if(isset($_GET['selec']) && ($_GET['selec']) != "" && ($_GET['selec']) <= $count[0] && ($_GET['selec']) >"0"){$actif=$_GET['selec'];}
    elseif(isset($_GET['selec']) && ($_GET['selec']) > $count[0]){$actif = $count[0];}
    else{$actif = 1;}
    Je ne suis pas sur que ce soit la meilleure méthode. De plus, je souhaiterais éventuellement que le bouton "suivant" disparaisse lorsque j'arrive à la dernière photo et idem pour le bouton précédent lorsque je suis sur la première. Peux-tu me guider sur le sujet ? Je te remercie.

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    il y a beaucoup plus simple :
    ton bouton précédent est fait avec le lien suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="photos.php?picture=<?=$id_prog;?>&selec=<?=$actif-1;?>">
    transforme le en echo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a href="photos.php?picture=', $id_prog, '&amp;selec=', ($actif-1), '">';
    et tu y mets une condition d'affichage du bouton : l'indice de la photo active est supérieur à 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($actif > 1) echo ...
    Pareil pour le bouton suivant (rappel : count ou mysql_num_rows)

  17. #17
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Points : 40
    Points
    40
    Par défaut
    Impec. ça fonctionne très bien.

    Merci beaucoup de m'avoir accordé de ton temps et d'avoir été très patient !!!

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

Discussions similaires

  1. Gérer la navigation dans un diaporama PowerPoint
    Par Invité dans le forum Powerpoint
    Réponses: 6
    Dernier message: 01/06/2015, 16h08
  2. Navigation dans les tableaux
    Par pthichat dans le forum SWT/JFace
    Réponses: 0
    Dernier message: 28/11/2007, 14h15
  3. [Tableaux] Navigation dans un site
    Par jp76ers dans le forum Langage
    Réponses: 6
    Dernier message: 13/02/2007, 13h37

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