[RESOLU] recuperer les valeurs

Eléphanteau du PHP | 36 Messages

09 avr. 2019, 22:08

Bonjour,
j'ai besoin de récuperer avec un foreach les valeurs d'options dans un objet :

grace à

Code : Tout sélectionner

$query = $db -> getQuery(true); $query = 'SELECT bliblibli FROM blablabla WHERE id=3'; $db -> setQuery($query); $results = $db -> loadObjectList(); foreach($results as $value){ print_r($value); }
qui me donne :

Code : Tout sélectionner

stdClass Object ( [fieldparams] => {"multiple":"","options":{"options0":{"name":"Association","value":"1"},"options1":{"name":"Commer\u00e7ant","value":"2"},"options2":{"name":"Artisan","value":"3"},"options3":{"name":"Producteur","value":"4"}}} )
La question est de savoir comment je peux avoir un foreach qui me donne $var1->name, $var1->value pour toutes les valeurs options dans mon fameux objet.

+ je me suis laissé dire que ce n'etait pas vraiment le plus judicieux en terme d'appel. S'il y a un moyen plus direct d'obtenir directement les valeurs d'options, je suis preneur.
Merci d'avance.

Mammouth du PHP | 1967 Messages

10 avr. 2019, 07:57

tu semble utiliser une bibliothèque pour tes requète, n'y a t il pas une fonction qui récupère un tableau plutot qu'un objet ? c'est plus simple pour parcourir et créer les options.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 36 Messages

10 avr. 2019, 12:56

ok, j'ai changé un peu le code,
je l'ai rempalcé pour
$query = $db -> getQuery(true);
$query = 'SELECT fieldparams FROM vl_fields WHERE id=3';
$db->setQuery($query);
$row = $db->loadAssoc();
print_r($row);

du coup, j'obtiens un array
Array ( [fieldparams] => {"multiple":"","options":{"options0":{"name":"Association","value":"1"},"options1":{"name":"Commer\u00e7ant","value":"2"},"options2":{"name":"Artisan","value":"3"},"options3":{"name":"Producteur","value":"4"}}} )

