[RESOLU] Intégration répertoire + sous répertoire + nom du fichier dans BDD

Eléphanteau du PHP | 11 Messages

20 août 2025, 14:46

Bonjour,

Actuellement, j'ai un répertoire et 3 sous-répertoires documentés ainsi :

Outils/Marteaux (avec 2 éléments jpg)
Outils/Pinces (avec 3 éléments jpg)
Outils/Tournevis (avec 3 éléments jpg)

J'arrive bien à lister les 3 sous-répertoires, avec leur éléments, du répertoire Outils

J'obtiens ceci :
Outils/Marteaux/Arrache-clou.jpg
Outils/Marteaux/Maillet.jpg
Outils/Pinces/Coupante.jpg
Outils/Pinces/Multiprise.jpg
Outils/Pinces/Riveter.jpg
Outils/Tournevis/Boule.jpg
Outils/Tournevis/Mixte.jpg
Outils/Tournevis/Torx.jpg

Je souhaite intégrer ces résultats dans la table "inventaire" de ma BBD, ayant les champs suivants :

id Type Genre Détail

1 Outils Marteaux Arrache-clou.jpg
2 Outils Marteaux Maillet.jpg
3 Outils Pinces Coupante.jpg
...
8 Outils Tournevis Torx.jpg


Je ne vois pas comment passer du listage de répertoire à remplissage de la BDD.

Merci par avance de l'aide apportée

Did77

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 août 2025, 01:17

Bonjour,
Pour chaque élément, tu fais un explode() sur le caractère "/" et ça te renverra un tableau avec les 3 valeurs bien découpées que tu n'auras qu'à insérer dans ta bdd
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 11 Messages

21 août 2025, 19:40

Bonjour,
Je teste rapidement et reviens poster le résultat

Eléphanteau du PHP | 11 Messages

24 août 2025, 17:28

Bonjour,

En utilisant l'explode, je n'obtiens pas le tableau avec le bon découpage.

Voici ce que j'ai, en retour :

Résultat :
Array ( [0] => )

Et voici le script associé :

// Répertoire à scanner
$cheminDossier = 'Outils';
$Sortie = listerFichiers($cheminDossier);

echo '<br>'.'Répertoire : '.$cheminDossier.'<br>================='.'<br>';

$result = explode('/', $Sortie);

foreach ($result as $value) {
echo "Résultat : ".'<br>' ;
print_r($result);
echo $value .'<br/>';
}

Donc, je ne vois pas pourquoi, ça ne marche pas, même si j'ai un doute sur le "foreach" !

Merci par avance pour vos retours

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 août 2025, 20:49

Dans mon message, je t'avais indiqué "Pour chaque élément", il faut donc mettre l'explode() dans le foreach ;-)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 11 Messages

27 août 2025, 19:11

Je reviens vers vous, car je butte sur le script.

Il me renvoie l'erreur : "Warning: Invalid argument supplied for foreach()"

Voici mon script, en ayant intégré l'explode dans la boucle foreach. Donc, je suis un peu perdu

$cheminDossier = 'Outils';
$Sortie = listerFichiers($cheminDossier);

foreach ($Sortie as $value)
{
$result = explode('/', $Sortie);
print_r($result);

echo $value .'<br/>';
}

Merci pour votre retour

Cdlt

Mammouth du PHP | 2703 Messages

27 août 2025, 19:21

quel est le code de listerFichiers ? cette fonction ne peut-elle pas faire le travail ?

Eléphanteau du PHP | 11 Messages

27 août 2025, 19:25

Voici le code de "listerFichiers"

function listerFichiers($cheminDossier) {
if (is_dir($cheminDossier)) {
if ($dossier = opendir($cheminDossier)) {
while (($fichier = readdir($dossier)) !== false) {
if ($fichier != "." && $fichier != "..") {
$cheminComplet = $cheminDossier . '/' . $fichier;
if (is_file($cheminComplet)) {
echo $cheminComplet . "<br>";
} elseif (is_dir($cheminComplet)) {
listerFichiers($cheminComplet);
}
}
}
closedir($dossier);
}

echo $fichier;

} else {
echo "Le dossier '$cheminDossier' n'existe pas ou ne peut pas être ouvert.<br>";
}
}

Mammouth du PHP | 2703 Messages

27 août 2025, 19:32

c'est à partir de ce code qu'il faut arriver à ce que vous voulez. si le niveau de profondeur ne change pas, seul le nombre de fichiers dans un répertoire change, alors, cela peut être plus simple de le faire sans fonction récursive.

Eléphanteau du PHP | 11 Messages

27 août 2025, 19:46

Oui, le niveau de profondeur est toujours ainsi : répertoire et sous-répertoire

Mais mes connaissances en PHP s'arrêtent là !

Merci

Mammouth du PHP | 2703 Messages

27 août 2025, 19:57

l'idée est la suivante
$repertoires = opendir("outils");
while(...){ // parcours de $repertoires
  $fichiers = opendir(...);
  while(...){ // parcours des fichiers
    // execution de la requete sql
  }
}

Eléphanteau du PHP | 11 Messages

27 août 2025, 20:01

Merci
Je teste rapidement et reviens vers vous

Eléphanteau du PHP | 11 Messages

09 sept. 2025, 19:20

Bonjour,

J'ai beau tourner dans tous les sens les différentes fonctions PHP, j'arrive toujours sur la même erreur.
Il doit y avoir quelque chose qui m'échappe, mais quoi ! ?

Je remets ici mon bout de code :

foreach( $Sortie as $value ){
$Output = explode('/', $Sortie);
print_r($Output);
}

Avec le message d'erreur suivant : Warning: Invalid argument supplied for foreach()

Merci par avance pour votre aide

Mammouth du PHP | 2703 Messages

09 sept. 2025, 19:44

la fonction listerFichiers ne retournant rien, le message d'erreur est logique.

Eléphanteau du PHP | 11 Messages

11 sept. 2025, 17:54

Bonjour,

Il me suffisait bien de mettre l'explode au bon endroit et magie, ça fonctionne
Merci à vous tous