Eliminare le immagini con PHP e MySQL
Ultima parte della serie.
L'articolo predente lo trovate qua.
Eravamo rimasti a come ordinare le foto della galleria.
Adesso vediamo come eliminarle.
Prima di tutto creiamo la funzione per l'eliminazione (usando PDO):
function delImg($nome) {
global $config;
try {
$prepare = $config->getPdo()->prepare("DELETE FROM gallery WHERE nome=?");
$prepare->execute(array(
$nome
));
} catch (Exception $e) {
die($e->getMessage());
}
}
La funzione è molto semplice e prevede una classica istruzione di DELETE.
A questo punto postiamo la pagina completa di tutte le funzioni
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['photo'])) {
foreach ($_POST['photo'] as $order => $id) {
updateImg($order, $id);
}
}
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['elimina_img'])) {
$check = $_POST['check'];
foreach ($check as $delete) {
delImg(substr($delete, 11));
if (unlink($delete)) {
echo 'Immagine cancellata<br/>';
} else {
echo 'Errore<br/>';
}
}
}
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['upload_img'])) {
$maxSize = 512000; //byte => 550KB
$acceptType = array(
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'png' => 'image/png'
);
$cartella = "../gallery/";
for ($i = 0; $i < count($_FILES['file']['name']); $i++) {
if ($_FILES['file']['name'][$i] != "") {
$nome_upload = uniqid('gallery_') . strrchr($_FILES['file']['name'][$i], '.');
$destinazione = $cartella . $nome_upload;
if ($_FILES['file']['size'][$i] <= $maxSize) {
if (in_array($_FILES['file']['type'][$i], $acceptType)) {
if (move_uploaded_file($_FILES['file']['tmp_name'][$i], $destinazione)) {
$_SESSION['lastimg']++;
insertImg($nome_upload, $_SESSION['lastimg']);
echo "File " . $i . " caricato<br/>";
} else {
echo "Errore nell'upload<br/>";
}
} else {
echo 'Tipo file non valido<br/>';
}
} else {
echo 'File troppo grande<br/>';
}
} elseif ($_POST['upload_img']) {
echo 'Non ci sono file da inserire<br/>';
}
}
}
?>
<form action="" method="post" enctype="multipart/form-data" name="form_upload">
<table>
<tr>
<td>
<input type="file" name="file[]" /> <br />
<input type="file" name="file[]" /> <br />
<input type="file" name="file[]" /> <br />
<input type="file" name="file[]" /> <br />
<input type="file" name="file[]" /> <br />
</td>
</tr>
<tr>
<td>
<input type="submit" value="Upload" name="upload_img" />
</td>
</tr>
</table>
</form>
<hr style="width: 200px; margin-left: 0;"/>
<a href="javascript:selectAll();">Seleziona tutto</a>
<form action="" method="post" enctype="multipart/form-data" name="modulo" onsubmit="return deleteImages();">
<ul id="gallery">
<?php
$dirname = "../gallery/";
foreach (showImg() as $file) {
echo '<li id="photo_' . $file['id'] . '"><input type="checkbox" name="check[]" value="' . $dirname . $file['nome'] . '" /><img src="' . $dirname . $file['nome'] . '" width="100" heigth="100" alt="" /></li>';
}
?>
</ul>
<input type="submit" value="Elimina" name="elimina_img" />
</form>
Nella parte alta abbiamo le parte di codice che richiamano le varie funzioni; sotto abbiamo due form.
Il primo serve per fare l'upload; nel secondo visualizziamo le immagini, le selezioniamo e la cancelliamo.
A noi nello specifico ci interessano queste due parti:
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['elimina_img'])) {
$check = $_POST['check'];
foreach ($check as $delete) {
delImg(substr($delete, 11));
if (unlink($delete)) {
echo 'Immagine cancellata<br/>';
} else {
echo 'Errore<br/>';
}
}
}
.......
<a href="javascript:selectAll();">Seleziona tutto</a>
<form action="" method="post" enctype="multipart/form-data" name="modulo" onsubmit="return deleteImages();">
<ul id="gallery">
<?php
$dirname = "../gallery/";
foreach (showImg() as $file) {
echo '<li id="photo_' . $file['id'] . '"><input type="checkbox" name="check[]" value="' . $dirname . $file['nome'] . '" /><img src="' . $dirname . $file['nome'] . '" width="100" heigth="100" alt="" /></li>';
}
?>
</ul>
<input type="submit" value="Elimina" name="elimina_img" />
</form>
La prima parte controlla tutte le immagini "ceccate", e per ognuna richiama la funziona delImg passandogli come parametro il nome delle immagini.
Una volta cancellate dal db le cancella anche fisicamente dalla directory.
E questo è quanto.
Con questi tre articoli potete praticamente tutto con la vostra galleria.
Ovviamente ci sono delle migliorie da fare, ma a me funziona e anche velocemente.
Vi consiglio di leggere gli articoli in sequenza; ricordatevi inoltre che ci sta anche una parte in jQuery/jQuery UI che non ho postato, ma che trovate nella seconda parte.
Spero vi possa essere utile!.
php mysql pdo galleria immagini unlink
Commentami!