Apostrophe dans nom fichier et dossier

JMKPROD Messages postés 68 Date d'inscription samedi 31 mai 2003 Statut Membre Dernière intervention 15 septembre 2007 - 5 sept. 2007 à 02:20
JMKPROD Messages postés 68 Date d'inscription samedi 31 mai 2003 Statut Membre Dernière intervention 15 septembre 2007 - 5 sept. 2007 à 15:26
Je réalise un gestionnaire de mp3 couplé à une base mysql pour gérer mes milliers de mp3. Grace aux nombreux bouts de code que j'ai pioché sur phpcs.com, je peux lister mes dossiers en récursivité, recupérer ma liste (extension "mp3" et m3u") jusque là pas de problème. Cependant quand il existe un apostrophe dans le nom du dossier ("Oliver N'GOMA") celui-ci est "zappé", de même pour les noms de fichier (Kassav'-Zouk la.mp3).
Remplacer " ' "  par " \' " ne donne rien, qu'elle solution adoptée?
Aider moi je ne veux pas avoir à renommer les dossiers et fichiers en question.

Merci d'avance

JMKPROD

6 réponses

coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
5 sept. 2007 à 09:21
Salut!
  Si tu nous donnais le code de lecture, ca serait plus facile pour t'aider, :-)

@++

R@f

La boîte à bouts de codes
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
JMKPROD Messages postés 68 Date d'inscription samedi 31 mai 2003 Statut Membre Dernière intervention 15 septembre 2007
5 sept. 2007 à 12:12
Bonjour,

Voici la fontion qui stocke dans la base le chemin des dossiers.
$i c'est pour le trie,
$n c'est pour réaliser une arborescence par la suite

function dos_mysql($rep) // Fonction pour lister les tous les dossiers dans mysql
{
 $dir = opendir($rep);
 global $id; while (false !($nom_dos readdir($dir))) // Boucle sur tout ce qu'il y a dans le rertoire
 {
  if ($nom_dos !="." && $nom_dos != "..")
  {
   if(is_dir($rep."[file://\\".$nom_dos \".$nom_dos])) // Si c'est un dossier
   {
    $id++;
    $chem=$rep."[file://\\".$nom_dos \".$nom_dos];
    $chem_mysql=str_replace("[file://\\","/",$chem \","/",$chem]);
    //On recupere le nb de segment du chemin
    $cut = explode("/", $chem_mysql);
    $n=count($cut);
    mysql_query("INSERT INTO dos_temp(id,chem,dos,n) VALUES ($id,'$chem_mysql','$nom_dos',$n)");
    dos_mysql($rep."[file://\\".$nom_dos \".$nom_dos]);
   }
  }
 }
 closedir($dir);
}

Si il y a 1 apostrophe dans $rep il n'est pas traité dans est absent dans la base.

Pour les fichiers je me suis mal expliqué, je les récupere bien malgré l'apostrophe mais je ne peux pas les ouvrir avec media player.

voici le code (Javascript!!)
function lire(mp3_file)
 {
  document.all.mediaplayer.innerHTML='';
 }

Rien si il y a 1 apostrophe dans mp3_file.

(Grand merci aux auteurs qui m'ont inspiré ces fonctions, ils se reconnaitront)

JMKPROD
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
5 sept. 2007 à 12:15
Remplace:
mysql_query("INSERT INTO dos_temp(id,chem,dos,n) VALUES ($id,'$chem_mysql','$nom_dos',$n)");

Par
mysql_query("INSERT INTO dos_temp(id,chem,dos,n) VALUES ($id,'" . addslashes( $chem_mysql ) . "','" . addslashes( $nom_dos ) . "',$n)");

@++

R@f

La boîte à bouts de codes
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
JMKPROD Messages postés 68 Date d'inscription samedi 31 mai 2003 Statut Membre Dernière intervention 15 septembre 2007
5 sept. 2007 à 14:20
Merci beaucoup pour ta réponse, la solution est surement là mais la tienne ne fonctionne pas.
Le probleme se situe avant l'insertion dans mysql.
Si j'utilise "addslashes" dans "$rep."[file://%22.$nom_dos/ \".$nom_dos]", l'apostrophe est bien précédé d'un "" mais celui-ci est reconnu comme un séparateur dans le chemin du dossier et j'ai l'erreur "failed to open dir".

HELP!!!!!!

JMKPROD
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
5 sept. 2007 à 14:22
Le addslashes, c'est juste pour l'insertion dans MySQL...
Et, éventuellement, stripslashes, te permettra de faire l'inverse quand tu récupères les données...

@++

R@f

La boîte à bouts de codes
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
JMKPROD Messages postés 68 Date d'inscription samedi 31 mai 2003 Statut Membre Dernière intervention 15 septembre 2007
5 sept. 2007 à 15:26
Je confirme que pour qu'il y ait insertion dans la base il faut que le dossier en question soit "reconnu" avant par : " $dir = opendir($rep); ".

si $rep= "Z:\JMK\labnet\gestion-mp3\zik\dossier1" ---> OK
si $rep= "Z:\JMK\labnet\gestion-mp3\zik\dossier'1" ---> dossier'1 est ignoré dans la recursivité.
si $rep=addslashes("Z:\JMK\labnet\gestion-mp3\zik\dossier1") ---> Fatal error: Maximum execution time of 30 seconds exceeded in //..........\jmk\labnet\gestion-mp3-050907\fonc_dos.php on line 29.

Dans "fonc_dos.php " j'ai +sieurs fonctions dont "dos_mysql($rep)".

Je ne comprend plus rien!

Question plus simple: Comment faire la fonction  "dos_mysql($rep)" fonctionner avec 1 apostrophe dans $rep???????????????

JMKPROD
0
Rejoignez-nous