Newsgroup: it.comp.www.php
Titolo: Dov'è l'errore?!?

Ciao a tutti.
Perchè il seguente script non mi funzia?
Cosa sbaglio?
Dovrebbe suddividermi le immagini in i righe e j colonne ma
invece me le elenca tutte su un'unica riga.
<?php
$dir = @opendir("album/");
echo "
<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"8\">";
for ($i=0; $i<2; $i++) {
echo "<tr>";
for ($j=0; $j<2; $j++) {
while ($file=readdir($dir)) {
$filename= basename($file);
if ($filename!=="." AND $filename!=="..") {
echo "<td><a href=\"new_page.php?body=$filename\"><img src=\"album/" .
$filename . "\" border=\"0\" width=\"60\" height=\"60\"></a></td>";
}
}
echo "</tr>";
}
}
echo "</table>";
?>
Grazie!

 Perchh il seguente script non mi funzia?
Sarebbe sufficente una minima identazione del codice:
<?php
$dir = @opendir("album/");
echo "<table width=\"100%\" border=\"1\" cellspacing=\"0\"
cellpadding=\"8\">";
for ($i=0; $i<2; $i++) 
{
	echo "<tr>";
	for ($j=0; $j<2; $j++) 
	{
		while ($file=readdir($dir)) 
		{
			$filename= basename($file);
			if ($filename!=="." AND $filename!=="..") 
			{
				echo "<td><a href=\"new_page.php?body=$filename\"><img
src=\"album/" .
				$filename . "\" border=\"0\" width=\"60\" height=\"60\"></a></td>";
			}
		}
		echo "</tr>";
	}
}
echo "</table>";
?>
Ti saresti accorto subito che echo "</tr>"; viene eseguito nel ciclo
sbagliato.
-- 
I'am what I'am, I do what I can

> Sarebbe sufficente una minima identazione del codice:
Evvero...   ;o)
...ma non mi funziona lo stesso!!!
<?php
$dir = @opendir("album/");
echo "<table width=\"100%\" border=\"1\" cellspacing=\"0\"
cellpadding=\"8\">";
for ($i=0; $i<6; $i++) {
    echo "<tr>";
        for ($j=0; $j<4; $j++) {
            while ($file=readdir($dir)) {
                $filename= basename($file);
                  if ($filename!=="." AND $filename!=="..") {
                  echo "<td><a href=\"new_page.php?body=$filename\"><img
src=\"album/".$filename . "\" border=\"0\" width=\"60\"


 ...ma non mi funziona lo stesso!!!
Il tuo algoritmo e' sbagliato:
$numero_cols = 3;
$dir = @opendir(".");
echo "<table width=\"100%\" border=\"1\" cellspacing=\"0\"
cellpadding=\"8\">";
$j=0;
while ($file = readdir($dir)) {
	$filename = basename($file);
	if ($filename!=="." AND $filename!=="..") {
		if ($j % $numero_cols == 0)
		{ print ("<tr>\n"); }
		echo "<td><a href=\"new_page.php?body=$filename\"><img
		src=\"album/".$filename . "\" border=\"0\" width=\"60\"
		height=\"60\"></a></td>\n";
		$j++;	
		if ($j % $numero_cols == 0)
		{ print ("</tr>\n"); }
	}
}
echo "</table>";


Dem wrote:
è errato concettualmente, il while dentro il ciclo for di $j fà in modo 
che tutte le immagini vengano messe consecutivamente su una sola riga.
Puoi eliminare il for più interno e con un contatore dentro il while 
vedi quante immagini hai inserito su una riga, poi con una condizione 
sul while vai alla nuova riga
<?php
$n_col=10; /*colonne desiderate
$n_righe=10; /*righe desiderate
$dir = @opendir("album/");
echo "<table width=\"100%\" border=\"1\" cellspacing=\"0\" 
cellpadding=\"8\">";
for ($i=0; $i<$n_righe; $i++)
    {
     $contatore_colonna=0;
     echo "<tr>";
     while (($file=readdir($dir))&&($contatore_colonna<$n_col))
        {
         $contatore_colonna++;
         $filename= basename($file);
         if ($filename!=="." AND $filename!=="..")
            {
             echo "<td><a href=\"new_page.php?body=$filename\"><img 
src=\"album/".$filename."\" border=\"0\" width=\"60\" 
height=\"60\"></a></td>";
            }
        }
     echo "</tr>";
    }
echo "</table>";
?>
non l'ho provato, spero che funzioni
ciao
Alesi_27

 invece me le elenca tutte su un'unica riga.
perchè entra nel primo ciclo, entra nel secondo e dentro al while mostra
tutte le celle, quindi chiude la riga e dovrebbe farne un'altra vuota
(controlla nel'output).
qui sotto non ho fatto altro che togliere il while() ed aggiungere un
controllo in modo da poter impostare il numero massimo di righe, ma nel caso
i file fossero finiti non creerebbe le righe aggiuntive. Non l'ho provato.
<?
$dir = @opendir("album/");
$numero_righe = 10;
$numero_colonne = 2;
$stopRows = 0;
echo '<table width="100%" border="1" cellspacing="0" cellpadding="8">';
for ($i=0; $i < $numero_righe && !$stopRows; $i++) {
 echo "<tr>";
 for ($j=0; $j < $numero_colonne; $j++) {
  if ($file=readdir($dir)) {
   $filename= basename($file);
   if ($filename!=="." AND $filename!=="..") {
    echo "<td><a href=\"new_page.php?body=$filename\"><img src=\"album/" .
    $filename . "\" border=\"0\" width=\"60\" height=\"60\"></a></td>";
   }
  } else $stopRows = 1;
 }
 echo "</tr>";
}
echo "</table>";
?>
Ludovico

Grazie a tutti!

invece me le elenca tutte su un'unica riga.
Il while e' nel ciclo piu' interno e si esaurisce immediatamente.
Prova cosi':
<?
	error_reporting(E_ALL);
	$album		= 'album/';
	$maxrighe	= 2;
	$maxcolonne	= 2;
	print <<< TABLEHEADER
<table width="100%" border=1 cellspacing=0 cellpadding=8>
TABLEHEADER;
	$riga = 0;
	$colonna = 0;
	$dir = opendir($album);
	while($file=readdir($dir))
	{
		$filename= basename($file);
		if ($filename[0] == '.')
			continue;
		if (0 == $colonna)
			print <<< ROWHEADER
<TR>
ROWHEADER;
		print <<< CELL
<TD>
	<a href="new_page.php?body=$filename">
	<img src="$album$filename" border=0 width=60 height=60
alt="$filename">
	</a>
</TD>
CELL;
		if (++$colonna == $maxcolonne)
			if (++$riga == $maxrighe)
				break;
			else
			{
				print <<< ROWFOOTER
</TR>
ROWFOOTER;
				$colonna = 0;
			}
	}
	if ($colonna != $maxcolonne)
	{
		while($colonna++ < $maxcolonne)
			print <<< EMPTYCELL
<TD>&nbsp;</TD>
EMPTYCELL;
		print "</TR>\n";
	}
	print <<< TABLEFOOTER
</TABLE>
TABLEFOOTER;
?>
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.