Mais alors maintenant, comment je parcours mon array avec un foreach??? (ou autre d'ailleurs) pour récuperer mes options?

Mammouth du PHP | 1967 Messages

10 avr. 2019, 13:36

foreach ($row['fieldparams']['options'] as $option) {
//ici tu aura $option['name'] et $option['value']
}
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 36 Messages

10 avr. 2019, 14:26

Salut Spols,
merci pour ton aide, malheureusement, il ne m'affiche rien du tout!
$query = $db -> getQuery(true);
$query = 'SELECT fieldparams FROM vl_fields WHERE id=3';
$db->setQuery($query);
$row = $db->loadAssoc();
#print_r($row);
foreach ($row['fieldparams']['options'] as $option) {
echo $option['value'].' '.$option['name'].'<br/>';
}

Mammouth du PHP | 1967 Messages

10 avr. 2019, 14:38

ok je viens de comprendre tu récupère du json, pas un tableau.

utilise json_decode
https://www.php.net/manual/fr/function.json-decode.php
foreach (json_decode($row['fieldparams'])['option'] as $option) {
echo $option['value'].' '.$option['name'].'<br/>';
}
a vérifier avec quelque var_dump() pour la syntaxe exacte.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 36 Messages

10 avr. 2019, 15:23

eh beh non...,
du coup, j'obtiens "Cannot use object of type stdClass as array", désolé mais cela commence a devenir vraiment obscur chez moi...

Mammouth du PHP | 1967 Messages

11 avr. 2019, 08:01

ah oui par défaut json_decode fourni un objet

donc ajouter True comme 2eme paramètre devrait régler le problème
foreach (json_decode($row['fieldparams'], TRUE)['option'] as $option) {
echo $option['value'].' '.$option['name'].'<br/>';
}
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 36 Messages

11 avr. 2019, 10:52

Salut Spols,
le code
foreach (json_decode($row['fieldparams'], TRUE)['option'] as $option) {
echo $option['value'].' '.$option['name'].'<br/>';
}
ne me renvoie rien, si je le mets tel quel, j'ai un message d'erreur dans mon éditeur que ce dernier ne me renvoie pas si je mets

$myrow=json_decode($row['fieldparams'], TRUE);
foreach ($myrow['option'] as $option) {
echo $option['value'].' '.$option['name'].'<br/>';
}

Qui, vous me direz ne me renvoie rien non plus...
Je vais pleurer ...

Mammouth du PHP | 1967 Messages

11 avr. 2019, 13:27

commence par afficher toutes tes erreurs et puis test avec var_dump() le contenu de tes variables y compris $option dans ta boucle.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 36 Messages

11 avr. 2019, 14:59

ok, pas d'erreur notoire,
j'ai un
array(1) { ["fieldparams"]=> string(210) "{"multiple":"","options":{"options0":{"name":"Association","value":"1"},"options1":{"name":"Commer\u00e7ant","value":"2"},"options2":{"name":"Artisan","value":"3"},"options3":{"name":"Producteur","value":"4"}}}" }
sur mon var_dump($row)

Eléphanteau du PHP | 36 Messages

11 avr. 2019, 15:06

var_dump(json_decode($row),TRUE);
me renvoie NULL bool(true) ???

Eléphanteau du PHP | 36 Messages

11 avr. 2019, 15:40

Ça me gave grave !
Si je lui donne

$json = '{"multiple":"","options":{"options0":{"name":"Association","value":"1"},"options1":{"name":"Commer\u00e7ant","value":"2"},"options2":{"name":"Artisan","value":"3"},"options3":{"name":"Producteur","value":"4"}}}';
var_dump(json_decode($json));
ou json est la valeur exacte de mon parametre, il me renvoie

object(stdClass)#998 (2) { ["multiple"]=> string(0) "" ["options"]=> object(stdClass)#1032 (4) { ["options0"]=> object(stdClass)#1031 (2) { ["name"]=> string(11) "Association" ["value"]=> string(1) "1" } ["options1"]=> object(stdClass)#1033 (2) { ["name"]=> string(11) "Commerçant" ["value"]=> string(1) "2" } ["options2"]=> object(stdClass)#1034 (2) { ["name"]=> string(7) "Artisan" ["value"]=> string(1) "3" } ["options3"]=> object(stdClass)#1035 (2) { ["name"]=> string(10) "Producteur" ["value"]=> string(1) "4" } } }

avec lequel on pourrait peut-être commencer à bosser...
Malheureusement, le systeme force un loadAssoc(); qui du coup le transforme en stdObject qui lui ne se reconnait pas (NULL bool(true) ???)

Un moyen d'avoir un raw import de ce qui est dans la base sans passer par les objets???

Mammouth du PHP | 1967 Messages

11 avr. 2019, 15:55

var_dump(json_decode($row['fieldparams'],TRUE));

le TRUE doit être dans la fonction json_decode par Var_dump

et il faut préciser quelle champs de $row tu veux utiliser.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 36 Messages

11 avr. 2019, 16:21

ok, en passant par une bonne vieille connexion directe à base de donnees, j'utilise un non moins vieux bout de code
$sql='SELECT fieldparams FROM vl_fields WHERE id=3';
$reponse = $dbh->query($sql);
while ($donnees = $reponse->fetch())
{
$myvar=$donnees['fieldparams'];
var_dump(json_decode($myvar, true));
}
Ce qui me donne :
array(2) { ["multiple"]=> string(0) ""
["options"]=> array(4) {
["options0"]=> array(2) { ["name"]=> string(11) "Association" ["value"]=> string(1) "1" }
["options1"]=> array(2) { ["name"]=> string(11) "Commerçant" ["value"]=> string(1) "2" }
["options2"]=> array(2) { ["name"]=> string(7) "Artisan" ["value"]=> string(1) "3" }
["options3"]=> array(2) { ["name"]=> string(10) "Producteur" ["value"]=> string(1) "4" } } }
qui d'apres ce que je peux voir est beaucoup plus utilisable, maintenant, me reste à faire mon foreach... un lead?