Page 1 sur 1

aide pour json

Posté : 27 sept. 2010, 19:43
par ptitbonome
bonsoir a tous

je voudrais un coup de main car je bloque sur un quelque chose.

voila j'ai un script php qui me renvoi des réponses que j'encode en json.

voici ma requête :
 
$sql = ("select pseudo from membre where connecte=1");


$req = mysql_query($sql)or die(mysql_error());

while($data = mysql_fetch_array($req)){
	
	$myArray=$data['pseudo'];

echo json_encode($myArray);
//echo utf8_encode(''.json_encode($myArray).',');
}

?>
le résultat apparait ainsi :

"michel ""jason ""Ogy ""kossity ""vanessa ""david ""admin "

alors que moi je souhaiterais avoir un affichage comme ceci:

["michel","jason","ogy","kossity","vanessa","david","admin"]

y a t'il une possibilité?

cordialement

Re: aide pour json

Posté : 27 sept. 2010, 20:15
par Cyrano
Normal, tu encode en json à chaque tout de boucle au lieu de faire une chose à la fois.

Commence par stocker tes pseudos.... dans un tableau, parce que de la manière dont tu fais ça, tu écrases la valeur à chaque tour et tu n'afficheras en fin de compte que le dernier.

Une fois la boucle terminée, tu encode le tableau en JSON avec json_encode. Et je te signale au passage que si tu veux des données en utf8, il faut encoder les données elles-même, pas un tableau.

Ce qui nous donne donc en fin de compte :
<?php
/**
 * Création et exécution de la requête :
 */
$sql = ("SELECT pseudo FROM membre WHERE connecte=1");
$req = mysql_query($sql)or die(mysql_error());
/**
 * Création d'un tableau pour le stockage :
 */
$myArray = array();
/**
 * Encodage des données recueillies en UTF8 et stockage
 */
while(false != ($data = mysql_fetch_array($req)))
{
        $myArray[] = utf8_encode($data['pseudo']);
}
/**
 * En encode le résultat en JSON
 */
$tableau_JS = json_encode($myArray);
/**
 * Affichage du résultat
 */
echo $tableau_JS
?>
Suis bien le déroulement et dans la foulée, découvre un truc : commence par définir le déroulement de ton code en commençant par écrire les commentaire : ne fais le code qu'après : tu vas réaliser que ça facilite énormément la vie parce qu'en fait au moment où tu écris ton code, tu as déjà déterminé ce que tu dois faire, tu n'as plus de question à te poser ;)

Re: aide pour json

Posté : 27 sept. 2010, 20:27
par ptitbonome
salut

merci pour tes conseils. tu as raison après avoir bien analysé ma requête j'affiche que la dernière valeur .

je vais utiliser ta technique pour la prochaine fois.

en tout ca ca fonctionne très bien merci.

Re: aide pour json

Posté : 29 nov. 2010, 17:05
par ptitbonome
je reviens vers toi car je coince de nouveau.


   
$requete=("SELECT * from TABLE2 where  destinataire='$destinataire' AND expediteur='$expediteur'"); 

$req = mysql_query($requete)or die(mysql_error());

