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 :

foreach, récupérer une ligne depuis le numéro de la cle


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut foreach, récupérer une ligne depuis le numéro de la cle
    Bonjour à tous et à toutes,
    Je revient vous demander un coup de main pour faire un petit diaporama car la je sèche.

    J'ai un premier array qui se nome $liens qui avec un foreach affiche des boutons.
    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
    Array
    (
        [2] => Danses Latines
        [4] => Danses Latines
        [5] => Danses Latines
        [7] => Danses Latines
        [9] => Danses Latines
        [10] => Danses Latines
        [11] => Danses Latines
        [12] => Sur Scène
        [13] => Costumes enfants
        [14] => Accessoires
        [15] => Danses de cabaret
        [16] => Danses Modernes
        [17] => Danses Rétro
        [19] => Sur Scène
    )
    J'en ai un second nommé $contenu_slide qui m'affiche les information sur les images
    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
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    Array
    (
        [2] => Array
            (
                [id] => 2
                [famille] => Danses Latines
                [lien_fam] => danses-latines
                [nom_image] => 1524069671_img-2518.jpg
                [produit] => Costume de danse latine.
                [ordre_aff_prod] => 20
            )
     
        [4] => Array
            (
                [id] => 4
                [famille] => Danses Latines
                [lien_fam] => danses-latines
                [nom_image] => 1524070923_img-2521.jpg
                [produit] => Costume de danse latine.
     
                [ordre_aff_prod] => 40
            )
     
        [5] => Array
            (
                [id] => 5
                [famille] => Danses Latines
                [lien_fam] => danses-latines
                [nom_image] => 1524071027_img-2531.jpg
                [produit] => Costume samba brésilienne
                [ordre_aff_prod] => 50
            )
     
        [7] => Array
            (
                [id] => 7
                [famille] => Danses Latines
                [lien_fam] => danses-latines
                [nom_image] => 1524071681_img-2539.jpg
                [produit] => Costume de danse latine.
                [ordre_aff_prod] => 70
            )
     
        [9] => Array
            (
                [id] => 9
                [famille] => Danses Latines
                [lien_fam] => danses-latines
                [nom_image] => 1524154003_img-2553.jpg
                [produit] => Costume de danse latine.
                [ordre_aff_prod] => 110
            )
     
        [10] => Array
            (
                [id] => 10
                [famille] => Danses Latines
                [lien_fam] => danses-latines
                [nom_image] => 1524236417_img-2557.jpg
                [produit] => Costume de danse latine.
                [ordre_aff_prod] => 90
            )
     
        [11] => Array
            (
                [id] => 11
                [famille] => Danses Latines
                [lien_fam] => danses-latines
                [nom_image] => 1524236451_img-2562.jpg
                [produit] => Costume de danse latine.
                [ordre_aff_prod] => 100
            )
     
        [12] => Array
            (
                [id] => 12
                [famille] => Sur Scène
                [lien_fam] => sur-scene
                [nom_image] => 12_5511647411217673904-n.jpg
                [produit] => Costume de scène
                [ordre_aff_prod] => 20
            )
     
        [13] => Array
            (
                [id] => 13
                [famille] => Costumes enfants
                [lien_fam] => costumes-enfants
                [nom_image] => 1524897555_fullsizeoutput-146d.jpeg
                [produit] => Costume pour enfant
                [ordre_aff_prod] => 10
            )
     
        [14] => Array
            (
                [id] => 14
                [famille] => Accessoires
                [lien_fam] => accessoires
                [nom_image] => 14_7475690067495711692-n.jpg
                [produit] => test
                [ordre_aff_prod] => 10
            )
     
        [15] => Array
            (
                [id] => 15
                [famille] => Danses de cabaret
                [lien_fam] => danses-de-cabaret
                [nom_image] => 1524898303_jupes-retro.jpg
                [produit] => test
                [ordre_aff_prod] => 10
            )
     
        [16] => Array
            (
                [id] => 16
                [famille] => Danses Modernes
                [lien_fam] => danses-modernes
                [nom_image] => 1524898326_p1340979.jpg
                [produit] => test
                [ordre_aff_prod] => 10
            )
     
        [17] => Array
            (
                [id] => 17
                [famille] => Danses Rétro
                [lien_fam] => danses-retro
                [nom_image] => 1524898349_p1350213.jpg
                [produit] => test
                [ordre_aff_prod] => 10
            )
    Le but étant quand cliquant sur le bouton avec l'id 2 par exemple que l'image avec l'id 2 s'affiche hors la c'est l'image de la deuxième ligne qui s'affiche, donc la quatre.
    Qui peut me dire comment faire ?
    Voici mon code
    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
    <?php
    $liens = array();
    $contenu_slide = array();
    $affichage_img = $bdd->prepare("SELECT id, famille, lien_fam, nom_image, produit,ordre_aff_prod FROM produits_effervescence 
    		WHERE selection = :sel ORDER BY id ASC LIMIT :debut, :fin");
    		$affichage_img->bindValue(':sel', 1, PDO::PARAM_INT);
    		$affichage_img->bindValue(':debut', 0, PDO::PARAM_INT);
    		$affichage_img->bindValue(':fin', 14, PDO::PARAM_INT);
    		try
    			{
    				$affichage_img->execute();
    				$nombre_img = $affichage_img->rowCount();
    			}
    		catch (PDOException $e) {
    			echo 'Error : ' . $e->getMessage();
    			die();
    			}
     
    		if ($nombre_img > 0)
    			{
    				while ($retour_anim = $affichage_img->fetch())
    					{
    						$liens[$retour_anim['id']] = $retour_anim['famille'];
    						$contenu_slide[$retour_anim['id']] = $retour_anim;
    					}
    			}
    		$affichage_img->closeCursor();
    echo'<div id="liens">';
    		foreach ($liens as $key => $resultat_values)
    			{
    				echo'<div class="tabs_vert"><a href="#wrap'.$key.'"><span>'.stripslashes($liens[$key]).'</span></a></div>';
    			}	
    		echo'</div>';
    		echo'<section id="article35">
    			<div id="demoWrap">';
    				foreach ($liens as $clef_img => $valeurs_liens)
    					{
    						echo'<a id="wrap'.$clef_img.'" class="ancre"></a>';
    					}
    				echo'<div id="imgs"><ul>';
    						foreach($contenu_slide as $clef_slide => $values)
    							{
    								echo'<li><div id="slide'.$values['id'].'"><img src="'.ROOTPATH.'/images/produits/min/'.$values['nom_image'].'" 
    								alt="'.stripslashes(trim($values['produit'])).'"/><p><a href="'.ROOTPATH.'/nos-costumes.'.$values['lien_fam'].'.html" title="Accédez à la page nos costumes de '.stripslashes($values['famille']).'."><span class="ttgros courrier orange">'.stripslashes(trim($values['famille'])).'</span></a></p>
    								<hr color="#05953e" />
    								<p class="blanc">'.stripslashes(nl2br($values['produit'])).'</p></div></li>';
    							}
    				echo'</ul></div>
    			</div>
    		</section>';
    Merci de votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Regarde le code HTML généré.

  3. #3
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Salut, je ne vois pas de problème sur ta liste HTML qui devrait donner un truc dans ce goût
    Code HTML : 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
     
    <div id="imgs">
    	<ul>
    		<li><div id="slide5">
    			<img src="images/produits/min/toto.jpeg" alt="toto"/>
    				<p>
    					<a href="/nos-costumes.html" title="Accédez à la page nos costumes de tata">
    						<span class="ttgros courrier orange">tutu</span>
    					</a>
    				</p>
    				<hr color="#05953e" />
    				<p class="blanc">toutou</p>
    			</div>
    		</li>
    		<li><div id="slide6">
    			<img src="images/produits/min/toto.jpeg" alt="toto"/>
    				<p>
    					<a href="/nos-costumes.html" title="Accédez à la page nos costumes de tata">
    						<span class="ttgros courrier orange">tutu</span>
    					</a>
    				</p>
    				<hr color="#05953e" />
    				<p class="blanc">toutou</p>
    			</div>
    		</li>
    		<li><div id="slide7">
    			<img src="images/produits/min/toto.jpeg" alt="toto"/>
    				<p>
    					<a href="/nos-costumes.html" title="Accédez à la page nos costumes de tata">
    						<span class="ttgros courrier orange">tutu</span>
    					</a>
    				</p>
    				<hr color="#05953e" />
    				<p class="blanc">toutou</p>
    			</div>
    		</li>
    	</ul>
    </div>

    Ce qui me chagrine dès le départ, c'est la construction de ton tableau PHP avec des "trous"...
    J'aurais plutôt fabriqué un tableau de tableaux associatifs, pour bien distinguer des le départ le rang du tuple dans le tableau, et l'id récupéré de la base...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $liens=array();
    $i=0;
    while ($retour_anim = $affichage_img->fetch()){
    	$liens[$i]['id'] = $retour_anim['id'];
    	$liens[$i]['famille'] = $retour_anim['famille'];
    	//$contenu_slide[$retour_anim['id']] = $retour_anim;
    	$i++;
    }
    $liens donnera
    array
    (
    [0] => array ([id] => 2 , [famille] => 'Danses Latines' ),
    [1] => array ([id] => 4 , [famille] => 'Danses Latines' ),
    [2] => array ([id] => 5 , [famille] => 'Danses Latines' ),
    [3] => array ([id] => 12 , [famille] => 'Sur scène' )
    )
    et on l'égrenne de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($liens as $lien){
    	echo $lien['id'].' => '.$lien['famille'].'<br/>';
    }
    Bien sûr, la remarque vaut aussi pour le tableau $contenu_slides !
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pourquoi faire simple quand on peut faire compliqué...

    1- Avant tout, il faut prendre du recul, et ouvrir les yeux.

    2- On constate que :
    • $liens reprend une portion de $contenu_slide (id, famille). Donc, il ne sert à rien !
    • l'index est aussi l'id. Là non, plus, pas d'intérêt.
    • $contenu_slide ressemble comme deux gouttes d'eau à $affichage_img->fetchAll() !
      (en le remplaçant ci-dessous par $img_datas)


    3- Donc : Un traitement très CLASSIQUE du résultat de la requête est amplement suffisant, et plus simple !

    SOLUTION 1 :
    On va utiliser un seul array, avec fetchAll() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $img_datas	= $affichage_img->fetchAll(); // array de tous les résultats
    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
    <?php
    	// requête
    	$affichage_img = $bdd->prepare("SELECT id, famille, lien_fam, nom_image, produit, ordre_aff_prod 
    	FROM produits_effervescence 
    	WHERE selection = :sel 
    	ORDER BY id ASC LIMIT :debut, :fin");
    	$affichage_img->bindValue(':sel', 1, PDO::PARAM_INT);
    	$affichage_img->bindValue(':debut', 0, PDO::PARAM_INT);
    	$affichage_img->bindValue(':fin', 14, PDO::PARAM_INT);
    	try
    	{
    		$affichage_img->execute();
    		$nombre_img = $affichage_img->rowCount();
    	}
    	catch (PDOException $e) {
    		echo 'Error : ' . $e->getMessage();
    		die();
    	}
     
    	if ($nombre_img > 0)
    	{
    		$img_datas = $affichage_img->fetchAll(); // array de tous les résultats
     
    		// LIENS
    	echo '<div id="liens">';
    		foreach ($img_datas as $img_data)
    		{
    			echo '<div class="tabs_vert"><a href="#wrap'.$img_data['id'].'"><span>'.htmlspecialchars($img_data['famille']).'</span></a></div>';
    		}	
    	echo '</div>';
     
    	echo '<section id="article35">
    		<div id="demoWrap">';
    		// ANCRES
    		foreach ($img_datas as $img_data)
    		{
    			echo '<a id="wrap'.$img_data['id'].'" class="ancre"></a>';
    		}
    		echo '<div id="imgs"><ul>';
     
    		// SLIDER IMAGES
    		foreach ($img_datas as $img_data)
    		{
    			echo '<li><div id="slide'.$img_data['id'].'">
    			<img src="'.ROOTPATH.'/images/produits/min/'.htmlspecialchars($img_data['nom_image']).'" alt="'.htmlspecialchars($img_data['produit']).'"/>
    			<p>
    			   <a href="'.ROOTPATH.'/nos-costumes.'.htmlspecialchars($img_data['lien_fam']).'.html" title="Accédez à la page nos costumes de '.htmlspecialchars($img_data['famille']).'.">
    			   <span class="ttgros courrier orange">'.htmlspecialchars($img_data['famille']).'</span></a>
    			</p>
    			<hr color="#05953e" />
    			<p class="blanc">'.htmlspecialchars(nl2br($img_data['produit'])).'</p></div></li>';
    		}
    			echo '</ul></div>
    		</div>
    	</section>';
    	}
    On protège à l'affichage avec htmlspecialchars().

    4- Je répète : Regarde le code HTML généré ("Ctrl" + "U"), pour vérifier qu'il est CORRECT.

    5- A priori, s'il n'y a pas de problème dans le code HTML, c'est qu'il y en a un dans le code (JavaScript ?) qui permet d'afficher la bonne image en cliquant sur un lien.
    Or, tu ne montres pas ce code.
    Dernière modification par Invité ; 01/05/2018 à 11h07.

  5. #5
    Invité
    Invité(e)
    Par défaut
    SOLUTION 2 :
    au lieu de fetchAll(), on utilise fetch() (lecture ligne par ligne).

    Là aussi, c'est très CLASSIQUE, avec une astuce :
    1. on CONSTRUIT d'abord les données à afficher (on les enregistre dans des array)
    2. AVANT de les afficher.

    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
    	if ($nombre_img > 0)
    	{
    		$img_liens = array();
    		$img_ancres = array();
    		$img_slides = array();
     
    // CONSTRUCTION des données à afficher (on les enregistre dans des array)
    	  while( $img_data = $affichage_img->fetch() ) // pour chaque ligne de résultat
    	  {
    		$img_liens[] = '<div class="tabs_vert"><a href="#wrap'.$img_data['id'].'"><span>'.htmlspecialchars($img_data['famille']).'</span></a></div>';
    		$img_ancres[] = '<a id="wrap'.$img_data['id'].'" class="ancre"></a>';
    		$img_slides[] = '<li><div id="slide'.$img_data['id'].'"><img src="'.ROOTPATH.'/images/produits/min/'.htmlspecialchars($img_data['nom_image']).'" 
    			alt="'.htmlspecialchars(trim($img_data['produit'])).'"/><p><a href="'.ROOTPATH.'/nos-costumes.'.$img_data['lien_fam'].'.html" title="Accédez à la page nos costumes de '.htmlspecialchars($img_data['famille']).'."><span class="ttgros courrier orange">'.htmlspecialchars(trim($img_data['famille'])).'</span></a></p>
    			<hr color="#05953e" />
    			<p class="blanc">'.htmlspecialchars(nl2br($img_data['produit'])).'</p></div></li>';
    	  }
     
    // AFFICHAGE
    		// LIENS
    	echo '<div id="liens">';
    		echo implode( "\n", $img_liens);
    	echo '</div>';
     
    	echo '<section id="article35">
    		<div id="demoWrap">';
    		// ANCRES
    		echo implode( "\n", $img_ancres);
    		echo '<div id="imgs"><ul>';
    		// SLIDER IMAGES
    		echo implode( "\n", $img_slides);
    		echo '</ul></div>
    		</div>
    	</section>';
    	}
    Avantages :
    • avec fetchAll, (et sans l'astuce !*)on était obligé de parcourir 3 fois l'array.
    • avec fetch, on ne fait ici qu'un seul while.

    SOLUTION 3 :
    * car avec la même astuce (enregistrement dans des array avant l'affichage), on peut, avec fetchAll(), faire la même chose qu'avec le fetch() !
    Il suffit de remplacer dans le code ci-dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	  while( $img_data = $affichage_img->fetch() ) // pour chaque ligne de résultat
    	  {
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	  $img_datas = $affichage_img->fetchAll();
    	  foreach( $img_datas as $img_data ) 
    	  {
    Dernière modification par Invité ; 01/05/2018 à 11h13.

  6. #6
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Oui, Jreaux, j'en étais là aussi. Voici ce que j'avais pondu (sous forme d'exemple générique que tout le monde peut comprendre, et qui rend hommage à tes 2 chiennes, Jreaux ).

    C'est un problème qu'on rencontre très souvent dès qu'on avance.
    Pour autant, on ne sait pas quoi taper dans Google, donc pas si simple.
    Je veux construire une liste organisée comme suit :

    CHAT

    ---Chat de gouttière
    ---Chat siamois

    CHIEN

    ---Berger allemand
    ---Cocker
    ---Dalmatien

    Dans la base, on a une table espece(Chien, Chat etc.) et une table race (Siamois, Berger allemand etc.) qui distribue les espèces.

    Une requête unique avec une jointure retourne bien la distribution :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select r.id as race_id, r.nom as race_nom,r.espece_id, e.nom as espece_nom
    from race r
    inner join espece e on r.espece_id=e.id
    order by e.nom, r.nom;

    et donnera ce tableau PHP $data
    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
    Array(
    	[0] => Array(
    		[race_id] => 204
    		[race_nom] => Chat de gouttière
    		[espece_id] => 72
    		[espece_nom] => Chat
        )
    	[1] => Array(
    		[race_id] => 203
    		[race_nom] => Siamois
    		[espece_id] => 72
    		[espece_nom] => Chat
        )
    	[2] => Array(
    		[race_id] => 202
    		[race_nom] => Berger allemand
    		[espece_id] => 25
    		[espece_nom] => Chien
        )
    	[3] => Array(
    		[race_id] => 201
    		[race_nom] => Cocker
    		[espece_id] => 25
    		[espece_nom] => Chien
            )
        [4] => Array(
    		[race_id] => 200
    		[race_nom] => Dalmatien
    		[espece_id] => 25
    		[espece_nom] => Chien   
        )
    )
    Et voici le PHP qui gomme la redondance des données "espèces" de la requête SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //le PHP donnera ensuite ceci (technique par passage de témoin)
    $espece_id = "";
    foreach($data as $row){
    	//on change de catégorie ?
    	if($row['espece_id']!=$espece_id){
    		//on affiche l'espèce
    		echo $row['espece_nom'].'<br/><br/>';
    		//puis on passe le témoin
    		$espece_id=$row['espece_id'];
    	}
    	//dans tous les cas, on affiche la race
    	echo '---'.$row['race_nom'].'<br/>';
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut
    Un grand merci à tous pour vos réponses.
    J'essaye pour l'instant de mettre en œuvre la solution 2 de jreaux62 avec le fetch().
    Je rencontre toujours le même problème.
    Il n'y a pas de js juste du css et peut-être que le bug viens de la.
    Voici la partie du css ou il y a des foreach
    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
    <?php session_start();
    header("Content-type: text/css");
    include('../includes/connexion_ajax.php');
    $liens_css = array();
    $retour_maquette_css = $bdd->prepare("SELECT id FROM produits_effervescence WHERE selection = :sel ORDER BY id ASC LIMIT :debut, :fin");
    $retour_maquette_css->bindValue(':sel', 1, PDO::PARAM_INT);
    $retour_maquette_css->bindValue(':debut', 0, PDO::PARAM_INT);
    $retour_maquette_css->bindValue(':fin', 14, PDO::PARAM_INT);
    try {
    		$retour_maquette_css->execute();
    	}
    catch (PDOException $e)
    	{
    	   echo 'Error : ' . $e->getMessage();
    	   die();
    	}
    while ($res_maquette_css = $retour_maquette_css->fetch())
    	{
    		$liens_css[$res_maquette_css['id']] = $res_maquette_css['id'];
    	}
    end($liens_css);
    $dernier_liens_css = key($liens_css);
    $retour_maquette_css->closeCursor();
     
    <?php
    foreach ($liens_css as $cle_css => $val_css)
    	{?>
    		#slide<?php echo''.$cle_css.''; if ($liens_css[$cle_css] != $dernier_liens_css) echo',';?> 
    <?php } ?>
     
    foreach ($liens_css as $key2 => $values_key2)
    	{?>#article35 #demoWrap #wrap<?php echo''.$key2.''?>:target ~ #liens a[href="#wrap<?php echo''.$key2.''?>"]<?php if ($liens_css[$key2] != $dernier_liens_css) echo',';?>
    <?php	}	?>
    Essai avec la solution 2 même constat, je pense que le bug vient des css.
    Si quelqu'un veut le script complet pour son site je le donnerais quand il sera fonctionnel.

    En tout cas un grand merci à vous.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- Je pense que mes exemples sont CLAIRS...
    Alors pourquoi tu les passes au MIXER ??
    Ton code n'a plus beaucoup de points communs avec ce que j'ai donné...

    Je ne comprends pas... Il suffisait de faire un copier-coller...

    2- CSS : mais pourquoi diable modifier du CSS ici ????
    Tu ne connais pas les classes CSS ?

  9. #9
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut
    feuille de style, pour mettre en page, couleur, largeur des div etc...
    Pour mon cas c'est des css dynamique en php.

  10. #10
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut
    Tes codes sont super claire, rien à dire, je ne mixe rien mais j'essaie de comprendre pourquoi ça fonctionne pas correctement.
    Voici l'url si tu veux voir le résultat https://costume-spectacle-danse.fr/nos-costumes.html
    Voici ma page php avec ton code.
    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
    <?php
    $affichage_img = $bdd->prepare("SELECT id, famille, lien_fam, nom_image, produit,ordre_aff_prod FROM produits_effervescence 
    		WHERE selection = :sel ORDER BY id ASC LIMIT :debut, :fin");
    		$affichage_img->bindValue(':sel', 1, PDO::PARAM_INT);
    		$affichage_img->bindValue(':debut', 0, PDO::PARAM_INT);
    		$affichage_img->bindValue(':fin', 14, PDO::PARAM_INT);
    		try
    			{
    				$affichage_img->execute();
    				$nombre_img = $affichage_img->rowCount();
    			}
    		catch (PDOException $e) {
    			echo 'Error : ' . $e->getMessage();
    			die();
    			}
     
    		if ($nombre_img > 0)
    			{
    				$img_liens = array();
    				$img_ancres = array();
    				$img_slides = array();
    			}
     
    		// CONSTRUCTION des données à afficher (on les enregistre dans des array)
    		while( $img_data = $affichage_img->fetch() ) // pour chaque ligne de résultat
    		  {
    			$img_liens[] = '<div class="tabs_vert"><a href="#wrap'.$img_data['id'].'"><span>'.htmlspecialchars($img_data['famille']).'</span></a></div>';
    			$img_ancres[] = '<a id="wrap'.$img_data['id'].'" class="ancre"></a>';
    			$img_slides[] = '<li><div id="slide'.$img_data['id'].'"><img src="'.ROOTPATH.'/images/produits/min/'.htmlspecialchars($img_data['nom_image']).'" 
    				alt="'.htmlspecialchars(trim($img_data['produit'])).'"/><p><a href="'.ROOTPATH.'/nos-costumes.'.$img_data['lien_fam'].'.html" title="Accédez à la page nos costumes de '.htmlspecialchars($img_data['famille']).'."><span class="ttgros courrier orange">'.htmlspecialchars(trim($img_data['famille'])).'</span></a></p>
    				<hr color="#05953e" />
    				<p class="blanc">'.htmlspecialchars(nl2br($img_data['produit'])).'</p></div></li>';
    		  }
    		$affichage_img->closeCursor();
    		echo'<div id="liens">';
    		echo implode( "\n", $img_liens);	
    		echo'</div>';
    		echo'<section id="article35">
    			<div id="demoWrap">';
    			// ANCRES
    			echo implode( "\n", $img_ancres);
    				echo'<div id="imgs"><ul>';
    				echo implode( "\n", $img_slides);
    				echo'</ul></div>
    			</div>
    		</section>';
    ?>

  11. #11
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut
    C'est en css que je fait défiler les images de gauche à droite en récupérant l'id qui est dans l'url.
    Je pense que l'id est mal interprété dans mon css et c'est pour ça que ça bug.

  12. #12
    Invité
    Invité(e)
    Par défaut
    A mon avis, c'est dans le code JavaScript qu'il faut regarder.
    A moins que les slides se fassent en CSS uniquement ?

    J'ai dû zapper un truc, là...

  13. #13
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut
    oui le slide se fait uniquement en css pas de js.
    Voici l'array $img_liens
    Array
    (
    [0] => Danses Latines

    [1] => Danses Latines

    [2] => Danses Latines

    [3] => Danses Latines

    [4] => Danses Latines

    [5] => Danses Latines

    [6] => Danses Latines

    [7] => Sur Scène

    [8] => Costumes enfants

    [9] => Accessoires

    [10] => Danses de cabaret

    [11] => Danses Modernes

    [12] => Danses Rétro

    [13] => Sur Scène

    )
    l'array $img_ancres et $img_slides[] correspondent, il on le même numéro de clé mais l'array $liens_css ne correspond plus et c'est normale puisque j'ai tout modifié.
    Comment faire pour qu'il corresponde au même clef ?

    Array $liens_css
    (
    [2] => 2
    [4] => 4
    [5] => 5
    [7] => 7
    [9] => 9
    [10] => 10
    [11] => 11
    [12] => 12
    [13] => 13
    [14] => 14
    [15] => 15
    [16] => 16
    [17] => 17
    [19] => 19
    )

  14. #14
    Invité
    Invité(e)
    Par défaut
    Alors montre le code CSS concerné.

  15. #15
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut
    J'ai réussi à avoir le même tableau en css que sur la page php
    Voici $liens_css
    Array
    (
    [0] => 2
    [1] => 4
    [2] => 5
    [3] => 7
    [4] => 9
    [5] => 10
    [6] => 11
    [7] => 12
    [8] => 13
    [9] => 14
    [10] => 15
    [11] => 16
    [12] => 17
    [13] => 19
    )
    Je te met le script complet du css
    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
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    <?php session_start();
    header("Content-type: text/css");
    include('../includes/connexion_ajax.php');
    $liens_css = array();
    $retour_maquette_css = $bdd->prepare("SELECT id FROM produits_effervescence WHERE selection = :sel ORDER BY id ASC LIMIT :debut, :fin");
    $retour_maquette_css->bindValue(':sel', 1, PDO::PARAM_INT);
    $retour_maquette_css->bindValue(':debut', 0, PDO::PARAM_INT);
    $retour_maquette_css->bindValue(':fin', 14, PDO::PARAM_INT);
    try {
    		$retour_maquette_css->execute();
    	}
    catch (PDOException $e)
    	{
    	   echo 'Error : ' . $e->getMessage();
    	   die();
    	}
    while ($res_maquette_css = $retour_maquette_css->fetch())
    	{
    		$liens_css[] = $res_maquette_css['id'];
    	}
    end($liens_css);
    $dernier_liens_css = key($liens_css);
    $retour_maquette_css->closeCursor();
    ?>
     
    #article35{width:850px;}
    #article35 #demoWrap{width:11900px;}
    #article35 #demoWrap #imgs ul li{width:850px;}
    #article35 #demoWrap #wrap1:target ~ #imgs{margin-left:0px;}
    #article35 #demoWrap #wrap2:target ~ #imgs{margin-left:-850px;}
    #article35 #demoWrap #wrap3:target ~ #imgs{margin-left:-1700px;}
    #article35 #demoWrap #wrap4:target ~ #imgs{margin-left:-2550px;}
    #article35 #demoWrap #wrap5:target ~ #imgs{margin-left:-3400px;}
    #article35 #demoWrap #wrap6:target ~ #imgs{margin-left:-4250px;}
    #article35 #demoWrap #wrap7:target ~ #imgs{margin-left:-5100px;}
    #article35 #demoWrap #wrap8:target ~ #imgs{margin-left:-5950px;}
    #article35 #demoWrap #wrap9:target ~ #imgs{margin-left:-6800px;}
    #article35 #demoWrap #wrap10:target ~ #imgs{margin-left:-7650px;}
    #article35 #demoWrap #wrap11:target ~ #imgs{margin-left:-8500px;}
    #article35 #demoWrap #wrap12:target ~ #imgs{margin-left:-9350px;}
    #article35 #demoWrap #wrap13:target ~ #imgs{margin-left:-10200px;}
    #article35 #demoWrap #wrap14:target ~ #imgs{margin-left:-11050px;}
     
    #article35{
    	height:100%;
    	margin:0 auto;
    	background:transparent; 
    	overflow:hidden;
    }
    #article35 #demoWrap{
    	position:relative;
    	height:auto;
    	display:inline-block;
    }
    #article35 #demoWrap a.ancre{
    	display:none;
    }
    #article35 #demoWrap #imgs{
    -webkit-transition:all 1s ease;
       -moz-transition:all 1s ease;
        -ms-transition:all 1s ease;
         -o-transition:all 1s ease;
            transition:all 1s ease;
    }
    #article35 #demoWrap #imgs ul li{
    	position:relative;
    	float:left;
    	text-align:center;
    	height:100%;
    	padding:0 0 10px 0;
    	list-style:none;
    	margin-bottom:50px;
    }
    <?php
    foreach ($liens_css as $cle_css => $val_css)
    	{?>
    		#slide<?php echo''.$cle_css.''; if ($liens_css[$cle_css] != $dernier_liens_css) echo',';?> 
    <?php } ?>
    {
    	padding:20px 0 10px 0;
    }
    #article35 #demoWrap #imgs ul li::after,
    #article35 #demoWrap #imgs ul li::before{
    content:"";
    position:absolute;
    top:95%;
    left:5%;
    width:90%;
    height:4px;
     
    -webkit-border-radius:50%;
       -moz-border-radius:50%;
            border-radius:50%;
     
    -webkit-box-shadow:0 50px 5px rgba(0,0,0,.7);
       -moz-box-shadow:0 50px 5px rgba(0,0,0,.7);
            box-shadow:0 50px 5px rgba(0,0,0,.7);
    }
    #article35 #demoWrap #imgs ul li::after{
    top:95%;
    left:5%;
    width:90%;
    height:2px;
     
    -webkit-box-shadow:0 52px 3px rgba(0,0,0,.8);
       -moz-box-shadow:0 52px 3px rgba(0,0,0,.8);
            box-shadow:0 52px 3px rgba(0,0,0,.8);
    }
    #liens {
    z-index:100;
    width:100%;
    text-align:center;
    }
     
    #liens a span img {
    	width:auto;
    	max-width:100%;
    	border:none;
    	filter: blur(3px);
            -webkit-filter: blur(3px);
            -moz-filter: blur(3px);
            -o-filter: blur(3px);
            -ms-filter: blur(3px);
    }
    #liens a span img:hover,
    #liens a span img:focus{
    filter: blur(0);
            -webkit-filter: blur(0);
            -moz-filter: blur(0);
            -o-filter: blur(0);
            -ms-filter: blur(0);
    }
    @media only screen and (max-width: 362px) {
    #liens {display:none;}
    }
    #liens ul li:nth-child(1) a,
    <?php
    foreach ($liens_css as $key2 => $values_key2)
    	{?>#article35 #demoWrap #wrap<?php echo''.$key2.''?>:target ~ #liens a[href="#wrap<?php echo''.$key2.''?>"]<?php if ($liens_css[$key2] != $dernier_liens_css) echo',';?>
    <?php	}	?>
    {
    background:#000;
    -webkit-box-shadow:0 -1px 0 rgba(255,255,255,.5) inset;
       -moz-box-shadow:0 -1px 0 rgba(255,255,255,.5) inset;
            box-shadow:0 -1px 0 rgba(255,255,255,.5) inset;
    }
    Il y a deux foreach qui ne pointe pas sur la bonne clé

  16. #16
    Invité
    Invité(e)
    Par défaut
    Ce code se trouve où ? Dans quel fichier ?

    D'autre part, si ce n'est pas un fichier css externe, il manque les balises <style> ... </style>.

    [EDIT] Trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <link rel="stylesheet" title="Feuille de style" href="https://costume-spectacle-danse.fr/css/animation_nos_costumes.php" type="text/css" media="screen" />
    Dernière modification par Invité ; 02/05/2018 à 18h38.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bon. Je sais d'où vient le problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($res_maquette_css = $retour_maquette_css->fetch())
    	{
    		$liens_css[] = $res_maquette_css['id'];
    	}
    OK.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    foreach ($liens_css as $cle_css => $val_css)
    	{?>
    		#slide<?php echo''.$cle_css.''; if ($liens_css[$cle_css] != $dernier_liens_css) echo',';?> 
    <?php } ?>
    Non. Ce n'est pas ça.
    • $cle_css ne sert à rien ici : c'est l'index de l'array (qui n'a rien à voir avec l'id de l'image en bdd)
    • $val_css et $liens_css[$cle_css], c'est pareil ! Et ça vaut l'id de l'image en bdd !


    DONC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    foreach ($liens_css as $key => $id_img)
    	{?>
    		#slide<?php echo''.$id_img.''; if ($key != $dernier_liens_css) echo',';?> 
    <?php } ?>
    Idem plus loin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #liens ul li:nth-child(1) a,
    <?php
    foreach ($liens_css as $key => $id_img)
    	{?>#article35 #demoWrap #wrap<?php echo''.$id_img.''?>:target ~ #liens a[href="#wrap<?php echo''.$id_img''?>"]<?php if ($key != $dernier_liens_css) echo',';?>
    <?php	}	?>
    Dernière modification par Invité ; 02/05/2018 à 18h42.

  18. #18
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut
    Il est bien en externe et fonctionnel.
    Le seul souci qui persiste depuis le début c'est que quand je sélectionne le bouton [0] => 2 par exemple c'est l'image qui est en deuxième ligne dans le tableau $liens_css donc [1] => 4 qui s'affiche.
    Si je sélectionne [1] => 4 c'est [3] => 7 qui s'affiche etc... je sais pas si je suis asse clair ? essaie en ligne tu vas comprendre.

  19. #19
    Invité
    Invité(e)
    Par défaut
    Je t'ai donné la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    foreach ($liens_css as $key => $id_img)
    	{?>
    		#slide<?php echo''.$id_img.''; if ($key != $dernier_liens_css) echo',';?> 
    <?php } ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #liens ul li:nth-child(1) a,
    <?php
    foreach ($liens_css as $key => $id_img)
    	{?>#article35 #demoWrap #wrap<?php echo''.$id_img.''?>:target ~ #liens a[href="#wrap<?php echo''.$id_img''?>"]<?php if ($key != $dernier_liens_css) echo',';?>
    <?php	}	?>
    N.B. Tu aurais dû renommer $dernier_liens_css en $liens_css_last_key (dernier index de l'array $liens_css)
    Ca aurait été plus clair.

  20. #20
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut
    J'ai vu après avoir posté, j'ai fait la modif mais c'est pareil.
    Il manquait un point après echo''.$id_img que j'ai rajouté , c'est pareil. Je suis en train de devenir fou. comment c'est possible de ne pas réussir à pointer sur la clé ? ARRRRR

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème de selection d'une ligne avec !
    Par aalex_38 dans le forum VBA Word
    Réponses: 4
    Dernier message: 11/09/2009, 10h18
  2. Problème avec le passage à la ligne dans une Textbox
    Par iFlo1 dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 22/03/2009, 13h47
  3. problème avec les sauts de ligne dans une string
    Par hexdoc dans le forum Langage
    Réponses: 6
    Dernier message: 02/05/2008, 15h28
  4. [HTML] comment récupérer une ligne d'un tableau avec HTML?
    Par jaafarerraji dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 01/10/2007, 00h21
  5. Récupérer une ligne aléatoire avec fgets
    Par Alexbad dans le forum C
    Réponses: 20
    Dernier message: 30/07/2006, 23h53

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