while retour à la ligne dans un tableau

Eléphant du PHP | 116 Messages

01 avr. 2010, 14:21

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

ViPHP
ViPHP | 5462 Messages

01 avr. 2010, 14:24

avec les modulo

devlop78
Invité n'ayant pas de compte PHPfrance

01 avr. 2010, 14:25

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; }

devlop78
Invité n'ayant pas de compte PHPfrance

01 avr. 2010, 14:26

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 ?

ViPHP
ViPHP | 5462 Messages

01 avr. 2010, 14:29


Eléphant du PHP | 116 Messages

01 avr. 2010, 15:01

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

ViPHP
ViPHP | 5462 Messages

01 avr. 2010, 15:03

<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

*/

Eléphant du PHP | 116 Messages

01 avr. 2010, 15:08

<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)

ViPHP
ViPHP | 5462 Messages

01 avr. 2010, 15:12

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

devlop78
Invité n'ayant pas de compte PHPfrance

01 avr. 2010, 15:33

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.

devlop78
Invité n'ayant pas de compte PHPfrance

01 avr. 2010, 15:35

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. ..

Eléphant du PHP | 116 Messages

01 avr. 2010, 15:37

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.

ViPHP
AB
ViPHP | 5818 Messages

01 avr. 2010, 15:48


ViPHP
ViPHP | 5462 Messages

01 avr. 2010, 15:55

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;
		}
	}

Eléphant du PHP | 116 Messages

01 avr. 2010, 16:09

à 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;
	
	}
?>   
Modifié en dernier par kopax le 01 avr. 2010, 16:23, modifié 4 fois.