France Hardware : Forums de discussion - Découvrez notre nouveau comparateur d'offres Internet
Retrouvez les prix près de chez vous :  
Index du forum | Liste des membres | Liste des groupes | Inscription | F-A-Q | Recherche
Pseudo :    Password :     
29 511 membres enregistrés - 2 069 318 posts - 122 026 topics
Index des forums FH  | Index des forums DegroupNews
      Programmation
           Bases de données
                problème ouverture de fichier avec apostrophe
76 connectés(record : 2799 le 29 May 2016 - 15 h 34)

Vous devez vous connecter pour répondre au topic.
problème ouverture de fichier avec apostrophe

ahmet57


Messages : 6
Inscrit le 04/05/06
Ville : fameck
Non connecté
  Posté le 04 May 2006 - 13 h 51 m 44 s
Bonjour,


voila mon problème.

J'ai un programme PHP qui ouvre des fichiers word, excel, ppt connaissant le chemin du fichiers (récupérer depuis une champ d'une base de données)

Lorsque je click sur un lien, il m'ouvre le fichier correspondant à ce lien.

Par contre j'ai un problème avec l'ouverture de fichier dont le chemin comporte une apostrophe (').

J'ai procédé de la façon suivante.
J'ai des focntions javascript qui me permettent d'ouvrir des fichiers excel, word, ppt, en entrant le chemin du fichier comme paramètre d'entré.
Par contre les caractères spéciaux m'ont posés des problèmes (j'ai du remplacé l'espace par %20 et le & par %26 qui correspondent à leur valeur hexadécimal).

Avec cette manipulation, ca fonctionnait correctement.

Par contre, j'ai des chemins qui comportent des apostrophes, j'ai procédé de la même façon en remplacant ce caractère par son code hexa mais pour ces fichiers ça fonctionne pas.
Pourtant, il m'affiche bien le chemin du fichier correctement, et me dit que le fichier existe mais il ne me l'ouvre pas.

Pouvais vous m'aider svp c'est urgent ???

Merci



voila un détail de la programmation

.........


if ($var==1 && $lien_ind!="")
{
$OutputBarreH .= "<form name='formListPages' method='POST'>";
$lien_ind=trim($lien_ind);
$lien_ind = str_replace('%20',' ',$lien_ind);
$lien_ind = str_replace('%26','&',$lien_ind);
$lien_ind = str_replace('%27','\'',$lien_ind);//%27 -- &#146;*/
$lien_ind = str_replace('%40','@',$lien_ind);
$lien_ind = str_replace('%3B',';',$lien_ind);
$CheminObjectifs = str_replace('\\','\\\\',$lien_ind);
if (file_exists($CheminObjectifs))
{
$FichierExiste = True;
}
if ($FichierExiste)
{
$longueur=strlen($CheminObjectifs);
$typefichier=substr($CheminObjectifs,$longueur-3);
$OutputBarreH .= "<script language=\"JavaScript\">";
$OutputBarreH .="<!-- ".chr(13);
if($typefichier=="doc")
{$OutputBarreH .=" OuvrirDOC('".$CheminObjectifs."','index.php?Niveau=".$Niveau."&IndexObjectif=".$IndexObjectif."&ObjectifAChanger=-1&EtatObjectif=-1&Submit=0&EtatObjectif=-1&Submit=0&EtatAffich=$EtatAffich&strategie=$strategie&ServiceCode=$ServiceCode&Niveau=$Niveau&Departement=&Service=&Ancre=0')";}
if($typefichier=="ppt")
{$OutputBarreH .=" OuvrirPPT('".$CheminObjectifs."','index.php?Niveau=".$Niveau."&IndexObjectif=".$IndexObjectif."&ObjectifAChanger=-1&EtatObjectif=-1&Submit=0&EtatObjectif=-1&Submit=0&EtatAffich=$EtatAffich&strategie=$strategie&ServiceCode=$ServiceCode&Niveau=$Niveau&Departement=&Service=&Ancre=0')";}
if($typefichier=="xls")
{$OutputBarreH .=" OuvrirXLS('".$CheminObjectifs."','index.php?Niveau=".$Niveau."&IndexObjectif=".$IndexObjectif."&ObjectifAChanger=-1&EtatObjectif=-1&Submit=0&EtatObjectif=-1&Submit=0&EtatAffich=$EtatAffich&strategie=$strategie&ServiceCode=$ServiceCode&Niveau=$Niveau&Departement=&Service=&Ancre=0')";}
$OutputBarreH .=" //--> ";
$OutputBarreH .=" </script> ";
$OutputBarreH .= "</form>";
}
}

.......


$Requete = "SELECT stru_id, stru_intitule,stru_departement,stru_service,stru_etatmois, stru_cumulan, stru_prevision ,stru_comment1, stru_comment2,stru_lien_ind ";
$Requete .= "FROM structure WHERE stru_niveau = $Niveau AND stru_pere_id = $IndexObjectif ORDER BY stru_intitule";

$Resultat = MySQL_Query($Requete) or die ('Erreur de requête : '.mysql_errno().',<br> '.mysql_error().',<br> '.$Requete);



while($ctItem = mysql_fetch_array($Resultat))
{
$Intitule = $ctItem["stru_intitule"];
$Id = $ctItem["stru_id"];
$IdIco = $Id;
$Dept = $ctItem["stru_departement"];
$Serv = $ctItem["stru_service"];
$lien_ind1 = $ctItem["stru_lien_ind"];
$lien_ind1 = trim($lien_ind1);
$lien_ind1 = str_replace(' ','%20',$lien_ind1); // sinon il n'arrive pas à trouver le fichier
$lien_ind1 = str_replace('&','%26',$lien_ind1);
//$lien_ind1 = str_replace(' ','&#160;',$lien_ind1);
$lien_ind1 = str_replace('\'','%27',$lien_ind1);// %27 -- &#146;
$lien_ind1 = str_replace('@','%40',$lien_ind1);
$lien_ind1 = str_replace(';','%3B',$lien_ind1);

...
$Output[$j] .= "<td width='40' height='5'><a href=index.php?Niveau=$Niveau&IndexObjectif=$IndexObjectif&ObjectifAChanger=-1&EtatObjectif=-1&Submit=0&EtatAffich=$EtatAffich&strategie=$strategie&ServiceCode=$ServiceCode&var=1&chem=$lien_ind1&Ancre=0>$Serv</a> </td>";
...









grabber
Coordinateur
MacBook Pro Powered

Messages : 9 506
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 04 May 2006 - 14 h 36 m 28 s
si tu mets un antislash devant ton apostrophe ca marche pas ?



:firefox: :ol:

ahmet57


Messages : 6
Inscrit le 04/05/06
Ville : fameck
Non connecté
  Posté le 04 May 2006 - 14 h 40 m 42 s
Non parrceque je récupère le chemin depuis une base de données, ce qui est bizarre c'est que lorsque j'affiche le chemin, il me l'affiche correctement avec l'apostrophe.

C'est seulement lorsque j'essai de l'ouvrir (il me dit que le fichier existe) mais il ne l'ouvre pas.




grabber
Coordinateur
MacBook Pro Powered

Messages : 9 506
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 04 May 2006 - 15 h 12 m 56 s
ben je pense que le probleme n'est pas la en fait, il fauit que tu traites les fichiers de donneees au depart en les renommant quand tu les uploades. par exemple, tu le renome au moment de l'uplod en virant tout ce qui est problematique : espaces, guillemets, ... et en remplacant ca par des underscores.
de cette maniere, ton probleme n'existe plus.

en clair 2 soluces :
- soit tu laisses tes users faire n'importe qyuoi avec les noms de fichiers,
- soit tu fais des expressions regulieres pour remplacer les carac merdiques en entree, de cette facon, tu es sur de l'acces a tes fichiers derriere.

perso, je prefere prevoir que guerir, donc je te conseillerai plutot de traiter le fichier en entree que derriere. en entree, tu le traites une fois, derriere, tu le traites a chaque fois... c pas top :)



:firefox: :ol:

ahmet57


Messages : 6
Inscrit le 04/05/06
Ville : fameck
Non connecté
  Posté le 04 May 2006 - 15 h 23 m 40 s
Je comprend pas trop.

Lorsque j'enregistre les chemin, pour chaque enregistrement je les enregistre à l'aide d'un bouton parcourir (dans une page structure.php).

Ensuite dans une autre page (index.php), j'affiche et je crée le lien pour ouvrir le fichier. Donc lorsque j'affiche le chemin à l'aide du formulaire qui est crée à la fin du fichier index.php, il m'affiche le chemin correctement.

C'est lorsque je reprend ce chemin au début du fichier index.php qu'il ne me prennait plus les espaces .... (caratères spéciaux).

J'ai remarqué dans un ptit programme de test que j'ai fais que l'espace était automatiquement remplacé par %20, (% + code hexa) c'est pour cela que j'ai fais la même chose.


par contre je vois pas trop ce que tu veux dire. Quand est ce que je devrais modifier les chemins ???




grabber
Coordinateur
MacBook Pro Powered

Messages : 9 506
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 04 May 2006 - 17 h 39 m 14 s
en fait t'as 2 facons de raisonner :

- soit tu fais comme tu fais actuellement, a savoir tu uploades, et ensuite tu gardes le meme nom de fichier, du coup si on uploade des fichiers windows, on risque de trouver des accents, des espaces, des caracteres speciaux et autres bizareries -> du coup probleme ensuie pour retrouver le fichier car tu n'as pas retraite le nom du fichier.

- soit lorsque tu uploades, au lieu de garder le meme nom de fichier, au moment ou tu copies le fichier du dossier temp du serveur vers l'emplacement definitif, tu specifies un nouveau nom sans espaces, caracteres speciaux...

par exemple :
nom de fichier original : "quelle merde ces caractères spéciaux de daube :).doc"
nom de fichier retraite : "quelle_merde_ces_caracteres_speciaux_de_daube.doc"

tu piges ?

en fait au lieu de te faire chier comme tu le fais actuellement car tu n'as pas teste les noms des fichiers uploades, tu ne mets sur le serveur que des noms "retraites", de ce fait, tu n'as plus de mprobleme pour les reutiliser derriere ;)

