Page 1 sur 1

Supprimer image dans galerie php sans bd

Posté : 26 oct. 2018, 08:23
par coripdc
Bonjour à tous,

je cherche en vain à trouver une méthode pour supprimer une ou plusieurs images de la galerie dont code ci-dessous.
j'ai retranscrit le code complètement sur la base d'une vidéo et il fonctionne parfaitement. Toutefois, impossible de supprimer une image ou plusieurs, ça fait 2 jours que j'essaye des methodes trouvées sur le net mais je ne dois pas savoir les faire fonctionner. :priere:
Je débute dans le PHP, merci de votre indulgence.
index.php

Code : Tout sélectionner

<?php if(!empty ($_FILES)){ require("imgClassnew.php"); $img=$_FILES['img']; $ext=strtolower(substr($img['name'],-3)); $allow_ext = array("jpg","png","gif"); if(in_array($ext,$allow_ext)){ move_uploaded_file($img['tmp_name'],"images/".$img['name']); Img::creerMin("images/".$img['name'],"images/min",$img['name'],215,112); Img::convertirJPG("images/".$img['name']); } else{ $erreur = "il n'est accepté que le format jpg, jpeg, png et gif"; } } ?> <!DOCTYPE html> <html> <head> <title>A COMPLETER</title> <meta charset="utf-8"/> <script type="text/javascript" src=" https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script> <script src="js/zoombox/zoombox.js" type="text/javascript"></script> <link href="js/zoombox/zoombox.css" rel="stylesheet" type="text/css" media="screen" /> <script type="text/javascript"> jQuery(function($){ $('a.zoombox').zoombox({ theme : 'zoombox', //available themes : zoombox,lightbox, prettyphoto, darkprettyphoto, simple opacity : 0.8, // Black overlay opacity duration : 800, // Animation duration animation : true, // Do we have to animate the box ? width : 600, // Default width height : 400, // Default height gallery : true, // Allow gallery thumb view autoplay : false // Autoplay for video }); </script> </head> <body> <?php if(isset($erreur )){ echo $erreur; } ?> <form method="post" action="index.php" enctype="multipart/form-data"> <input type="file" name="img" class="zoombox"/> <input type="submit" name="Envoyer"/> </form> <?php $dos="images/min"; $dir = opendir($dos); while($file= readdir($dir)){ $allow_ext = array("jpg",'png','gif'); $ext = strtolower(substr($file ,-3)); if(in_array($ext,$allow_ext)){ ?> <div class="min"> <a href="images/<?php echo $file; ?> "</a> <img src="images/min/<?php echo $file; ?>" rel="zoombox"/> <!--<h3><?php echo $file; ?></h3>--> </a> </div> <?php } } ?> <style> .min { display: inline-flex; } </style> </body> </html>
indexClassnew.php

Code : Tout sélectionner

class Img{ static function creerMin($img,$chemin,$nom,$mlargeur=100,$mhauteur=100){ // On supprime l'extension du nom $nom = substr($nom,0,-4); // On récupère les dimensions de l'image $dimension=getimagesize($img); // On cré une image à partir du fichier récup if(substr(strtolower($img),-4)==".jpg"){$image = imagecreatefromjpeg($img);} //else if(substr(strtolower($img),-5)==".jpeg"){$image = imagecreatefromjpeg($img); } //else if(substr(strtolower($img),-4)==".bmp"){$image = imagecreatefrombmp($img); } else if(substr(strtolower($img),-4)==".png"){$image = imagecreatefrompng($img); } else if(substr(strtolower($img),-4)==".gif"){$image = imagecreatefromgif($img); } // L'image ne peut etre redimensionne else{return false; } // Création des miniatures // On cré une image vide de la largeur et hauteur voulue $miniature =imagecreatetruecolor ($mlargeur,$mhauteur); // On va gérer la position et le redimensionnement de la grande image if($dimension[0]>($mlargeur/$mhauteur)*$dimension[1] ){ $dimY=$mhauteur; $dimX=$mhauteur*$dimension[0]/$dimension[1]; $decalX=-($dimX-$mlargeur)/2; $decalY=0;} if($dimension[0]<($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mlargeur*$dimension[1]/$dimension[0]; $decalY=-($dimY-$mhauteur)/2; $decalX=0;} if($dimension[0]==($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mhauteur; $decalX=0; $decalY=0;} // on modifie l'image crée en y plaçant la grande image redimensionné et décalée imagecopyresampled($miniature,$image,$decalX,$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]); // On sauvegarde le tout imagejpeg($miniature,$chemin."/".$nom.".jpg",90); return true; } static function convertirJpg($img){ if(substr(strtolower($img),-4)==".jpg"){$image = imagecreatefromjpeg($img);} //else if(substr(strtolower($img),-5)==".jpeg"){$image = imagecreatefromjpeg($img); } //else if(substr(strtolower($img),-4)==".bmp"){$image = imagecreatefrombmp($img); } else if(substr(strtolower($img),-4)==".png"){$image = imagecreatefrompng($img); } else if(substr(strtolower($img),-4)==".gif"){$image = imagecreatefromgif($img); } // L'image ne peut etre redimensionne else{return false; } unlink($img); imagejpeg($image,substr($img,0,-3)."jpg",90); return true; } }
Je vous remercie d'avance et vous souhaite une excellente journée.

Re: Supprimer image dans galerie php sans bd

Posté : 26 oct. 2018, 09:48
par @rthur
Commence par un code HTML simple pour supprimer une seul image : il faut que tu ajoutes soit un bouton (avec une icone poubelle par exemple) sous chaque image pour supprimer l'image en question.
Sur ce bouton, tu mets un lien qui renvoie vers une page PHP qui va faire ton traitement en passant en paramètre le nom de l'image à supprimer (supprimer.php?nom=toto.jpg par exemple)
Normalement, il faudrait faire cela en POST (via un formulaire HTML) et pas en GET (càd visible dans l'url), mais vu que tu débutes, c'est plus simple avec le passage dans l'url.

Dans ta page supprimer.php
:!: TRÈS IMPORTANT : il faut que tu vérifies que le nom du fichier qui t'es passé 1) existe 2) est bien dans le répertoire de tes images où l'utilisateur à le droit de supprimer 3) correspond bien à une image que l'utilisateur a le droit de supprimer.
Ces vérifications sont très importantes car sinon qqn de malveyant pourrait supprimer n'importe quel fichier de ton site...


Et ensuite, tu procèdes à la suppression avec la fonction unlink() https://php.net/unlink



Une fois que ce principe fonctionnera pour une image, tu pourras l'adapter pour fonctionner avec plusieurs images en mettant par exemple une case à cocher sous chaque image et 1 seul bouton "Supprimer les images sélectionnées"

Re: Supprimer image dans galerie php sans bd

Posté : 26 oct. 2018, 11:10
par coripdc
Bonjour @rthur ,

Merci d'avoir pris le temps de me répondre.
je dois faire des bétises mais j'espère qu'elles vont me faire avancer dans l'apprentissage du PHP
J'ai ajouter à ma div
<div class="min">
<a href="images/<?php echo $file; ?> ">
<img src="images/min/<?php echo $file; ?>" rel="zoombox"/></a>
<form method="GET" action="majimsup.php?nom=images/.$img['name'] ">
<input type="hidden" name="img_delete" />
<input type="image" src="images/poubelle.png" alt="Effacer" onclick="supprimer()" />
</form>

</div>
j'ai créer un fichier majimsup.php qui contient :
<?php
function supimg(){
if (isset($_GET, $_GET['img_delete'])){
foreach ($img_delete as $path)
{
echo "Suppression image : ",$path,"<br>";
@unlink( $path );
}
}
}
?>
Bien sur çà ne fonctionne pas.
Développeur c'est un métier et je ne suis qu'au début de mon apprentissage.

Re: Supprimer image dans galerie php sans bd

Posté : 26 oct. 2018, 12:13
par @rthur
2 questions :
- Pourquoi avoir fait une fonction supimg() ?
- Que fait l'arobase devant ton nom de fonction ?

Re: Supprimer image dans galerie php sans bd

Posté : 26 oct. 2018, 12:26
par coripdc
J'ai rectifié la function supimg() en function supprimer() et
retirer l'arobase @
mais c'est toujours pas bon |*()

Re: Supprimer image dans galerie php sans bd

Posté : 26 oct. 2018, 13:49
par @rthur
J'ai rectifié la function supimg() en function supprimer()
Pourquoi utiliser une fonction ?

Re: Supprimer image dans galerie php sans bd

Posté : 26 oct. 2018, 13:53
par coripdc
je croyais qu'il fallait utiliser une méthode pour supprimer comme il est recommandé pour une base de données.
j'y arrive pas!

Re: Supprimer image dans galerie php sans bd

Posté : 28 oct. 2018, 19:37
par @rthur
Si tu mets ton code dans une fonction, alors il faut appeler quelque part cette fonction :)

En l’occurrence pour un besoin aussi simple tu peux te contenter de faire du procédural, ne fait pas de fonction et le code sera exécuté immédiatement au chargement de la page.