Los ejemplos mas básicos, son... el Explorador de archivos, y reporte de Base de datos, veamos....
Explorador de Archivos
explorer.php
Código PHP:
<?php
//primero, debemos saber que carpeta explorar... la definimos
define('EX_PATH', dirname(__FILE__)); // sin la barra final
// en los ejemplos usamos la ruta misma del script...
// pero puede ser cualquiera
?>
Código PHP:
<?php
$path = EX_PATH;
if ( ! empty($_GET['dir']))
{
// sub carpeta a listar??
$path .= "/$_GET[dir]";
}
// la carpeta deberia ser "privada" de modo que solo funcione
// hasta donde nosotros queramos...
if ( ! is_dir($path))
{
die("No existe: $path");
}
// después, hacemos un iterador de archivos... algo muy conocido
$tmp = opendir($path);
// enlace "arriba"
$top = dirname(str_replace(EX_PATH, '', $path));
if ($top !== '/' && $top !== '.')
{
// eliminamos la carpeta privada del enlace...
$top = str_replace('\\', '/', trim($top, '/\\')); // DOS/*nix [fix]
echo '[<a href="', $_SERVER['PHP_SELF'], ! empty($top)? "?dir=$top": '', '">arriba</a>]';
}
// usamos una tabla y formulario, obvio!
?>
<form method="post"><table>
<thead>
<tr><th></th><th>nombre</th><th>tamaño</th><th>modificado</th></tr>
</thead>
<tfoot>
<td colspan="99"><input type="submit" value="Eliminar seleccionados"/>
</tfoot>
<?php
while (($old = readdir($tmp)) !== false)
{
// evitamos .. y .
if ($old !== '..' && $old !== '.')
{
// generamos el link por archivo/carpeta...
$file = "$path/$old";
$new = str_replace(EX_PATH, '', $file);
$new = str_replace('\\', '/', trim($new, '/\\')); // DOS/*nix [fix]
// eliminamos la carpeta privada del enlace...
?>
<tr>
<td><input type="checkbox" name="borrar[]" value="<?php echo $new; ?>"/></td>
<td><?php
// si es una carpeta lo mejor es crear un enlace, para
// continuar navegando sobre nuestra aplicacion...
if (is_dir($file))
{
echo '<a href="?dir=', $new, '">', $old, '</a>';
}
else
{
echo $old;
}
?></td>
<td><?php echo is_file($file)? ceil(filesize($file) / 1024) . ' KB': '-'; ?></td>
<td><?php echo is_file($file)? date('d-m-Y H:i:s', filemtime($file)): '-'; ?></td>
</tr>
<?php
// vinculamos la accion de eliminar en un checkbox
// de este modo, es mas precisa nuestra "accion"
// (ademas de transparente)
//
// en cualquier otra acción, simplemente... podemos
// utilizar un enlace comun y corriente....
}
}
?>
</table></form>
report.php
Código PHP:
<?php
// este reporte todos lo conocen, simplifiquemos...
while (($row = mysql_fetch_assoc($result)) !== false)
{
?>
<tr>
<td><input type="checkbox" name="borrar[]" value="<?php echo $row['id']; ?>" /></td>
<td><?php echo $row['titulo']; ?></td>
<td><a href="?accion=editar&id=<?php echo $row['id']; ?>">editar</a></td>
</tr>
<?php
}
?>
(un ejemplo de acción por enlace fue... el mismo de cambiar carpeta con ?dir=)
Ahora, para la acción POST, en este caso del checkbox (borrar) necesitamos hacer esto...
explorer.php
Código PHP:
<?php
// explorador de archivos
if ( ! empty($_POST['borrar']))
{
// iteramos el "paquete"
foreach ($_POST['borrar'] as $old)
{
$file = str_replace('\\', '/', EX_PATH . "/$old"); // DOS/*nix [fix]
if (is_file($file))
{
var_dump($file); // borramos!!
// cambiar por unlink()
}
elseif (is_dir($file)) {
// recordemos que no se pueden eliminar carpetas
// que contengan archivos, para esto primero
// debemos eliminar todo su contenido
// y despues, eliminar...
//
// esto no esta implementado en el ejemplo, pero
// es muy sencillo de desarrollar para uds.
}
}
}
?>
Código PHP:
<?php
// reporte de base de datos
if ( ! empty($_POST['borrar']))
{
// en este ejemplo, vamos a usar el operador IN de SQL
// ya que es mucho mas rapido que iterar por cada elemento...
$ids = join(',', $_POST['borrar']); // 1,15,4,66,9,...,N
$sql = "DELETE FROM tabla WHERE id IN($ids)";
mysql_query($sql) or die(mysql_error());
}
?>
Ya que esto no solo se aplica a Reportes, o Archivos.... de hecho, es un concepto básico en general de programación Web....
Pueden haber muchas acciones, varias a la ves, etc... todo depende de la creatividad de uno!
(espero haberme explicado correctamente)
suerte!