ton lien sera toujours ok.

pour faire ca, tu n'as qu'a recup le nom du fichier original puis de faire des ereg_replace dessus ou des str_replace, au choix. ensuite, une fois que la chaine est nikel, tu l'utilises comme nom du fichier de destination du serveur, et c'est ce nom la que tu mets dans ta base si necessaire :jap:

tu piges ?



:firefox: :ol:

ahmet57


Messages : 6
Inscrit le 04/05/06
Ville : fameck
Non connecté
  Posté le 05 May 2006 - 13 h 53 m 48 s
Moi pas comprendre ????

Moi ce que je fais c'est ca :

J'enregistre dans ma base de donnnées le chemin (fichier structure.php -- > fichier dans lequele j'enregistre mes liens, les choses à afficher)
Et à partir du fichier (index.php )dès que je clique sur un lien, j'ouvre le chemin tel qu'il est enregistré dans la base ...

Je vois pas trop quand modifier le chemin, parceque si je modifie les caratères spéciaux, lorsque je voudrais ouvrir le chemin, il va me dire que le fichier n'existe pas ...

:roll:




Woofy
Totalement inutile, complètement indispensable

Messages : 31 539
Inscrit le 11/01/02
Ville : Lyon
Non connecté
  Posté le 05 May 2006 - 15 h 16 m 48 s
