supprimer photos en php a partir d'un lien de la bdd

Eléphanteau du PHP | 20 Messages

26 nov. 2011, 16:41

bonjour voila plusieurs jours que je cherche à supprimer des photos dans un dossier dont le lien est stocké dans un champ de ma base de donnée.
j'ai essayé la fonction unlink mais CA m'a mis des messages d'erreurs si qq un veut bien m'aider je l'en remercie d'avance.
ma table:
nom de la base de donnée: pieces
nom de la table: memoire
les champs: "ID"/"ref"/"nom_de_la_piece"/"qte"/"personne"/"commentaire"/"image"/
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>suppression2.php</title>
<script language="javascript">
      function confirme( identifiant )
      {
        var confirmation = confirm( "Voulez vous vraiment supprimer cet enregistrement ?" ) ;
	if( confirmation )
	{
	  document.location.href = "suppression2.php?IDmemoire="+identifiant ;
	}
      }

    </script>

<meta http-equiv="refresh" content= "2;
URL= http://localhost/pieces_detachees/memoires.php">

</head>

<body>
<?php
  //connection au serveur:
  $cnx = mysql_connect( "localhost", "root", "" ) ;
 
  //sélection de la base de données:
  $db = mysql_select_db( "pieces" ) ;
  //récupération de la variable d'URL,
  //qui va nous permettre de savoir quel enregistrement supprimer:
  $ID  = $_GET["IDmemoire"] ;
      //requête SQL:
  $sql = "DELETE 
            FROM memoire
	    WHERE ID = ".$ID ;
  //exécution de la requête:
  $requete = mysql_query( $sql, $cnx ) ;
	//récupération de l'extension du fichier.
  //affichage des résultats, pour savoir si la suppression a marchée:
  if($requete)
  {
    echo("La suppression à été correctement effectuée") ;
  }
  else
  {
    echo("La suppression à échouée") ;
  }
?>
</body>
</html>
voila en faite la je supprime la ligne complète mais pas l'image qui est stocké dans un dossier de mon serveur.
le lien ou se trouve l'image est dans le champ "image".
le lien fonctionne puisque l'image apparait sur le site.
merci pour vos réponses

ViPHP
xTG
ViPHP | 7331 Messages

26 nov. 2011, 17:45

Pour supprimer cette image il faut d'abord récupérer son path.
Vu que tu as l'ID une simple requête SELECT ferra l'affaire (bien évidemment avant le DELETE hein ! :P).
Une fois que tu as fait la requête, tu prends le path enregistré et avec la fonction unlink() tu la supprimes du système de fichiers. :)

Eléphanteau du PHP | 20 Messages

27 nov. 2011, 09:45

salut et merci pour ta réponse je test ca est je te tiens au courant :P

Eléphanteau du PHP | 20 Messages

27 nov. 2011, 10:10

je viens de rajouter ce que tu m'as dis mais j'ai une erreur je pense que je n'ai pas écrit correctement.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>suppression2.php</title>
<script language="javascript">
      function confirme( identifiant )
      {
        var confirmation = confirm( "Voulez vous vraiment supprimer cet enregistrement ?" ) ;
	if( confirmation )
	{
	  document.location.href = "suppression2.php?IDmemoire="+identifiant ;
	}
      }

    </script>

<meta http-equiv="refresh" content= "2;
URL= http://localhost/pieces_detachees/memoires.php">

</head>

<body>
<?php
  //connection au serveur:
  $cnx = mysql_connect( "localhost", "root", "" ) ;
 
  //sélection de la base de données:
  $db = mysql_select_db( "pieces" ) ;
  //récupération de la variable d'URL,
  //qui va nous permettre de savoir quel enregistrement supprimer:
  $ID  = $_GET["IDmemoire"] ;
      //requête SQL:
$sql1 = "SELECT image
	      FROM memoire";
		  $path = $sql1;
		  unlink('$path');
  $sql = "DELETE 
            FROM memoire
	    WHERE ID = ".$ID ;
  //exécution de la requête:
  $requete = mysql_query( $sql, $cnx ) ;
	//récupération de l'extension du fichier.
  //affichage des résultats, pour savoir si la suppression a marchée:
  if($requete)
  {
    echo("La suppression à été correctement effectuée") ;
  }
  else
  {
    echo("La suppression à échouée") ;
  }
?>
</body>
</html>
desolé mais je débute et la fonction path j'en avais pas entendu parlé #-o
peux tu me dire stp ce qui ne va pas?
merci d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 nov. 2011, 10:53

salut,

path c'est gros mot anglais que l'on traduit par chemin ;)

Ce que veux dire xTG c'est qu'il te faut avoir le chemin de l'image pour pouvoir la supprimer (sinon ben supprimer rien ;) )

donc tu sélectionne dans la table le ou les nom des images, et dessus tu utilise unlink

de ce que je vois de ton code :
- Il faut que tu revois l'utilisation des variables http://www.lephpfacile.com/cours/2-decl ... -variables
- idem pour l'utilisation des infos issu d'une base de données http://www.lephpfacile.com/cours/13-aff ... votre-base
- Il faut que tu utilise la clause where dans ton select pour ne sélectionner que les fichiers associés à ton IDmemoire



