Aller au contenu

Sujets conseillés

Posté

Bonjour

Je sais écrire une expression qui utilise un ou deux niveaux de délimiteurs; à 2 niveaux :


onclick='fonctionToto("<?php echo $adresse; ?>")'

en utilisant les deux délimiteurs habituels.

Mais comment faire quand on a besoin de 3 niveaux de délimiteurs comme ici :


document.write ('<button type="button" onclick="fonctionToto(\'<?=$adresse ?>\')" class="bouton2"><span class="libelle2"</span></button>');

Comme vous le voyez, jai essayé \' comme délimiteur, \" aussi, mais ça ne fonctionne pas.

Difficulté : le contenu de $adresse est une chaine de caractères qui comporte plusieurs espaces.

Par avance merci de votre aide.

Francois

Posté

Ca pourrait probablement aider d'avoir un peu plus de contexte (on suppose que cette ligne de code est dans du JS à l'intérieur d'un document HTML), et plus de détails sur "ça ne fonctionne pas", genre le message d'erreur et tout ça (si si, tous les browsers modernes sont capables de te donner des messages d'erreur).

Dans le contexte supposé, il n'y a pas de raison que ça ne marche pas (si $addresse ne contient ni " ni ' évidemment). On suppose que tu n'es pas en fait dans un onxxx d'un tag html mais bien dans du JS, et dans du HTML directement et pas dans du HTML généré par du PHP...

Jacques.

Posté

bonjour, Oui j'avais fait un peu court.

Voila, un peu de code:


<script type="text/JavaScript">
if (test_prog("<?php echo $adresse; ?>"))
{document.write ('<button type="button" onclick="lancerstart(' + <?=$adresse ?> + ')" class="bouton<?php echo $bouton_bureautique; ?> <?php echo $couleurBoutonBureautiqueSysteme; ?>"><span class="libelle"><?php echo $nom ; ?></span></button>'); }
else
{document.write ('<button type="button" onclick="lancerstart(\'<?=$adresse ?>\')" class="bouton<?php echo $bouton_bureautique; ?> gris1gris2"><span class="libelle"><?php echo $nom ; ?></span></button>');
}
</script>

pour l'appel, et voila le code de la fonction lancerstart():


{ var w = new ActiveXObject("WScript.Shell");
//w.run ('cmd /c "'+exe+'"');
w.run ('cmd /k "'+exe+'"'); // debug
}

Suivant les essais que je fais en variant les délimiteurs autour de <?=$adresse ?>, le résultat varie:

- une fenêtre de l'invite de commande affiche un message disant 'C:program' n'est pas reconnu ...

- il ne se passe rien

En espérant avoir été plus clair cette fois ci.

Francois

Posté

Déjà dans le premier document.write je pense que ton quoting est complètement off.

Ensuite si $adresse contient des \ il va falloir les escaper (les doubler).

Si avec ça ça ne fonctionne pas:

- regarder le source de la page générée pour vérifier que ça correspond à ce que tu attends une fois que php est passé par là

- ajoute une trace (alert par exemple) pour voir le contenu de exe dans lancerstart, tu verras déjà quelle tête il a vu par JS (là je pense que le "c:\program files\machin.." est devenu "c:program filesmachin..."

A part ça, ça m'a l'air horriblement dangereux cette histoire de WScript.Shell. J'espère que c'est sur un site à usage interne (genre Intranet)! Evidemment le fait que tu utilises un ActiveX fait que tu ne peux utiliser que IE, ce qui limite pas mal les possibilités de debug, mais alert est ton ami :-)

Jacques.

Posté (modifié)

Jacques, merci de ta réponse.

J'ai refait un essai avec la syntaxe qui me parait la meilleure; voici le code généré copié depuis le panneau dans IE, limité au document.write:


document.write ('<button type="button" onclick="lancerstart(\'C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE\')" class="bouton3 rose1rose2"><span class="libelle">Excel</span></button>');

Le résultat a été le message d'erreur dans la boite de l'invite: "C:program n'est pas reconnu ...

Il semble que le début du chemin seulement est pris en compte jusqu'au premier espace, entre Program et Files.

J'ai refait un essai avec \\\\ au lieu de \\ comme séparateur dans le chemin: ça fonctionne.

Merci de ton aide.

Francois

Modifié par francoisch
Posté

Ajoute un alert(exe) dans lancerstart pour voir à quoi il ressemble à ce moment-là. Et fais un alert(ce que tu passes comme argument à w.run).

Jacques.

Posté

Jacques

Avec l'Alert ajouté, la boite s'ouvre et affiche mon chemin complet avec un seul anti slash: C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE

Ca te parait bon?

Francois

Posté

Maintenant, enlève le "alert" et laisse faire l'exécution de ton script.

Ce qu'il faut savoir, c'est que \" échappé devient \\\" un \ pour échapper le \ et un autre \ pour échapper le "

Posté

Bonjour,

Tu ne peux pas t'en sortir en déclarant ton adresse préalablement dans une variable javascript ? En plus, ça te ferait un gain de place. :)

<script type="text/Javascript">
var monadresse = "<?=$adresse;?>";
if (test_prog(adresse))
{document.write ('<button type="button" onclick="lancerstart(adresse)" class="bouton<?php echo $bouton_bureautique; ?> <?php echo $couleurBoutonBureautiqueSysteme; ?>"><span class="libelle"><?php echo $nom ; ?></span></button>'); }
else
{document.write ('<button type="button" onclick="lancerstart(adresse)" class="bouton<?php echo $bouton_bureautique; ?> gris1gris2"><span class="libelle"><?php echo $nom ; ?></span></button>');
}
</script>

Posté

bonjour et merci de vos réponses.

Maintenant que ça fonctionne, je crois que je vais rester comme je suis, avec cette variable Php.

Merci encore.

Francois

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...