Page 1 sur 1

Probleme supresssion de sa propre annonce

Posté : 22 déc. 2011, 11:26
par spedgreg
Bonjour :wink:

j'ai une annonce avec photos j'ai crée un icône supprimer, lorsque le client clique sur celui ci je demande à la personne si désire bien supprimer son annonce "OUI ou NON"

Si clique sur OUI l'annonce et bien supprimer de la base de donnée ainsi la photo miniature et la photo normale qui se trouvaient dans un répertoire! CA FONCTIONNE PARFAITEMENT

MAIS

Si la personne lors de la création de son annonce n'a pas ajouter de photo donc son annonce sera sans photo et si il désire la supprimer j'aurai bien mon message de confirmation et si je met OUI mon annonce et bien supprimer mais avec ces erreurs:

Warning: unlink(../image/avatars/) [function.unlink]: Permission denied in C:\wamp\www\......
Warning: unlink(../image/avatars/min/) [function.unlink]: Permission denied in C:\wamp\www\.......

Logique car on demande à la fonction d'effacer des photo qui n'existe pas donc comment faire pour que il ny est pas ce genre de message d'erreur?

ma page supprimer-annonce.php
<?php

require('../include/connexionpdo.inc.php');

                                         //Pas encore certain de supprimer
    if (!empty($_GET['id_annonce']))
    {
	?>
    Etes-vous certain de vouloir supprimer cette annonce ?&nbsp;&nbsp;
	<a class="accueil" href="supprimer-annonce.php?id=<?php echo htmlspecialchars($_GET['id_annonce'], ENT_QUOTES, 'UTF-8');?>">
    Oui</a> - <a class="accueil" href="page_membre.php">Non</a>
	<?php
    }

                                          //certain de supprimer
