Aller au menu - Aller au contenu

soucis PHP & JSON

Pour accéder à cette section
Connectez-vous !
connexion_rpx

Résolu Le problème de ce sujet a été résolu

Offre d'emploi : Développeur Web PHP/Drupal (H/F)

Page 1 
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1 
Hors ligne Elvinz # Posté le 08/02/2012 à 10:49:53
Avatar

Études : BTS IRIS

Alors voilà après de longues heures de recherche, j'ai un certain soucis avec ma page php générant une trame JSON. L'erreur vient à 100% de celle-ci, qui doit encoder la trame au format JSON. La trame a plutôt l'air de bien s'encoder mais IMPOSSIBLE de l'utiliser par la suite. Je vous donne les éléments:

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php

	require_once('JSON.php');
	$json = new Services_JSON();
	
	// Connexions aux serveurs MySQL
	$mySQL_local = mysql_connect("localhost","****","****")
			or die("Erreur de connexion à MySQL local");
	$mySQL_tarot = mysql_connect("localhost","******","******") or die("Erreur de connexion à MySQL local");
	//$mySQL_tarot = mysql_connect("*****","","*******") or die("Erreur de connexion à MySQL tarot");
	
	// Selection des schémas MySQL
	$bdd_local = mysql_selectdb("ros", $mySQL_local)
			or die("Base MySQL local introuvable");
	$bdd_tarot = mysql_selectdb("ros", $mySQL_tarot)
			or die("Base MySQL tarot introuvable");
	
	// Requete de pré-selection de la table gardien où les valeurs valent 0 ou 1
	$req1 = mysql_query("SELECT * from gardien where value='0' or value='1' order by varname",$mySQL_local)
			or die("Erreur sur la requete 1");
	
	// Rangement des valeurs des "value" et des "varname" de la requête pour chacune des lignes dans un tableau (array)
	$i=0;
	while($data_req1 = mysql_fetch_array($req1)){
		$valeur[$i] = $data_req1['value'];
		$nom[$i] = $data_req1['varname'];
		
		$value{"tableauElectrique"}{$i}{"name"}=$data_req1['varname'];
		$value{"tableauElectrique"}{$i}{"value"}=$data_req1['value'];
		$i++;
	}
	

	// Encodage de "value" au format JSON
	$output = $json->encode($value);
	print($output);
	
	// Fermeture des connexions aux serveurs MySQL
	mysql_close($mySQL_local);
	mysql_close($mySQL_tarot);
?>


On a en résultat en l'exécutant:

{"tableauElectrique":[{"name":"Arret_Urgence","value":"0"},{"name":"EAlimControleTelescope","value":"1"},{"name":"EAlimFlatField","value":"1"},{"name":"EAlimPrise1","value":"0"},{"name":"ELumiereTelescope","value":"0"},{"name":"FDC_F","value":"1"},{"name":"FDC_O","value":"0"},{"name":"LightDetector","value":"0"},{"name":"Pluie","value":"1"},{"name":"R_Climatisation_1","value":"0"},{"name":"RainRate","value":"0"},{"name":"Variateur_Toit","value":"0"}]}


Voilà si vous avez la moindre idée de la où pourrait se trouver l'erreur qui m'empêche d'avancer je vous serai grandement reconnaissant xD ! Merci
Publicité # Posté le 08/02/2012 à 10:49:53

Hors ligne christouphe # Posté le 08/02/2012 à 10:53:23
Avatar

Études : Université Paul Sabatier Toulouse

$output = $json->decode($value); ???

Une fois que vous éliminez l'impossible, peu importe si ce qui reste est improbable, ce devrait être la vérité. :p
"Tracker addict ;) :-° ", La POO en PHP, il n'y a que ça de vrai :D
La solution à vos problèmes en PHP - Un objet peut-il être en session ? - Comment utiliser correctement les dates dans un programme ? - /!\ A LIRE SI VOUS UTILISEZ PDO /!\
 
Hors ligne Elvinz # Posté le 08/02/2012 à 10:57:14
Avatar

