galerie d'image par modulo

Eléphant du PHP | 257 Messages

29 janv. 2017, 16:34

Bonjour j'essaie de réaliser une mise a la ligne des images par ligne de 4. La j'ai 6 images en une ligne droit alors que je devrais avoir 4 sur une ligne et deux en dessous?, je vois pas mon erreur. une petite aide serais la bienvenue .
<?php

      $photo_1 = $connection->prepare('SELECT * FROM photo_profil WHERE id_membre=:id_membre');
      $photo_1->execute(array(':id_membre'=>$detail));
$i=0;
$max=4; //nb d'entrées par ligne
 
//on boucle pour sauter de ligne
while($data = $photo_1->fetch(PDO::FETCH_OBJ)){

if ($i > 0 && $i % 4 == 0){
        echo '</tr><tr>';
    }
    echo "<td>"; 
	
      vignette('image_profil/'.$data->chemin.'',185, 135);
      redim('image_profil/'.$data->chemin.'', 600, 450);	
	  ?>
      <a class="fancybox" rel="gallery1" href="<?php echo'MINI1image_profil/'.$data->chemin.''; ?>" title="">
      <img src="<?php echo'MINIimage_profil/'.$data->chemin.''; ?>" border="0" alt="" class="blanc" />
      <?PHP
	echo"</td>";

    $i++;
    }
    echo "</tr>";

 
 ?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 févr. 2017, 12:49

salut,

ton code semble fonctionnel. tu n'as pas fermé la balise "a" dans la boucle et il n'y a pas de <tr> (avant ce code ?).

j'ai testé avec succès ce code
<?php
// en commentaire parce que je n'ai pas la base
//$photo_1 = $connection->prepare('SELECT chemin FROM photo_profil WHERE id_membre=:id_membre');
//$photo_1->execute(array(':id_membre'=>$detail));

$i=0;
$max=4; //nb d'entrées par ligne

//on boucle pour sauter de ligne, en commentaire parce que pas d'accède base
//while($data = $photo_1->fetch(PDO::FETCH_OBJ)){
// création d'un object standard pour remplir un tableau qui sert à tester la boucle foreach qui remplace le while (même principe)
$o = new stdClass();
$o->chemin = 'toto';
$d = [$o,$o,$o,$o,$o,$o,$o,$o,$o,$o];
echo '<tr>';
foreach ($d as $data) {
    // utilisation de la variable $max que tu définis plus haut
    if ($i > 0 && $i % $max == 0) {
        echo '</tr><tr>';
    }
    // en commentaire parce que je n'ai pas les fonctions
    //vignette('image_profil/'.$data->chemin.'', 185, 135);
    //redim('image_profil/'.$data->chemin.'', 600, 450);
    // utilisation de la syntaxe heredoc c'est un peu plus clair
    echo <<<html
    <td>
        <a class="fancybox" rel="gallery1" href="MINI1image_profil/{$data->chemin}" title="">
            <img src="MINIimage_profil/{$data->chemin}" border="0" alt="" class="blanc" />
        </a>
    </td>
    
html;
    $i++;
}
echo '</tr>';
Donc logiquement celui ci devrait fonctionner
<?php
$photo_1 = $connection->prepare('SELECT chemin FROM photo_profil WHERE id_membre=:id_membre');
$photo_1->execute(array(':id_membre'=>$detail));

$i=0;
$max=4; //nb d'entrées par ligne

//on boucle pour sauter de ligne
while($data = $photo_1->fetch(PDO::FETCH_OBJ)){

echo '<tr>';
foreach ($d as $data) {
    if ($i > 0 && $i % $max == 0) {
        echo '</tr><tr>';
    }
    vignette('image_profil/'.$data->chemin.'', 185, 135);
    redim('image_profil/'.$data->chemin.'', 600, 450);
    echo <<<html
    <td>
        <a class="fancybox" rel="gallery1" href="MINI1image_profil/{$data->chemin}" title="">
            <img src="MINIimage_profil/{$data->chemin}" border="0" alt="" class="blanc" />
        </a>
    </td>

html;
    $i++;
}
echo '</tr>';
regarde le code html qui est généré pour être certain qu'il soit conforme à ce que tu attends.

après il faut déboguer pour savoir ce que contiennent les variables au moment où tu attends le changement de ligne.
tu peux éviter tous cela en utilisant CSS3 et flex box (et une largeur de vignette de 25% (ou moins si tu as des marges bien entendu).

@+
Il en faut peu pour être heureux ......