$myArray =  array();
/** 
while(false != ($data = mysql_fetch_array($req)))
{
                $myArray['From'] = utf8_encode($data['expediteur']);
		$myArray['message'] = utf8_encode($data['message']);
		$myArray['To'] = utf8_encode($data['destinataire']);
		
	
}

$tableau_JS = json_encode($myArray);


echo $tableau_JS
//json_encode($myArray),"\n";
?>


ce qui me donne comme résultat :

{"From":"admin ","message":" test message","To":"all"}

sauf que moi je voudrais obtenir des crochets au début et à la fin:

[{"From":"admin ","message":" test message","To":"all"}]

en gros je voudrais mettre un objet dans un tableau !

merci

Re: aide pour json

Posté : 29 nov. 2010, 17:10
par stealth35
comme ca :wink:
json_encode(array($myArray));

Re: aide pour json

Posté : 29 nov. 2010, 17:25
par ptitbonome
ah tout simplement...


Merci !!!

Re: aide pour json

Posté : 29 nov. 2010, 19:19
par devlop78
hihihi connaissais pas ça ... pour moi c'était déjà un "tableau" .. faut dire qu'un tableau est un objet ;)

On peut mettre en résolu ;)

Re: aide pour json

Posté : 01 déc. 2010, 01:12
par ptitbonome
nan pas encore résolu !!!!

j'ai une nouvelle question:

si je fais cette requête :
$sql = ("SELECT  pseudo,sexe,age,departement  FROM membre WHERE connecte='1'");
$req = mysql_query($sql)or die(mysql_error());
$myArray = array();
while(false != ($data = mysql_fetch_array($req)))
{ 
$myArray[] =  utf8_encode($data['pseudo']);
$myArray[] = utf8_encode($data['sexe']);
$myArray[] =  utf8_encode($data['age']);
}

echo json_encode(array($myArray));

j'obtiens ca:

[["dolce ","Homme ","27","vanessa ","Femme","32","soso ","Femme","28","Denis "," Homme","39","madmax ","Homme ","25"]]

maintenant si je fais ca:
$sql = ("SELECT  pseudo,sexe,age,departement  FROM membre WHERE connecte='1'");
$req = mysql_query($sql)or die(mysql_error());
$myArray = array();
while(false != ($data = mysql_fetch_array($req)))
{ 
$myArray['pseudo'] =  utf8_encode($data['pseudo']);
$myArray['sexe'] = utf8_encode($data['sexe']);
$myArray['age'] =  utf8_encode($data['age']);
}

echo json_encode(array($myArray));

j'obtiens (que) ca:

[{"pseudo":"madmax ","sexe":"Homme ","age":"25"}]

bon je comprend plus rien. si quelqu'un pouvait m'éclairer la dessus..? car le résultat qui apparait correspond au dernier enregistrement fait sur dans ma table. A savoir le pseudo madmax est le dernier à avoir été enregistré.

quoi qu'il en soit ce que je cherche à obtenir c'est ca:

[{"pseudo':"dolce ","sexe":"Homme ","age":"27","pseudo":"vanessa ","sexe":"Femme","age":"32","pseudo":"soso ","sexe":"Femme","age":"28","pseudo":"Denis ","sexe":"Homme","age":"39","pseudo":"madmax ","sexe":"Homme ","age":"25"}]


merci

Re: aide pour json

Posté : 01 déc. 2010, 01:57
par devlop78

[{"pseudo':"dolce ","sexe":"Homme ","age":"27","pseudo":"vanessa ","sexe":"Femme","age":"32","pseudo":"soso ","sexe":"Femme","age":"28","pseudo":"Denis ","sexe":"Homme","age":"39","pseudo":"madmax ","sexe":"Homme ","age":"25"}]
A mon avis, ça .. ça va pas donner grand chose car tu redéclares

Re: aide pour json

Posté : 01 déc. 2010, 04:00
par stealth35
c'est
while(false != ($data = mysql_fetch_array($req)))
{
    $myArray['pseudo'][] =  utf8_encode($data['pseudo']);
    $myArray['sexe'][] = utf8_encode($data['sexe']);
    $myArray['age'][] =  utf8_encode($data['age']);
}
sinon a chaque fois tu écrases la valeur au lieu dans créer une nouvelle, mais ca c'est la base des tableaux

Re: aide pour json

Posté : 01 déc. 2010, 07:36
par Cyrano
quoi qu'il en soit ce que je cherche à obtenir c'est ca:

[{"pseudo':"dolce ","sexe":"Homme ","age":"27","pseudo":"vanessa ","sexe":"Femme","age":"32","pseudo":"soso ","sexe":"Femme","age":"28","pseudo":"Denis ","sexe":"Homme","age":"39","pseudo":"madmax ","sexe":"Homme ","age":"25"}]
Ça ne peut pas fonctionner ton truc.

Pour mémoire, JSON = JavaScript Object Notation. Donc, à partir d'un tableau, on crée un objet. Ce que tu cherches à obtenir comporte chaque index en plusieurs exemplaires avec à chaque occurrence une valeur différente.
Lu en JavaScript, ça donnerait ceci :
var membres = [{
    "pseudo": "dolce",
    "sexe": "Homme ",
    "age": "27",
    "pseudo": "vanessa ",
    "sexe": "Femme",
    "age": "32",
    "pseudo": "soso ",
    "sexe": "Femme",
    "age": "28",
    "pseudo": "Denis ",
    "sexe": "Homme",
    "age": "39",
    "pseudo": "madmax ",
    "sexe": "Homme ",
    "age": "25"
}];
Comment distingueras-tu un membre d'un autre ? Alors que si tu fais ceci :
var membres = [
{
    "pseudo": "dolce",
    "sexe": "Homme ",
    "age": "27"
}, 
{
    "pseudo": "vanessa ",
    "sexe": "Femme",
    "age": "32"
}, 
{
    "pseudo": "soso ",
    "sexe": "Femme",
    "age": "28"
}, 
{
    "pseudo": "Denis ",
    "sexe": "Homme",
    "age": "39"
}, 
{
    "pseudo": "madmax ",
    "sexe": "Homme ",
    "age": "25"
}];
tu auras un objet par membre.

Pour commencer, simplifie ta requête en virant le champ departement dont tu ne te sers pas. Ton tableau $myArray doit être composé de sous-tableaux comportant le nom de chaque colonne et la valeur.
Ça nous donne ceci :
$sql = "SELECT  pseudo,sexe,age FROM membre WHERE connecte='1'";
$req = mysql_query($sql)or die(mysql_error());
$myArray = array();
while(false != ($data = mysql_fetch_array($req)))
{
    $myArray[] = array(
        'pseudo' => utf8_encode($data['pseudo']),
        'sexe'   => utf8_encode($data['sexe']),
        'age'    => utf8_encode($data['age'])
    );
}

echo json_encode($myArray);