Études : BTS IRIS

$output = $json->encode($value); :)
Hors ligne christouphe # Posté le 08/02/2012 à 11:44:25
Avatar

Études : Université Paul Sabatier Toulouse

encode == encoder vers JSON

decode == décoder vers affichage / tableau...

LA DOC JSON/PHP

Code : PHP
1
2
3
4
5
6
7
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($json, true));

?>


Résultat:

Code : HTML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}
Édité le 08/02/2012 à 11:47:35 par christouphe

Une fois que vous éliminez l'impossible, peu importe si ce qui reste est improbable, ce devrait être la vérité. :p
"Tracker addict ;) :-° ", La POO en PHP, il n'y a que ça de vrai :D
La solution à vos problèmes en PHP - Un objet peut-il être en session ? - Comment utiliser correctement les dates dans un programme ? - /!\ A LIRE SI VOUS UTILISEZ PDO /!\
 
Hors ligne Elvinz # Posté le 08/02/2012 à 13:04:44
Avatar

Études : BTS IRIS

Non en fait je dois l'encoder en JSON car je le décode ensuite dans un javascript :)
Hors ligne christouphe # Posté le 08/02/2012 à 13:09:22
Avatar

Études : Université Paul Sabatier Toulouse

le principe est le même avec les fonctions JS, je ne vois pas où est ton problème en fait.

Une fois que vous éliminez l'impossible, peu importe si ce qui reste est improbable, ce devrait être la vérité. :p
"Tracker addict ;) :-° ", La POO en PHP, il n'y a que ça de vrai :D
La solution à vos problèmes en PHP - Un objet peut-il être en session ? - Comment utiliser correctement les dates dans un programme ? - /!\ A LIRE SI VOUS UTILISEZ PDO /!\
 
Hors ligne Lord Casque Noir # Posté le 08/02/2012 à 13:14:11
Avatar

Le json a l'air bon...

- Pourquoi le capitalisme est-il au bord du gouffre ?
- Parce qu’il regarde le communisme qui est au fond.

Wizard book (web) / Optimise ton apache php mysql / C++ FQA Lite / template<> / The Man / delete new[] / Hardware / PIC16F / eventlet / lxml / Économie / Politique / empêcher le clic droit sur les images / goto linus<linus> / output buffering
 
Connecté artragis # Posté le 08/02/2012 à 13:15:02
Flux RSS

Études : ISEN Lille

oui ton code tel que tu le donne ne pose pas de problème, dire "ça ne marche pas" ne nous aide pas à comprendre ce qu'il se passe.

HTML/CSS : llllllllllllllllllll 100%
PHP/MVC : llllllllllllllllllll 100%(pour les tutos)
PHP lover, saviez vous qu'on peut créer un système de VoIP avec PHP?
mon blog : http://francoisdambrine.o-n.fr
 
Hors ligne Elvinz # Posté le 08/02/2012 à 14:30:12
Avatar

Études : BTS IRIS

Voila mon code coté javascript pour le moment:

Code : JavaScript
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
var delaisUpdate = 200;

function tableau() {
// récupération des valeurs depuis une page extérieur.
	var isClimatisation=false;
	var url="http://localhost/telescope/JSON/posTabElec.php"; // URL JSON
	var xhr=null;
	try
	{
		xhr = new XMLHttpRequest(); 
	} catch(e) { 
		try { 
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} 
		catch (e2) { 
			try {
				xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
			} 
			catch (e) {}
		}
	}
	xhr.onreadystatechange = function()
	{ 
		if(xhr.readyState == 4) { 
			if(xhr.status == 200) {
				var stringReponse = String(xhr.responseText);		// Trame JSON
				
				var myJSONObject = eval("("+stringReponse+")");						// Mise sous forme d'objet de la trame JSON
				window.alert("ca passe");
				var climatisation1 = String(myObject.tableau[9].value);				
			} 
			else { 
				// Si il y a une erreur de communication.
				
				window.alert("Error: returned status code " + 
					xhr.status + " " + xhr.statusText); // Affichage du message d'erreur et de son code.
			}
		}
	}; 
	xhr.open("GET", url, true);
	xhr.send(null);
}

