aide pour json

Eléphanteau du PHP | 28 Messages

27 sept. 2010, 19:43

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

Mammouth du PHP | 19672 Messages

27 sept. 2010, 20:15

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 ;)
Modifié en dernier par Cyrano le 27 sept. 2010, 20:32, modifié 1 fois.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 28 Messages

27 sept. 2010, 20:27

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.

Eléphanteau du PHP | 28 Messages

29 nov. 2010, 17:05

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

ViPHP
ViPHP | 5462 Messages

29 nov. 2010, 17:10

comme ca :wink:
json_encode(array($myArray));

Eléphanteau du PHP | 28 Messages

29 nov. 2010, 17:25

ah tout simplement...


Merci !!!

devlop78
Invité n'ayant pas de compte PHPfrance

29 nov. 2010, 19:19

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 ;)

Eléphanteau du PHP | 28 Messages

01 déc. 2010, 01:12

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

devlop78
Invité n'ayant pas de compte PHPfrance

01 déc. 2010, 01:57


[{"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

ViPHP
ViPHP | 5462 Messages

01 déc. 2010, 04:00

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

Mammouth du PHP | 19672 Messages

01 déc. 2010, 07:36

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);
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: