Passer une variable dans du JS(json_encode())

Fermé
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 - 10 avril 2009 à 10:09
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 - 10 avril 2009 à 13:28
Bonjour,

J'ai actuellement un tableau PHP qui possède des valeurs.
j'ai transforme ce tableau en JSON grace à la fonction json_encode().
Ce que j'aimerai savoir c'est comment le faire passer en parametre dans ma fonction JS et récupérer toute les valeurs dans cette fonction ?

$j=0;
$mydir = "../upload/".$prenom.".".$nom."/".$titre."/";
if ($dir = @opendir($mydir))
{

while (($file = readdir($dir)) !== false)
{
if($file != ".." && $file != ".")
{
$j = $j+1;
$filelist[] = $file; ;
}
}
closedir($dir);
}

$lien="../upload/$prenom.$nom/$titre/";
$fichier=json_encode($filelist);

<input type="image" title="lecture"value="Fenetre" src="../img/lecture.png" onclick="creer_fenetre(400,400,300,500,'<?php echo $titre; ?>','<?php echo $text; ?>','<?php echo $lien; ?>','<?php $fichier; ?>')" />

voila comment récupérer toute les valeurs dans ma fonction JS

15 réponses

NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
10 avril 2009 à 10:13
En arrivant dans la fonction js vous devez faire un .value sur la variable correspondant à $fichier
1
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
10 avril 2009 à 10:16
En faisant :
function creer_fenetre(left,top,width,height,titre,texte,lien,fichier) {

alert(lien);
alert(fichier.value);

Cela me donne toujours undefined.
Peut être une erreur au niveau du passage des paramètres ?
1
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
10 avril 2009 à 10:23
Comme vous êtes sur Firefox je vais vous donner mon fameux conseil (lol), allez télécharger le module firebug de firefox, il comprend notamment un debugger de code javascript.
Si vous choisissez de le prendre je vous indiquerai la manœuvre à suivre pour vériifer vos résultats.

Sinon je pense que c'est un problème de format sinon.
En entrée de la fonction JS il faudrait remettre en forme l'objet JSON et là on pourra utiliser le value :
var myObjectJSON = eval('(' + var_fichier + ')');
var données = myObjectJSON.value;
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
10 avril 2009 à 10:36
J'ai déjà ce module mais je veut bien la marche à suivre pour utiliser le debugger.

Sinon je vient de tester

function creer_fenetre(left,top,width,height,titre,texte,lien,fichier) {

alert(lien);
var myObjectJSON = eval('(' + fichier + ')');
var donnes = myObjectJSON.value;
alert(donnes);

Le premier alert s'affiche mais pas le deuxième je doit avoir une erreur de syntaxe.
1
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
10 avril 2009 à 10:42
et si vous faites un alert(fichier) au niveau de l'alert(lien) ? Qu'est-ce qui est affiché?
1

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

Posez votre question
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
10 avril 2009 à 10:44
function creer_fenetre(left,top,width,height,titre,texte,lien,fichier) {

alert(lien);
alert(fichier);
var myObjectJSON = eval(fichier);
var donnes = myObjectJSON.value;
alert(donnes);

Il m'affiche rien du tout. La boite d'alert s'ouvre mais elle est vide.
1
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
10 avril 2009 à 10:47
vous avez oublié le echo devant $fichier dans l'appel de la fonction js
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
10 avril 2009 à 10:53
Le problème c'est que lorsque je met le echo devant $fichier mon bouton qui fait appel à creer_fenetre() ne fonctionne plus. Même l'alert lien ne fonctionne plus.
1
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
10 avril 2009 à 10:55
vérifiez ce qu'il y a dans votre $filelist
1
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
10 avril 2009 à 11:03
Après un

$lien="../upload/$prenom.$nom/$titre/";
echo $filelist[0]; echo "<br />";
echo $filelist[1];
$fichier=json_encode($filelist);
echo $fichier;

cela m'affiche bien les deux noms de mes deux dossiers uploader cad :

echo $filelist[0]; echo "<br />"; ==>> 2008_A2_GIR_dupond_john.pdf
echo $filelist[1]; ==>> sitemap.pptx
echo $fichier; ==>> ["2008_A2_GIR_dupond_john.pdf","sitemap.pptx"]

Tout est bon à ce niveau normalement
1
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
10 avril 2009 à 11:15
bon remettez le echo $fichier dans l'appel, mettez tout le code de la fonction js en commentaires en ne gardant que alert(fichier);

EDIT : comment utiliser Firebug :
Cliquez sur l'insecte en bas à droite de la fenêtre du navigateur ou ouvrez firebug avec F12
Cliquez sur le sous-onglet script.
Dans le menu onglets vous avez alors Inspecter|Tous v | nom du fichier ouvert
Si le fichier ouvert est le bon laissez ainsi, sinon cliquez sur le nom et cherchez votre fichier dans la liste qui est apparue.
Vous avez à votre droite une petite fenêtre avec Espions | Pile | Points d'arrêt
Nous allons nous intéresser au premier et au dernier des onglets :
Points d'arrêt
Dans la partie gauche, au niveau de l'affichage du code du fichier, cherchez la ligne où vous souhaitez mettre un point d'arrêt (c'est à dire où arrêter le programme afin de voir l'état des variables etc du moment que vous avez choisi) et cliquez à gauche du numéro de la dite ligne. Un point rouge apparaît.
L'onglet Points d'arrêt affiche tous les points d'arrêts que vous avez placé.
Enlever point d'arrêt : cliquez sur le point rouge ou passez dans le menu points d'arrêt et appuyer sur la croix rouge à droite de l'élément désiré
Désactivé un point d'arrêt (vous gardez ainsi son emplacement) : décoché la case à gauche de l'élément
Voir où se trouve le point d'arrêt : cliquer sur le lien bleu de l'élément

Options de défilement :
Vous pouvez mettre autant de point d'arrêt que vous le souhaitez.
Pour passer au point d'arrêt suivant : F8 ou la flèche de lecture en haut à droite de firebug.
Pour faire ligne à ligne : F10 ou F11(plus détaillé) ou pas à pas sortant (dernière flèche)

Espions
Lorsque vous vous trouvez dans le code, z dans cet onglet, ensuite mettez en surbrillance les éléments dont vous voulez tester la valeur puis clic droit-> ajouter un espion. Vous aurez ainsi la valeur affichée dynamiuement et vous pourrez parcourir les différents attributs de l'élément s'il en a en cliquant sur le + à côté de l'élément
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
10 avril 2009 à 11:27
L'alert ne fonctionne pas.
Quand je met le echo, le bouton qui ouvre ma fonction JS ne fonctionne pas.
Quand je met pas le echo par contre ma fonction s'ouvre mais il n'y a rien qui s'affiche dans l alert
1
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
10 avril 2009 à 11:29
Regardez la modif de mon post juste au-dessus ainsi vous pourrez tester plus efficacement je pense
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
10 avril 2009 à 11:31
Je regarde et je vous dit quoi.
1
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
10 avril 2009 à 11:34
si c'était une question vous mettez un point d'arrêt sur la première ligne de la fonction js et vous ajouter un espion sur "fichier"
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
10 avril 2009 à 11:45
Alors je vient de regarder. Quand je met un echo $fichier dans mon passage de paramètre, firebug affiche :

87 <tr>
<input type="image" title="lecture"value="Fenetre" src="../img/lecture.png" onclick="creer_fenetre(400,400,300,500,'poutre','<span class=\'ttgros\'><div class=\'centrebb\'><span class=\'vertc\'>COUCOU</span></div></span>','../upload/quentin.thomas/poutre/','["2008_A2_GIR_FIRON_FRANCOIS.pdf","sitemap.pptx"]')" />

Donc apparament $fichier vaut bien ["2008_A2_GIR_FIRON_FRANCOIS.pdf","sitemap.pptx"].
Quand je clique sur mon bouton JS pour afficher la fenetre sa me dit :

unterminated string literal
[Break on this error] creer_fenetre(400,400,300,500,'poutre','...>','../upload/quentin.thomas/poutre/','[


Quand je met le point d arret sur alert(fichier); et un espion sur fichier, firebug me dit : ReferenceError: texte is not defined

Voila se qu'il me dit.
1
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
10 avril 2009 à 11:48
C'etait juste une expression je vous dits quoi :D
1
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
10 avril 2009 à 11:52
ah ben normal que ça marche pas.
La variable $fichier contient des ".
Ok maintenant faites le même test que celui là sans le echo
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
10 avril 2009 à 11:58
Sans le echo sa donne :

<input type="image" title="lecture"value="Fenetre" src="../img/lecture.png" onclick="creer_fenetre(400,400,300,500,'sitemap','<span class=\'rouge\'>Sitemap</span>','../upload/quentin.thomas/sitemap/','')" />

En mettant le point d'arret et l'espion la valeur est null dans la fonction JS ce qui est un peut normal.
1
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
10 avril 2009 à 12:01
Je trouve ça bizarre que le JSON ne puisse pas être passé plus simplement mais bon je suppose que c'était aps vraiment prévu pour ça.
Bref je vois une solution simple et efficace :
faire un remplacement dans $fichier de tous les " par des \"
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
10 avril 2009 à 12:18
J'ai fait ce que tu as dits j'ai utiliser un regex pour faire le remplacement:
Cela donne :


$fichier=json_encode($filelist);
echo $fichier; ==>> ["2008_A2_GIR_FIRON_FRANCOIS.pdf","sitemap.pptx"]
$fichier = preg_replace ("#[\"]#isU",'\"', $fichier);
echo $fichier ==>> [\"2008_A2_GIR_FIRON_FRANCOIS.p\"\",\"sitemap.pptx\"]

Donc sa fonctionne je passe en parametre de cette facon :

<input type="image" title="lecture"value="Fenetre" src="../img/lecture.png" onclick="creer_fenetre(400,400,300,500,'<?php echo $titre; ?>','<?php echo $text; ?>','<?php echo $lien; ?>','<?php $fichier; ?>')" />

Au final avec firebug je pose l'espion sur fichier et il me dit : ReferenceError: fichier is not defined avt il me disait ReferenceError: text is not defined

Le JSON est peut etre pas adapter pour ca. Si tu as une autre idée pour passer ce tableau PHP dans ma fonction creer_fenetre, je suis preneur.
1
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
10 avril 2009 à 13:28
J'ai finalement réussie en faisant comme ceci :

PHP :

$fichier=implode(",",$filelist);

<input type="image" title="lecture"value="Fenetre" src="../img/lecture.png" onclick="creer_fenetre(400,400,300,500,'<?php echo $titre; ?>','<?php echo $text; ?>','<?php echo $lien; ?>','<?php echo $fichier; ?>','<?php echo $j; ?>')" />

JS :

function creer_fenetre(left,top,width,height,titre,texte,lien,fichier,nombre) {
alert(lien);
var fichier= fichier.split("," );
alert(fichier[0]);

Merci pour ton aide NookZ
1