Page 1 sur 3

while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 14:21
par kopax
Bonjour, question de débutant toujours.

J'aimerai affiché des photos d'une galerie photos dans un tableau, et j'aimerai 3 photos par lignes et 12 photos par pages.

Pour l'instant mon code ressemble à :
// Ici ça va encore
$dir_miniature = "images/photos/miniature/";
$dir_originaux = "images/photos/originaux/";
$sql = "SELECT * FROM $table_photos ORDER BY photos_id DESC, photos_date DESC LIMIT 12";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
while($data = mysql_fetch_array($req))
    {
		$photos_id = $data['photos_id'];
		$photos_orig_name = $data['photos_orig_name'];
		$photos_name = $data['photos_name'];
		$photos_uploader = $data['photos_uploader'];
	        $photos_date = $data['photos_date'];

// C'est la que ça va plus ce n'est pas le tableau que j'ai mis dans mon code mais celui que j'aimerai faire pour affiché 3 photos différentes
// ici ça affichera les 3 mêmes mais je sais pas comment faire 3 colonnes 3 photos différentes + 1 ligne de séparaison + 3 descriptions + 1 ligne de séparaison.
// Et après recommencé cela jusqu'à ce que j'arrive à 4 boucles de ce code pour voir afficher mes 3*4 = 12 photos

echo "<tr>
          <td width="32%" height="150"><a href=$dir_originaux/$photos_name><img src=$dir_miniature/$photos_name></a></td>
          <td width="2%">&nbsp;</td>
          <td width="32%"><a href=$dir_originaux/$photos_name><img src=$dir_miniature/$photos_name></a></td>
          <td width="2%">&nbsp;</td>
          <td width="32%"><a href=$dir_originaux/$photos_name><img src=$dir_miniature/$photos_name></a></td>
        </tr>
        <tr>
          <td height="2" colspan="5">&nbsp;</td>
        </tr>
        <tr>
          <td>$photos_orig_name $photos_uploader $photos_date</td>
          <td>&nbsp;</td>
          <td>$photos_orig_name $photos_uploader $photos_date</td>
          <td>&nbsp;</td>
          <td>$photos_orig_name $photos_uploader $photos_date</td>
        </tr>
        <tr>
          <td height="2" colspan="5">&nbsp;</td>
        </tr>";
    }
Je sais pas si j'ai été claire, la partie du dessous est une explication sur ce que je voudrai faire mais j'en ai pas la connaissance.

Voilà merci de votre aide.

Dimitri

Re: while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 14:24
par stealth35
avec les modulo

Re: while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 14:25
par devlop78
Soit tu n'utilises pas de tableau et tu fais tout en float:left;

Soit tu fais un truc du genre

echo "<table>";
if (!$col) echo "<tr>";
echo "<td><img ...></td>";
$col++;
if ($col == 3) { echo "</tr>"; $col = 0; }

Re: while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 14:26
par devlop78
echo "<table>";
while (...) {
if (!$col) echo "<tr>";
echo "<td><img ...></td>";
$col++;
if ($col == 3) { echo "</tr>"; $col = 0; }

}

echo "</table>";

c'est quoi les modulo ?

Re: while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 14:29
par stealth35

Re: while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 15:01
par kopax
Merci de vos réponses,

J'aimerai bien gardé le tableau comme à mes habitudes.

Stealth le liens que tu m'as donné m'explique pas grand chose.
Je l'ai simplement jamais fais et du coup ca me parrait pas aussi simple que toi :roll:
Tu n'aurai pas un exemple de ce que je veux faire avec les modulos plutôt?

developnet, dans ton exemple ca ne risque pas de posé problème à la fin de la requetes si on à pas 3 colonnes? Il pourrai en manqué 1 ou 2

Re: while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 15:03
par stealth35
<table border="1">
<?php
	$pic 	= 3 * 12;
	$i 	= 0;
	
	while($i < $pic)
	{
		if(($i % 3) === 0)
		{
			echo '<tr>';
		}
		
		echo '<td>' . $i . '</td>';
		
		if(($i % 3) === 2)
		{
			echo '</tr>';
		}
		
		++$i;
	}
	$pic 	= 3 * 12;
	$i 		= 0;
	
	while($i < $pic)
	{
		echo ($i % 3) ;
		++$i;
	}
/*
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2

*/

Re: while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 15:08
par kopax
<table border="1">
<?php
	$pic 	= 3 * 12;
	$i 	= 0;
	
	while($i < $pic)
	{
		if(($i % 3) === 0)
		{
			echo '<tr>';
		}
		
		echo '<td>' . $i . '</td>';
		
		if(($i % 3) === 2)
		{
			echo '</tr>';
		}
		
		++$i;
	}
	$pic 	= 3 * 12;
	$i 		= 0;
	
	while($i < $pic)
	{
		echo ($i % 3) ;
		++$i;
	}
Je suis désolé mais je ne comprend toujours pas.
En supposant qu'avec plus de recherche j'arrive à comprendre, ma ligne while je peux l'écrire avec 2 arguments ? :

while($data = mysql_fetch_array($req) && ($i < $pic))?

Je comprends pas non plus le principe du calcul, c'est pas faute d'avoir eu un bac scientifique (même si les mathématique n'étais pas mon domaine de prédilection)

Re: while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 15:12
par stealth35
pas besoin d'argument en plus :wink:
$i = 0;
while($data = mysql_fetch_array($req))
{
    //blabla
    ++$i;
}
après les modulos c'est le reste de la division

Re: while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 15:33
par devlop78
Je t'aime bien stealth (comme le chanteur ?), mais là ... je connais le modulo mais je préfère franchement ma manière.

Kopax, tu fais ce que tu veux, mais mon script fais des lignes de 3 colonnes, et si tu as douze cellules, il n'y aura pas de problème. Tu peux implémenter un petit supplément qui te rajoutera des <td></td> si tu n'as pas douze cellules (enfin, si tu ne termines pas une ligne), tu peux arranger le code, moi je ne donne que l'idée. Cela dit, selon ton site, s'il manque des <td> dans un premier temps, en général ça marche, donc essaie déjà de voir quitte à améliorer par la suite.

Re: while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 15:35
par devlop78
0 / 3 = 0 (donc <tr>) => 1ere colonne
1 / 3 possède un modulo (donc pas tr) => deuxieme colonne
2 / 3 possède un modulo (donc pas tr) => Troisieme colonne
3 / 3 ne possède pas de modulo (donc tr) => Deuxième ligne, première colonne
etc. ..

Re: while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 15:37
par kopax
Ok je vais attaqué ca tout de suite, c'est quelque chose que j'ai jamais fais et ai toujours chercher à contourner mais maintenant j'aimerai vraiment comprendre très bien.

Je vais taffé mon code et repasse ici par la suite.

Re: while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 15:48
par AB

Re: while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 15:55
par stealth35
Je t'aime bien stealth (comme le chanteur ?), mais là ... je connais le modulo mais je préfère franchement ma manière.
non le chanteur c'est 'seal' :mrgreen:

sinon c'est pareil sauf que toi tu réinitialises la valeur, c'est pas très démonstratif dans cette exemple,
par exemple si tu veux les coordonnée de chaque cellule d'un carré, tu pourrais faire 2 boucles imbriqué pour te sortir ton X et ton Y, avec les modulos tu fais qu'une seule boucle
<pre>
<?php
	$w 	= 4;
	$h 	= 3;
	
	for($i = 0;  $i < ($w * $h); $i++)
	{
		$x = ($i % $w);
		$y = floor($i / $w);
		
		echo $x . ' : ' . $y . PHP_EOL;
	}
	
	echo PHP_EOL;
	
	for($y = 0; $y < $h; $y++)
	{
		for($x = 0; $x < $w; $x++)
		{
			echo $x . ' : ' . $y . PHP_EOL;
		}
	}

Re: while retour à la ligne dans un tableau

Posté : 01 avr. 2010, 16:09
par kopax
à tout hazard, j'ai pas beaucoup avancé,

Il y a une erreur dans mon code mais impossible de la trouvé.

Ca me met :
Parse error: parse error in D:\Program Files\wamp\www\Shoutbox V2\galerie.php on line 248
Bien sur la ligne 248 c'est la fin de la page. Quand je retire cette partie, la page s'affiche. il y a une erreur la dedans, je n'arrive toujours pas à trouvé.
<?php

$dir_miniatures = "images/photos/miniatures";
$dir_originaux = "images/photos/originaux";

if (!empty($_GET['up_par']))
	{
		$uploader = $_GET['up_par'];
		$sql = "SELECT * FROM ".$table_photos." WHERE photos_uploader=".$uploader." ORDER BY photos_id DESC, photos_date DESC LIMIT 12";
	}
else
	{
		$sql = "SELECT * FROM ".$table_photos." ORDER BY photos_id DESC, photos_date DESC LIMIT 12";
        }
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
while($data = mysql_fetch_array($req))
    {
		$photos_id = $data['photos_id'];
		$photos_orig_name = $data['photos_orig_name'];
		$photos_name = $data['photos_name'];
		$photos_uploader = $data['photos_uploader'];
		$photos_description = $data['photos_description'];
	    $photos_date = $data['photos_date'];
	
	if (!$col) echo "<tr>";
	echo "<td width=\"32%\" height=\"150\"><a href=$dir_originaux/$photos_name><img src=$dir_miniatures/$photos_name></a></td>";
	echo "<td width=\"2%\">&nbsp;</td>";
	$col++;
	if ($col == 3) { echo "</tr>"; $col = 0;
	
	}
?>