Lecture / Ecriture d'un json en bdd

LarryTournelle
Invité n'ayant pas de compte PHPfrance

03 juil. 2018, 00:04

Bonjour,

Je me prends la tête depuis plusieurs heures là-dessus et malgré la doc que j'ai lu, impossible de faire ce qui me parait pourtant simple.
Si quelqu'un a la solution, je suis preneur car je sature #-o

J'ai des profils en base de donnée, avec un champ qui contient des données sous la forme d'un json :

Code : Tout sélectionner

["string1", "string2", "string3", "string4", "string5"]
Je récupère ces datas sous la forme d'un string via une requête SQL.

J'ai besoin de votre aide pour :
> Convertir le résultat en array
> Tester chaque entrée de l'array pour vérifier s'il s'agit de la valeur que je cherche
> Si le tableau ne contient pas "string999", le rajouter à la fin
> Sauver le tableau en bdd

Je n'arrive pas à faire fonctionner cette fichu moulinette...
Merci d'avance pour votre aide !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

03 juil. 2018, 00:24

A quel endroit bloques-tu ? Qu'as-tu déjà essayé ?

Convertir le JSON en tableau PHP, normalement json_decode() fait cela très bien
Ensuite pour parcourir ton tableau, avec une boucle foreach() ça le fait bien, mais si c'est juste pour vérifier qu'une variable soit dans un tableau, alors tu peux utiliser la fonction in_array() qui fait cela encore mieux

https://php.net/json_decode
https://php.net/foreach
https://php.net/in_array
Quand tout le reste a échoué, lisez le mode d'emploi...

LarryTournelle
Invité n'ayant pas de compte PHPfrance

03 juil. 2018, 00:50

Bonsoir et merci pour ta réponse !

Je pense que je touche au but... voici le détail du process et là où ça bloque.

1/ Je chope les datas en bdd

Code : Tout sélectionner

$sql = "SELECT field1 FROM users WHERE code = '$code' AND projectID = '$projectID'"; $result = $conn->query($sql); $row = mysqli_fetch_array($result); $toArray = array($row); $rawJson = $toArray [0]['field1']; $json= json_decode($rawJson); var_dump($json);
A ce moment mon var_dump me donne bien un array lisible pour php.

2/ Je loop dans l'array à la recherche d'une valeur :

Code : Tout sélectionner

foreach ($json as $value) { if($value === $searchedValue) { // J'ai ce que je cherche } }
Jusqu'ici tout va bien...

3/ Je rajoute une valeur au tableau et je convertis en json en vue de le save en bdd

Code : Tout sélectionner

array_push($json , $newValue); var_dump($flashedCodes); $jsonToSave = json_encode($json); var_dump($newjson);
Et là problème, le 1er var_dump me renvoie bien mon tableau avec la nouvelle entrée, mais le second me renvoie "null"... Confirmé en bdd quand j'envoie derrière la requête :

Code : Tout sélectionner

$sql = "UPDATE users SET field1= '$newjson' WHERE code = '$code' AND projectID = '$projectID'";
Merci encore pour ton aide

LarryTournelle
Invité n'ayant pas de compte PHPfrance

03 juil. 2018, 00:56

ERRATUM : Navré pour le doublon, je passe juste corriger les 2 derniers bloc de code qui ont des noms qui ne correspondent pas...

Code : Tout sélectionner

array_push($json , $newValue); var_dump($json ); $jsonToSave = json_encode($json); var_dump($jsonToSave );
et

Code : Tout sélectionner

$sql = "UPDATE users SET field1= '$jsonToSave ' WHERE code = '$code' AND projectID = '$projectID'";

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

03 juil. 2018, 10:16

Hmmm tu fais un array_push() au sein d'une boucle qui se fait justement sur ce tableau ?
A mon avis ton problème vient de là, manipuler un tableau que tu es en train de parcourir c'est risqué ;)

Par ailleurs, je ne comprends toujours pas ton besoin de faire une boucle foreach() si in_array() te fait exactement la même chose
Quand tout le reste a échoué, lisez le mode d'emploi...