window.addEventListener('load', tableau, false);

function timedCount(delaisUpdate)
{
	setTimeout("timedCount(delaisUpdate)",delaisUpdate);
	tableau();
}

timedCount(delaisUpdate);


Je lance ce javascript via une page HTML standard et quand je la débug avec Firefox j'obtiens un message d'erreur du type:
[14:28:45,103] missing ) in parenthetical @ http://localhost/telescope/tabElecCom.js:47

La ligne 47 correspondant au bout de code:
Code : JavaScript
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
xhr.onreadystatechange = function()
	{ 
		if(xhr.readyState == 4) { 
			if(xhr.status == 200) {
				var stringReponse = String(xhr.responseText);		// Trame JSON
				
				var myJSONObject = eval("("+stringReponse+")");						// Mise sous forme d'objet de la trame JSON
				window.alert("ca passe");
				var climatisation1 = String(myObject.tableau[9].value);				
			} 
			else { 
				// Si il y a une erreur de communication.
				
				window.alert("Error: returned status code " + 
					xhr.status + " " + xhr.statusText); // Affichage du message d'erreur et de son code.
			}
		}
	};
Édité le 08/02/2012 à 14:31:11 par Elvinz
Hors ligne Tracker # Posté le 08/02/2012 à 14:58:43
Avatar

Études : Université de Lyon