@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 20 Messages

27 nov. 2011, 20:01

merci pour tes liens bien utile mais j'ai essayé pas mal de choses aujourd'hui et je n'arrive pas à trouver je me retourne le cerveau ca fume de tous les cotes
je poste mon nouveau code il me met une erreur a la ligne 39 c'est a dire au niveau du unlink :(
le code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>suppression2.php</title>
<script language="javascript">
      function confirme( identifiant )
      {
        var confirmation = confirm( "Voulez vous vraiment supprimer cet enregistrement ?" ) ;
	if( confirmation )
	{
	  document.location.href = "suppression2.php?IDmemoire="+identifiant ;
	}
      }

    </script>

<meta http-equiv="refresh" content= "2;
URL= http://localhost/pieces_detachees/memoires.php">

</head>

<body>
<?php
  //connection au serveur:
  $cnx = mysql_connect( "localhost", "root", "" ) ;
 
  //sélection de la base de données:
  $db = mysql_select_db( "pieces" ) ;
  //récupération de la variable d'URL,
  //qui va nous permettre de savoir quel enregistrement supprimer:
  $ID  = $_GET["IDmemoire"] ;
      //requête SQL:
$sql1 = 'SELECT image
	      FROM memoire
		  WHERE image="$ID"';
$req1 = mysql_query($sql1) or die('Erreur SQL !<br />'.$sql1.'<br />'.mysql_error()); 		 
 $path = $sql1;
		  unlink('$path');
  $sql = "DELETE 
            FROM memoire
	    WHERE ID = ".$ID ;
  //exécution de la requête:
  $requete = mysql_query( $sql, $cnx ) ;
	//récupération de l'extension du fichier.
  //affichage des résultats, pour savoir si la suppression a marchée:
  if($requete)
  {
    echo("La suppression à été correctement effectuée") ;
  }
  else
  {
    echo("La suppression à échouée") ;
  }
?>
</body>
</html>
je pense que je suis pas trop loin mais je v pas dans la bonne direction...

ViPHP
xTG
ViPHP | 7331 Messages

27 nov. 2011, 20:43

Pourquoi des quotes ? Tu tentes de supprimer le fichier nommé $path là, et non le fichier dont le nom est contenu dans $path. ;)

Eléphanteau du PHP | 20 Messages

27 nov. 2011, 21:16

donc je dois mettre $path_image? c'est ca?

ViPHP
xTG
ViPHP | 7331 Messages

28 nov. 2011, 07:42

Beurf en fait j'avais lu qu'à moitié... Tu ne sembles pas savoir récupérer les informations de ta table.
Un peu de lecture. :)
http://phpdebutant.org/article66.php

Eléphanteau du PHP | 20 Messages

28 nov. 2011, 09:16

salut
donc je dois avant tous récupérer le champ image avec la commande "$data['image'] et ensuite donc je crée une variable ex: $sup_image = $data['image'];
ensuite j'utilise unlink('$sup_image');
est ce que c'est bien ca?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 nov. 2011, 10:17

non,

- tu sais pas faire la différence entre les guillemets simples et double.

les variables NE SONT PAS INTERPRÉTÉES dans une chaine délimitées par des guillemets simples.

en claire tu essai de supprimer un fichier qui s'appel $sup_image (c'est qeu tu devrais voir dans le poste de travail.

- tu n'a pas besoin de faire un $sup_image = $data['image']; autant utiliser $data['image']. De plus au final php fera une référence vers $data['image'] tant que tu ne la modifie pas :)

- a tu compris comment récupérer des infos de ta table avec php ?

si oui dans le traitement des infos retournées tu utilise $data['image'] avec unlink pour supprimer le fichier
unlink($data['image']); (sans les guillemets simples).

je te conseil de tester l'existence du fichier avant la suppression pour éviter les éventuelles messages d'erreurs, avec file_exists

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 20 Messages

28 nov. 2011, 15:16

d'apres ce que j'ai pu lire et comprendre :roll:
j'ai écris ce bout de code pour supprimer dis moi ce que tu en pense stp
$sql1 = "SELECT image FROM memoire";
$req1 = mysql_query($sql1) or die('Erreur SQL !<br />'.$sql1.'<br />'.mysql_error()); 		 
while($data = mysql_fetch_assoc($req1))
		  unlink($data['image']);

ViPHP
xTG
ViPHP | 7331 Messages

28 nov. 2011, 15:34

Avec ce bout de code tu supprimeras toutes les images référencées dans la table memoire.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 nov. 2011, 15:37

ce qui est con c'est qu'a priori tu sais utiliser le prédicat (where) dans un delete mais pas dans un select :/

=> http://sqlpro.developpez.com/cours/sqlaz/select/#L3
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 20 Messages

28 nov. 2011, 17:55

alors j'ai changé mon code comme ceci:
$sql1 = "SELECT image FROM memoire WHERE ('.$ID')";
$req1 = mysql_query($sql1) or die('Erreur SQL !<br />'.$sql1.'<br />'.mysql_error()); 		 
while($data = mysql_fetch_assoc($req1))
		  unlink($data['image']);
mais ca n'efface rien :x par contre j'ai pas d'erreur.
je m'en sors pas