IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Suppression plusieurs fichiers à partir de bdd


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Décembre 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Suppression plusieurs fichiers à partir de bdd
    Bonjour,
    Cela fait un petit moment que je cherche, pouvez-vous m'aider ?
    J'ai des rubriques et des fichiers pdf stockés en bdd.
    Je souhaiterai pouvoir supprimer ma rubrique avec tous ses fichiers associés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    //Recuperer dossier
    $query ='SELECT * FROM dossier WHERE RubriqueID=\'' . $_GET['supprimer_rub'] . '\'';
    $retour = mysql_query($query) OR die("<div class='erreur'>Dossiers non trouv&eacute;s.</div>");			
     
    while($data = mysql_fetch_array($retour))
    {
    	$id = $data['id'];	
    	$pdfname = $data['pdfname'];
     
    	if($data['pdfname'] !=""){					
    		// on récupère le nombre d'éléments
    		$fichiers = $data['pdfname'];
    		$nb_fichiers = count($fichiers);
    		// on fait la boucle pour supprimer
    		for($k=0; $k<= $nb_fichiers; $k++){
    			$dir = 'chemin/pdf/'.$fichiers[$k];
    			if ( is_file ($dir) ) {
       				unlink ($dir) ;
    			}
    		}
    	}
    }
    Mais cela ne fonctionne pas...
    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    $data['pdfname'] n'est pas un tableau PHP.
    Si c'est une liste séparée par un caractère, il faut utiliser explode().
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Décembre 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci Sabotage mais ce n'est pas une liste séparée par un caractère...
    et je n'ai pas réussi à récupérer le nom de mon fichier par explode().
    En fait là, j'ai cherché différentes solutions mais débutante, je tourne et retourne.
    Celle qui me semble intéressante est celle-ci :
    Faire un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $tab = array();
    while($data = mysql_fetch_array($retour))
    {
    	if (isset($tab[$data['pdfname']])) {
    		explode($tab[$data['pdfname']]);
    	} 
    	echo $tab[$data['pdfname']];
    mais là j'ai
    " Notice: Undefined index: fichier1.pdf in "
    " Notice: Undefined index: fichier2.pdf in "
    " Notice: Undefined index: fichier3.pdf in "
    Pouvez-vous me donner une piste pour avancer ?
    Merci d'avance.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    mais ce n'est pas une liste séparée par un caractère...
    Qu'est ce que c'est alors ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Décembre 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Bonjour Sabotage,
    Suite à ton dernier message, j'ai repris calmement ta piste...
    et tous mes fichiers se suppriment bien maintenant, il me reste juste encore une erreur :
    Notice: Undefined offset: 2 in ... on line 86 Call Stack
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    //Recuperer dossier
    $query ='SELECT * FROM dossier WHERE RubriqueID=\'' . $_GET['supprimer_rub'] . '\'';
    $retour = mysql_query($query) OR die("<div class='erreur'>Dossiers non trouv&eacute;s</div>");			
     
    while($data = mysql_fetch_array($retour))
    {
    	$pdfname =$data['pdfname'];		
    	if($pdfname !=""){
    		$fichiers = $pdfname." ";
    		$f = explode(" ", $fichiers);
    		if(isset($f))
    		{
    			$nb_fichiers = count($f);
    			if(isset($nb_fichiers))
    			{
    				// on fait la boucle pour supprimer
    				for($i=0; $i<= $nb_fichiers; $i++){
    					$dir = 'chemin/pdf/'.$f[$i];
    					if ( is_file ($dir) ) {
       						unlink ($dir) ;
    					}
    				}
    			}
    		}
    	}
    }
    La ligne concernée est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dir = 'chemin/pdf/'.$f[$i];
    J'ai vu que ce type d'erreur correspondait en général à un manque d'isset mais je ne vois vraiment pas où il manquerait...
    En tout cas, merci bcp pour ton attention et ta patience...

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Points : 98
    Points
    98
    Par défaut
    Salut,

    Plusieurs remarques sur ton code :
    1) Le isset($nb_fichiers) ne sert à rien, count() te renvoyant forcément une valeur, la variable est forcément définie. Si tu veux vérifier qu'il y ait au moins un fichier, il faut vérifier que $nb_fichiers soit supérieur à 0.
    OU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!empty($nb_fichiers))
    Note : la fonction empty renvoie "true" si la valeur testée est null, une chaine vide, un entier égale à 0, ... Voir la doc sur la fonction pour plus de détail, mais à utiliser avec précautions !

    2) N'oublies pas que ton tableau de données commence à l'index 0. Si ton tableau contient 3 fichiers, count() te renverra 3 et ton tableau ira de l'index 0 à l'index 2.
    Dans ton for, tu boucles de 0 jusqu'à $nb_fichiers (3 dans mon exemple), mais $tab[3] n'est pas défini, car il ferait alors référence au 4ème élément du tableau. Or ici, tu n'en as que 3 ! Il faut faire un "<" au lieu d'un "<="

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for($i = 0; $i < $nb_fichiers; $i++)
    3) Même s'il y a peu de différence de performance entre un mysql_fetch_array() et un mysql_fetch_assoc(), le premier prend deux fois plus de mémoire que le second. En effet, le mysql_fetch_array stock les résultats en associatif ET en index. Pour t'en rendre compte, fais un print_r() sur un $data
    Il est préférable d'utiliser mysql_fetch_assoc() si tu n'utilises que les noms de champs et pas leur index.

    4) Quelque chose me surprend dans ton code : ta gestion du nom de fichier. Tu vérifies que le fichier n'est pas vide, si c'est le cas, tu le récupère, ajoutes un espace à la fin et fais un explode sur cet espace. Pourquoi ?

    A+

Discussions similaires

  1. Suppression de fichier à partir de SAS
    Par stefsas dans le forum Macro
    Réponses: 3
    Dernier message: 01/10/2015, 10h27
  2. Réponses: 9
    Dernier message: 22/06/2007, 08h36
  3. Ouvrir plusieurs fichiers à partir d'un répertoire
    Par Iria77 dans le forum Général Python
    Réponses: 7
    Dernier message: 12/09/2006, 11h43
  4. Réponses: 10
    Dernier message: 12/06/2006, 16h45
  5. Générer plusieurs fichiers à partir d'un fichier excel
    Par yas2006 dans le forum Documents
    Réponses: 3
    Dernier message: 02/06/2006, 17h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo