[RESOLU] Update Json MySQL error

Petit nouveau ! | 5 Messages

07 déc. 2022, 18:57

Bonjour,

je vais chercher un JSON dans ma BDD. Je l'affiche dans un champs de texte et je renvoie vers la BDD au cas où il serait modifié. Donc, remplacer tout un fichier JSON stocké en BDD par un autre.

Code : Tout sélectionner

$requete = "UPDATE jeux_textes SET parametres='" . $contenu . "' WHERE langue='fr' "; print_r($requete); $reponse = mysqli_query($db, $requete);
le print-r donne :
UPDATE jeux_textes SET parametres='{ "niveau": [ { "melange": "dibon", "reponse": "bidon" }, { "melange": "tope", "reponse": "pote" } ] }' WHERE langue='fr'
dans $contenu, j'ai le JSON du champ de texte récupéré avec $_POST (

Code : Tout sélectionner

$contenu = $_POST['json'];
et l'erreur :
Error: %s Invalid JSON text: "Missing a name for object member." at position 5 in value for column 'jeux_textes.parametres'.
Déjà la position 5, c'est étrange. Et, j'ai vérifié la validité du JSON
{ "niveau": [ { "melange": "dibon", "reponse": "bidon" }, { "melange": "tope", "reponse": "pote" } ] }
dans un validateur en ligne : il est valide. Bref après 2h de googling, je sèche.

Merci pour votre aide.

Mammouth du PHP | 2688 Messages

07 déc. 2022, 19:15

c'est quelle ligne qui génère ce message d'erreur ?

Petit nouveau ! | 5 Messages

07 déc. 2022, 19:19

Bonjour,

le code :

Code : Tout sélectionner

$contenu = $_POST['json']; $requete = "UPDATE jeux_textes SET parametres='" . $contenu . "' WHERE langue='" . $_SESSION['langue'] . "'"; print_r($requete); $reponse = mysqli_query($db, $requete); if (!$reponse) { echo ("Error: \n" . mysqli_error($db)); exit(); }
c'est le retour de la requête (6ème ligne)

Avatar du membre
Mammouth du PHP | 1544 Messages

09 déc. 2022, 21:59

Essaye d'insérer avec mysqli_real_escape_string()

Petit nouveau ! | 5 Messages

10 déc. 2022, 17:26

Merci two3D.
Ça a l'air de marcher mais j'ai d'autres erreurs qui ne me permettent pas de voir si c'est vraiment concluant (upload dans DB). En tout cas, je n'ai plus l'erreur.

Avatar du membre
Mammouth du PHP | 1544 Messages

10 déc. 2022, 17:44

Super, passe en Resolu, en haut à gauche ;)

Petit nouveau ! | 5 Messages

13 déc. 2022, 13:37

En fait, non, ça n'a pas fonctionné :
Le print_r de la requête donne :

Code : Tout sélectionner

UPDATE jeux_textes SET parametres='{\r\n "niveau": [\r\n {\r\n "melange": "fhgghfgg",\r\n "reponse": "hghg"\r\n }\r\n ]\r\n}' WHERE jeu='29' AND langue='fr'
et le code d'erreur de mySQL :

Code : Tout sélectionner

Error: Invalid JSON text: "Missing a name for object member." at position 5 in value for column 'jeux_textes.parametres'

Avatar du membre
Mammouth du PHP | 1544 Messages

13 déc. 2022, 14:02

Est ce que tu utilise https://www.php.net/manual/fr/function.json-encode.php pour $contenu ?

Petit nouveau ! | 5 Messages

13 déc. 2022, 17:23

Pas mieux. ça rajoute des /r/n et j'ai une autre erreur :

Code : Tout sélectionner

Error: Invalid JSON text: "Invalid encoding in string." at position 2 in value for column 'jeux_textes.parametres'.
d'un autre côté si je mets le contenu du JSON en dur dans ma variable au lieu de la récupérer dans le champ de texte :

Code : Tout sélectionner

$contenu = '{ "niveau": [ { "melange": "sdf", "reponse": "dsss" }, { "melange": "sdfsdf", "reponse": "sdf" } ] }';
, ça marche!

ça sent vraiment l'encodage.