Bah justement, avant d'envoyer le fichier sur le serveur, tu modifie le nom du fichier. Sisi c'est possible.
Ensuite, tu le met dans la base et c'est tout bon !
Par contre, je savais pas que les apostrophes étaient autorisées dans les noms de fichier !




grabber
Coordinateur
MacBook Pro Powered

Messages : 9 506
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 05 May 2006 - 16 h 53 m 36 s


Le 05 mai 2006 - 15 h 16, Woofy a écrit :
Par contre, je savais pas que les apostrophes étaient autorisées dans les noms de fichier !


dans les fichiers windaube, tu peux y coller des apostrophes ;)



:firefox: :ol:

grabber
Coordinateur
MacBook Pro Powered

Messages : 9 506
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 05 May 2006 - 17 h 00 m 31 s
ahmet > lorsque tu uploades un fichier, tu le fais via un bouton parcourir, jusque la on est ok.
ensuite, si tu regardes dans le code que tu as ecrit, tu dois avoir un truc dans ce genre :

    Code php    
1. if (is_uploaded_file($HTTP_POST_FILES['userfile'])) {    
2.   copy($HTTP_POST_FILES['userfile'], "/dossier/ou/placer/un/fichier/uploadé");
3. }


ben c'est la ou tu dois faire quelque chose. en fait, a cette etape, tu verifies si un fichier a bien ete balance via le champs parcourir. en fait, le fichier est parti dans le repertoire /tmp du serveur web, le copy permet ensuite de le mettre definitivement au bon endroit dans ton arborescence. mais comme quand tu copies un fichier classique en ligne de commandes, ici tu peux aussi donner au fichier le nom que tu veux et pas forcement garder le meme, ok ?

ben c'est ici que tu dois tester le nom du fichier, detecter les accents, les espaces et les autres merdes. tu les remplace par des underscores "_" et c'est tout.

c'est ce nouveau nom que tu vas ensuite coller dans ta base de donnees ;)

j'espere que c'est plus clair pour toi cette fois :jap:

++



:firefox: :ol:

Page genérée en 0.2461 secondes par RahForum 2.0 | Gzip off |  Stats |  Metaforums |  RSS
© 2004 Cerbere Systems.
Prix Matériel Informatique | Informatique Lyon | Informatique Grenoble | Informatique Annecy | Informatique Marseille | Informatique Bordeaux | Forum Informatique
ADSL | Actualité ADSL | Deligo | Appareil photo | Commande Au Volant
Creative Commons
Message Boards and Forums Directory