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

Langage PHP Discussion :

problème sur l'ouverture de fichier avec apostrophe (')


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 31
    Points
    31
    Par défaut problème sur l'ouverture de fichier avec apostrophe (')
    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

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2006
    Messages : 238
    Points : 103
    Points
    103
    Par défaut
    Salut,
    à ma conaissance pour résoudre un problèpe d'apostrophe(') il faut juste ajouter un anti-stash(\) avant (').

  3. #3
    Membre éclairé Avatar de Yobs
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 675
    Points : 846
    Points
    846
    Par défaut
    Utilise les doubles quotes " au lieu des ' pour encadrer ton chemin
    Chaque problème a une solution, mais il est plus facile de répondre si le problème est correctement renseignés

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 31
    Points
    31
    Par défaut
    Ca marche seulement pour l'affichage d'une apostrophe


    Mais lorsque je vais chercheer la chemin complet depuis une base de donnés, je crois que ca fonctionne pas comme ca ....

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 31
    Points
    31
    Par défaut
    attends yobs jvai regardé comment javais fais ...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2006
    Messages : 238
    Points : 103
    Points
    103
    Par défaut
    si tu nous donne un exemple de ton chemin

  7. #7
    Membre éclairé Avatar de Yobs
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 675
    Points : 846
    Points
    846
    Par défaut
    Multipost, fais attention aux Règles du Forum
    Chaque problème a une solution, mais il est plus facile de répondre si le problème est correctement renseignés

  8. #8
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 31
    Points
    31
    Par défaut
    par exemple :

    P:\test\plan d'action.doc

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Salut,
    écris ici le code php que tu as utilisé pour voir si tu as une erreur syntaxique .
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

  10. #10
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 31
    Points
    31
    Par défaut
    voila la requete que j'ai fait pour insérer les champs:
    lorsque je met '$intitule', ca veut dire que intitule est une chaîne de caractère :

    $Requete = "UPDATE structure SET stru_intitule='$Intitule', stru_service='$Service', stru_departement='$Departement', stru_pere_id=$Parent, stru_niveau=$NiveauChoisi, stru_lien_ind='$lien_ind' WHERE stru_id=$StruId ";

    Comment je pourrais faire pourencapsuler ma requete pas ' et non par " et prendre en compte les chaines de caractères

  11. #11
    Membre éclairé Avatar de Yobs
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 675
    Points : 846
    Points
    846
    Par défaut
    $Requete = 'UPDATE structure SET stru_intitule="'.$Intitule.'", stru_service="'.$Service.'", stru_departement="'.$Departement.'", stru_pere_id='.$Parent.', stru_niveau='.$NiveauChoisi.', stru_lien_ind="'.$lien_ind.' WHERE stru_id=$StruId ';
    Colorez votre code PHP sur les forums grâce à Developpez.com
    Chaque problème a une solution, mais il est plus facile de répondre si le problème est correctement renseignés

  12. #12
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 31
    Points
    31
    Par défaut
    J'ai une erreur

    Erreur de requête : 1064,
    Erreur de syntaxe près de '"M:\\test\\plan d\'action.doc WHERE stru_id=$StruId' à la ligne 1

    Le chemin a ajouter est : M:\test\plan d'action.doc

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2006
    Messages : 238
    Points : 103
    Points
    103
    Par défaut
    je pense qu'il y a deux solution:

    1)changer le nom de votre doc et éviter l'apostrophe (') -->plan_action.

    2)suprimer l'anti-slash avant l'apostrophe d'action.


  14. #14
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 31
    Points
    31
    Par défaut
    je ne peux pas changer le nom du fichier (cahier des charges)
    il faut que je sache si c'est possible au moins d'ouvrir des fichiers dont le chemin comporte une apostrophe

    Initialement je n'avais pas de problème de requete. Ce n'est pas le problème d'origine, j'arrive à bien insérer le chemin complet comme il le faut dans ma table.

    Mon problème est expliqué dans le 1er message que j'ai laissé

    Merci de bien vouloir m'aider

  15. #15
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 31
    Points
    31
    Par défaut
    voila une partie 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 -- ’*/
    $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 -- ’
    $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>";
    ...

  16. #16
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    $Requete = sprintf("UPDATE structure SET stru_intitule='$Intitule', stru_service='$Service', stru_departement='$Departement', stru_pere_id='$Parent', stru_niveau='$NiveauChoisi', stru_lien_ind='$lien_ind' WHERE stru_id='$StruId' ");

    Et une derniére astuce , précede toujours un anti-slash par un anti-slash , donc plus simplement , si tu veux faire un anti-slash , écris-le deux fois , car si par exemple l'anti-slash précede n , donc php va l'interpreter comme un saut de ligne !
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

Discussions similaires

  1. Problème sur VBA : ouverture d'un fichier Excel Réseau
    Par michelsimon dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/12/2012, 20h59
  2. Problème ouverture de fichiers avec NetBeans
    Par miouzeu dans le forum NetBeans
    Réponses: 5
    Dernier message: 19/09/2012, 17h11
  3. [XL-2007] Problème sur l'ouverture d'un fichier powerpoint
    Par Aeltith dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/03/2012, 22h41
  4. [DOM] Problème d'accent sur les noms de fichier avec mon parseur
    Par ujoodha dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 06/04/2006, 21h55
  5. Aide sur ouverture de fichier avec access
    Par FusionR dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 17/06/2004, 12h02

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