if(!empty($_GET['id']))
{   


$query=$db->prepare('SELECT avatar
                     FROM annonce 
                     WHERE id_annonce = :id');
                  $query->bindValue(':id',$_GET['id'],PDO::PARAM_INT);							  			
                  $query->execute();
		 $donnees=$query->fetch();

		   $photo = $donnees['avatar'];
		
		$filename = '../image/avatars/'.$photo.''; 
        unlink($filename);
		$filename = '../image/avatars/min/'.$photo.''; 
        unlink($filename);



	
   $query=$db->prepare('DELETE 
                        FROM annonce 
			WHERE id_annonce = :id');
        $query->bindValue(':id',$_GET['id'],PDO::PARAM_INT);
        $query->execute();
        $query->CloseCursor(); 
			
		
        echo'L\'annonce a bien été supprimé.Revenir sur votre <a class="accueil" href="page_membre.php">espace membre.</a>';
       
}

?>
Le lien pour supprimer l'annonce (icône croix)

<div><a title="supprimer annonce" href="../user/supprimer-annonce.php?id_annonce=<?php echo $donnees['id_annonce'];?>"><img src="../image/supprimer-icone.png" alt="supprimer annonce" title="supprimer annonce" /></a></div>

Re: Probleme supresssion de sa propre annonce

Posté : 22 déc. 2011, 11:34
par moogli
salut,

soit tu vérifie le contenu des champs de ta base de données (je suppose qu'il sont vide quand il n'y a pas d'image) soit tu test l'existence du fichier pour conditionner la suppression.

le mieux étant bien entendu de faire les deux. Ceci simplement parce que tu ne peux pas être certain que le fichier soit présent sur disque même si la base de le dit (pas de corrélation entre les deux).

donc
<?php
if ( !empty($donnees['avatar'])) {
                 $filename = '../image/avatars/'.$donnees['avatar'];
if (file_exists($filename))
         unlink($filename);
                 $filename = '../image/avatars/min/'.$donnees['avatar']
if (file_exists($filename))
         unlink($filename);
?>

@+

Re: Probleme supresssion de sa propre annonce

Posté : 22 déc. 2011, 12:06
par spedgreg
Merci beaucoup c'est bon ça fonctionne !!!!! :wink:

ps: dommage que sur ce forum il manque une indication que notre sujet est résolu :D

Re: Probleme supresssion de sa propre annonce

Posté : 22 déc. 2011, 20:49
par liens_geeks
Fais bien attention avec la fonction unlink() , ça peut faire des ravages sur un serveur si le script est buggé ou mal sécurisé
Comme dit moogli, en plus de vérifier si $filename est rempli, tu devrais vérifier avec une expression régulière que ton fichier est bien une image.
Souvent, je ne supprimais pas en 1 fois le images, je les déplaçais dans un répertoire temporaire (non accessible par l'internaute), et les supprimais qqes temps après.

C'est dommage de supprimer tes annonces (et tes images) pour ton référencement naturel, non?

Re: Probleme supresssion de sa propre annonce

Posté : 22 déc. 2011, 20:55
par moogli
Supprimer une annonce périmé est normale, référencer une annonce qui n'a plus court est une bonne idée pou faire fuir le gens. De plus la personne qui la dépose ayant droit d'accès à ces infos la suppression doit être autorisée. ;)

Il n'y a pas de soucis de sécurité si le nom de fichier et gérer sur le serveur le "client" n'ayant pas accès a la partie qui supprime (l'info provenant de la base si elle est correctement entrée y a pas de problème)

@+

Re: Probleme supresssion de sa propre annonce

Posté : 22 déc. 2011, 22:14
par liens_geeks
Tu as raison pour les vieilles annonces, je suis trop dans une logique e-commerce là.

Pour l'aspect sécurité, si tu as une faille à l'upload ça peut être la fête du slip dans le dossier et ses sous dossiers.

Re: Probleme supresssion de sa propre annonce

Posté : 22 déc. 2011, 22:30
par spedgreg
:wink: Oui le client a le droit de supprimer son annonce. Imagine grâce à son annonce il a réussi à vendre son produit, il ne va pas la laisser en ligne du coup il peut la supprimer :wink:

Pour la sécurité lors de l'upload j'utilise ce script :
if(!empty($_FILES['img']['size']))
    {
	require('../include/functions.inc.php');
  
        //On définit les variables :
        $maxsize = 2097152; //Poid de l'image        
        $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' ); //Liste des extensions valides
        
        if ($_FILES['img']['error'] > 0)
        {
		        $erreurCritique++;
                $aErrors['photo'] = "Erreur lors du transfert de la photo : ";
				
        }
        if ($_FILES['img']['size'] > $maxsize)
        {
                $erreurCritique++;
                $aErrors['photo'] = "Le fichier est trop gros : (<strong>".$_FILES['img']['size']." Octets</strong>    contre <strong>".$maxsize." Octets</strong>)";
        }

        
        $extension_upload = strtolower(substr(  strrchr($_FILES['img']['name'], '.')  ,1));
        if (!in_array($extension_upload,$extensions_valides) )
        {
                $erreurCritique++;
                $aErrors['photo'] = "Extension de la photo incorrecte";
        }
	
$nomavatar=(!empty($_FILES['img']['size']))?move_img($_FILES['img']):''; 	 
    }


et le script de la fonction
<?php
function move_img($img)
{
require("../include/imgClass.php");
    $extension_upload = strtolower(substr(  strrchr($img['name'], '.')  ,1));
    $name = time();
    $nomavatar = str_replace(' ','',$name).".".$extension_upload;
    $ok = "../image/avatars/".str_replace(' ','',$name).".".$extension_upload;
    move_uploaded_file($img['tmp_name'],$ok);
    return $nomavatar;
}
?>


Re: Probleme supresssion de sa propre annonce

Posté : 23 déc. 2011, 00:09
par liens_geeks
Tu as essayé d'uploader un fichier php que tu renommes en xx.php.jpg , pas exemple?

Re: Probleme supresssion de sa propre annonce

Posté : 23 déc. 2011, 15:06
par spedgreg
oui j'ai fais le test avec un fichier .php en rajoutant l'extension .jpg comme ceci xx.php.jpg j'ai une erreur de redimensionnement mais l'annonce se crée quand même et dans mon dossier ou se trouve les photos uploadé j'ai le fichier avec l'extension .jpg nommé avec la fonction time() "1324645354.jpg"

Re: Probleme supresssion de sa propre annonce

Posté : 23 déc. 2011, 16:55
par liens_geeks
Salut,
Une méthode pour vérifier que le fichier uploadé est bien une images est d'utiliser la fonction getimagesize()

http://fr.php.net/manual/fr/function.getimagesize.php
Si l'accès à filename est impossible ou bien si filename n'est pas une image valide, getimagesize() générera une erreur de niveau E_WARNING. Si une erreur survient lors de la lecture, getimagesize() générera une erreur de niveau E_NOTICE.