A priori en php tu renvoies une structure genre:
{ tableauElectrique : [ { value : ... }, ... ]

Et en javacript tu essaies d'accéder à
{ tableau : [ { value : ... }, ... ]

T.

Un peu de lecture: PHP // MySQL // JavaScript // SQL
Cherche Job en télétravail ou près de Lorient (56)
 
Connecté artragis # Posté le 08/02/2012 à 15:53:42
Flux RSS

Études : ISEN Lille

je me demande juste à quoi sert "eval" alors que Json.parse(variable) fonctionnerait parfaitement.

HTML/CSS : llllllllllllllllllll 100%
PHP/MVC : llllllllllllllllllll 100%(pour les tutos)
PHP lover, saviez vous qu'on peut créer un système de VoIP avec PHP?
mon blog : http://francoisdambrine.o-n.fr
 
Hors ligne Elvinz # Posté le 08/02/2012 à 17:46:28
Avatar

Études : BTS IRIS

JSON.parse ne change rien j'ai déjà essayé :(.
J'avais pris eval car c'était la solution adoptée par le précédent groupe de projet.

@Tracker: je viens de faire la modification qui en effet pouvait poser problème. Mais toujours ce "missing ) in parenthetical" :'(
Édité le 08/02/2012 à 17:54:13 par Elvinz
Connecté artragis # Posté le 08/02/2012 à 18:24:27
Flux RSS

Études : ISEN Lille

quelle erreur d'envoie JSON.parse?

HTML/CSS : llllllllllllllllllll 100%
PHP/MVC : llllllllllllllllllll 100%(pour les tutos)
PHP lover, saviez vous qu'on peut créer un système de VoIP avec PHP?
mon blog : http://francoisdambrine.o-n.fr
 
Hors ligne Elvinz # Posté le 08/02/2012 à 18:29:53
Avatar

Études : BTS IRIS

[18:29:37,435] JSON.parse: unexpected character @ http://localhost/telescope/tabElecCom.js:41

Donc l'erreur elle vient obligatoirement de mon encodage en JSON de ma trame dans ma page PHP :(
Édité le 08/02/2012 à 18:31:20 par Elvinz
Connecté artragis # Posté le 08/02/2012 à 18:32:06
Flux RSS

Études : ISEN Lille

il te dit quel caractère est "unexpected"?

HTML/CSS : llllllllllllllllllll 100%
PHP/MVC : llllllllllllllllllll 100%(pour les tutos)
PHP lover, saviez vous qu'on peut créer un système de VoIP avec PHP?
mon blog : http://francoisdambrine.o-n.fr
 
Hors ligne Elvinz # Posté le 08/02/2012 à 18:33:42
Avatar

Études : BTS IRIS

Me dit pas ce satané debugger de firefox :(
Connecté artragis # Posté le 08/02/2012 à 18:36:16
Flux RSS

Études : ISEN Lille

et si tu enlèves la ligne (inutile de toute façon) :var stringReponse = String(xhr.responseText);
xhr.responseText est toujours un string.
et si firefox ne te dit pas, regarde avec chrome ou IE9.

HTML/CSS : llllllllllllllllllll 100%
PHP/MVC : llllllllllllllllllll 100%(pour les tutos)
PHP lover, saviez vous qu'on peut créer un système de VoIP avec PHP?
mon blog : http://francoisdambrine.o-n.fr
 
Hors ligne Elvinz # Posté le 08/02/2012 à 18:39:54
Avatar

Études : BTS IRIS

Uncaught SyntaxError: Unexpected token <
xhr.onreadystatechange
Connecté artragis # Posté le 08/02/2012 à 18:45:59
Flux RSS

Études : ISEN Lille

??? tu as dû faire une faute de frappe
sinon j'ai trouvé ce que tu peux faire pour que ça marche :
var monObjet=JSON.parse(JSON.stringify(xhr.responseText));.
La chaîne envoyée par php était très bonne.

HTML/CSS : llllllllllllllllllll 100%
PHP/MVC : llllllllllllllllllll 100%(pour les tutos)
PHP lover, saviez vous qu'on peut créer un système de VoIP avec PHP?
mon blog : http://francoisdambrine.o-n.fr
 
Hors ligne Elvinz # Posté le 08/02/2012 à 19:59:07
Avatar

Études : BTS IRIS

CA MARCHE ! POUAAAAAAAAAAAAA ! Tu peux m'expliquer ta ligne stp :p MERCI MERCI MERCI !
Connecté artragis # Posté le 08/02/2012 à 20:01:34
Flux RSS

Études : ISEN Lille

Apparemment il faut que la chaîne JSON soient entourée de guillemets ou je ne sais trop quoi. en faisant Stringify() tu mets tout ce qu'il faut pour que ta chaîne JSON soit compréhensible
ensuite parse transforme tout ça en objet.

HTML/CSS : llllllllllllllllllll 100%
PHP/MVC : llllllllllllllllllll 100%(pour les tutos)
PHP lover, saviez vous qu'on peut créer un système de VoIP avec PHP?
mon blog : http://francoisdambrine.o-n.fr
 
Hors ligne Elvinz # Posté le 08/02/2012 à 20:04:01
Avatar

Études : BTS IRIS

Merci encore ;)
Hors ligne Tracker # Posté le 08/02/2012 à 20:06:24
Avatar

Études : Université de Lyon

Elvinz, au lieu de te galérer utilise Zend_Server_Json ...

T.

Un peu de lecture: PHP // MySQL // JavaScript // SQL
Cherche Job en télétravail ou près de Lorient (56)
 
Hors ligne Elvinz # Posté le 19/02/2012 à 20:55:15
Avatar

Études : BTS IRIS

Petit up qui pourrait servir aux autres pouvant avoir le même problème que moi dans le futur ou pour les curieux, en fin de compte je me suis remis au simple

Code : JavaScript
1
JSON.parse(monObjet)

l'erreur venait du fait que j'avais une entête d'information dans mon fichier PHP dans lequel est fait l'encodage au format JSON du style


Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<!--
//=======================================================================
// Projet AstrAcad
//
// Code : 			posTabElec.php
// Description: 	Onglet tableau électrique
					Requete SQL récupérations valeur variables
					pour le tableau électrique
//
// Auteur : 		
// Organisme:		
// Chef de projet: 	
//
//  Date : 			01/02/2012
//=======================================================================
-->


Problème solved !

Retour au forum "PHP" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx