Problème double foreach avec $cle récup données

Eléphant du PHP | 53 Messages

29 août 2016, 13:38

Bonjour,

Actuellement en train de travailler sur un site web/application, je rencontre un problème dans la récupération de mes données.

Dans un fichier ajax, je récupère une liste de tâches, de type checkbox et cela marche très bien. J'ai voulu reproduire le même schéma afin de récupérer une liste de sites de production. C'est ici que je rencontre un problème, dans le code ci-dessous, je récupère soit la liste de tâches soit l'autre car j'ai l'impression que le mot clé "$cle" bloque, j'ai donc essayé de le remplacer par "$key" dans un des deux cas, mais à chaque fois en regardant ma console rubrique network, j'observe que je ne récupère qu'une liste, celle à qui je donne le mot "$cle".
foreach ($OTPAll as $cle => $OTP) {
 
               echo '<OTP>';
 
                   echo '<id>'. $OTP->getId() . '</id>';
                   echo '<otp>' . $OTP->getOTP() . '</otp>';
 
                   echo '<actif>';
 
                   if ($statutOTP[$OTP->getId()] == true) {
                       echo 'true';
                   } else {
                       echo 'false';
                   }
 
                   echo '</actif>';
 
                   echo '<sitesassocies>';
 
                   $idSitesOtp = getSitesParOtp($key);
 
                   foreach ($idSitesOtp as $key => $idSiteOtp) {
                       echo '<idSite>' . $idSiteOtp[0] . '</idSite>';
                   }
 
                   echo '</sitesassocies>';
 
                   echo '<tachesassociees>';
 
                   $idTachesOtp = getTachesParOtp($cle);
 
                   foreach ($idTachesOtp as $cle => $idTacheOtp) {
                       echo '<idtache>' . $idTacheOtp[0] . '</idtache>';
                   }
 
                   echo '</tachesassociees>';
 
               echo '</OTP>';
           }
 
           foreach ($sites as $key => $site) {
 
               echo '<site>';
 
                   echo '<id>' . $site->getId() . '</id>';
                   echo '<nom>' . $site->getNom() . '</nom>';
 
               echo '</site>';
           }
 
           foreach ($taches as $cle => $tache) {
 
               echo '<tache>';
 
                   echo '<id>' . $tache->getId() . '</id>';
                   echo '<nom>' . $tache->getNom() . '</nom>';
 
               echo '</tache>';
           }
 
           echo '</donnees>';
           echo '</reponse>';
 
           die();
 
       }
Je ne vois pas comment faire et surtout je ne connais pas la règle si règle il y a pour ce cas précis.

Si quelqu'un peut aider :)

Bonne journée

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8670 Messages

30 août 2016, 08:57

salut,

A priori le code ne pose pas de problème.

peux ton avoir un jeux de données pour tester ?

Qu'est ce que tu obtiens en retour (avec qu'elles données au départ ;) )

au niveau de la structure xml, je suis étonné que les foreach ne soient pas inclus dans des balises (un parent pour chaque liste en fait).
Par exemple otps contient des otp, sites contient des "site" et taches contient plusieurs "tache" c'est, généralement, beaucoup plus simple à utiliser.

si le code que tu renvois est à destination de javascript tu y gagnerais peut être à retourner du JSON (au moins pour la conso réseau et le parse client).

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 53 Messages

30 août 2016, 10:31

Bonjour,

Tu veux que t'envoie mon .sql ? Les données sont faussées car je travaille en local donc ca ne devrait pas poser de soucis je pense.

En retour, j'obtiens bien ma liste de tâches type checkbox et celle ci marche, autrement dit je peux cocher une case et elle sera associée dans la base de données. Mon problème ici est que quand je met le mot $cle dans tous mes foreachs, si je selectionne un site dans la checkbox site, il va bien récupérer l'id du site à associer mais l'associer dans la liste des taches. (C'est un peu rude à lire désolé :) )

Donc j'aimerai trouver le moyen d'avoir un mot $cle qui marche pour tous les foreachs ou alors une autre méthode telle qu'un while .

Voila ce que je trouve dans ma console rubrique "network" ajaxGestionOTP.php :
<sitesassocies>
<pre class="xdebug-var-dump" dir="ltr">…</pre>
<idSite>1</idSite>
<idSite>5</idSite>
<idSite>2</idSite>
</sitesassocies>
<tachesassociees>
<pre class="xdebug-var-dump" dir="ltr">…</pre>
<b>array</b>
<i>(size=0)</i>
</tachesassociees>
</OTP>
Si je place le foreach des taches avant dans le code, je récupererai les idTache, et inversement dans l'exemple ci-dessus je récupère les idSite. Avec cet exemple j'espere que c'est plus clair.

Modérateur PHPfrance
Modérateur PHPfrance | 10415 Messages

30 août 2016, 11:02

Bonjour,

En fait, il te suffit juste de changer de nom de variable :)

Dans ton premier foreach (le principal), tu vas affecter la clé de ton tableau à la variable $cle et la valeur à la variable $OTP. Si à l'intérieur de cette boucle tu utilises une autre boucle foreach dans laquelle tu utilises a nouveau la variable $cle, tu vas écraser son contenu...

Tu peux donc varier comme tu l'as fait avec $cle, $key... ou juste donner un nom plus explicite a tes clé $cleOTP, $cleTache ... Avec des noms distincts, tes variables ne seront ainsi plus écrasées :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 53 Messages

30 août 2016, 11:15

Bonjour Ryle,

J'ai déja essayé 100 fois ce que tu m'as proposé, dans tous les sens, en gros tu me conseilles de mettre un $cle pour le grand foreach, et des $key et $key2 par exemple pour mes autres foreachs ? Problème, quand je fais ça je ne récupère plus aucune données, et mes listes checkbox ne sont pas cochées. Mes infos sont dans la $cle du foreach principal, il faudrait que je puisse l'utiliser 2 fois sans qu'elle soit écrasée ! J'ai tentée de la sauvegarder dans une variable mais sans succès.

Peux-tu me donner un exemple ? Car je ne vois peut être pas où tu veux en venir. :)

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8670 Messages

30 août 2016, 11:20

pff j'arrive 3 plombes après ryle l'es trop rapide :-)~

==>
hé mais tu as xdebug tu peu déboguer ton sprint avec un IDE ;)
y a quoi dans le "<pre>" (en dehors des vaches ? ;) )

c'est pas clair ton histoire de checkbox.
la on a un bout de code php qui génère du xml.

Le foreach sur $OTPALL peut effectivement induire une collision de variable si tu utilises les mêmes noms de variables pour les clef tu écrases la clef parente avec celle du premier foreach imbriqué du coup tu ne trouves pas de données pour le second et y a rien qui s'affiche ;)

Attention au nommage des variables c'est pas simple de différencier le tableau de la données courante dans tes foreach (le S se met à la fin de la variable et pas au milieu quand on fait la différence entre la collection et un élément de la collection ;)

Je ferais un truc dans le genre :
<?php
foreach ($OTPAll as $otpKey => $OTP) {
    echo '<OTP>';

    echo '<id>'.$OTP->getId().'</id>';
    echo '<otp>'.$OTP->getOTP().'</otp>';

    echo '<actif>';

    if ($statutOTP[$OTP->getId()] == true) {
        echo 'true';
    } else {
        echo 'false';
    }

    echo '</actif>';

    echo '<sitesassocies>';
// c'est pas plutôt $OTP->getId() que tu as besoin ?
    $idSitesOtp = getSitesParOtp($otpKey);

    foreach ($idSitesOtp as  $idSite) {
        echo '<idSite>'.$idSite[0].'</idSite>';
    }

    echo '</sitesassocies>';

    echo '<tachesassociees>';
// c'est pas plutôt $OTP->getId() que tu as besoin ?
    $idTachesOtp = getTachesParOtp($otpKey);

    foreach ($idTachesOtp as $idtache) {
        echo '<idtache>'.$idtache[0].'</idtache>';
    }

    echo '</tachesassociees>';

    echo '</OTP>';
}

après il faut tester avec tes données, de beau tableau php en entrant du script suffisent pour cela ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 53 Messages

30 août 2016, 11:37

Je viens de tester ce que tu m'as proposé Moogli, mais ca ne fonctionne pas, je ne récupère plus rien dans mes checkbox :(

Plus clairement, la fonction getSiteParOtp me permet de récupérer les élements de la checkbox et savoir à quel OTP ils sont associés. Même systeme pour getTachesParOtp, ensuite les deux foreach internes au principal permet d'écrire les balises idsite itache si il y a une association ! Et toutes ces infos sont contenus dans la $cle du foreach principal.

J'ai une capture pour mieux comprendre mais je n'arrive pas à l'intégrer à la réponse rapide.

Et dans le pré il y a ce que je t'ai donné un array = 0

Ici j'ai le bout de code qui récupère les données écrites en xml :
$otp.each( function() {

		var id = $(this).find('id').text();
		var actif = $(this).find('actif').text();
		var OTP = $(this).find('otp').text();
		//var siteAssocie =
		var idSitesBrut = $(this).find('idSite');
		var idTachesBrut = $(this).find('idtache');

		var optionsChecked = [];
		var optionsChecked2 = [];

		var idSites = [];
		var idTaches = [];

		$(idSitesBrut).each(function() {
			idSites.push($(this).text());
		});
		console.log(idSitesBrut);
		$(idTachesBrut).each(function() {
			idTaches.push($(this).text());
		});
		console.log(idTachesBrut);
		for (var j = listeIdSites.length - 1; j >= 0; j--) {
			optionsChecked2[i] = false;
			if (idSites.indexOf(listeIdSites[i]) != -1) {
				optionsChecked2[i] = true;
			}
		};

		for (var i = listeIdTaches.length - 1; i >= 0; i--) {
			optionsChecked[i] = false;
			if (idTaches.indexOf(listeIdTaches[i]) != -1) {
				optionsChecked[i] = true;
			}
			//console.log(optionsChecked[i]);
		}
Quand je vérifie mes données, si c'est la boucle foreach du site qui utilise la $cle du foreach principal, je récupère bien ma liste d'idsite, et inversement. Donc le problème vient bien du xml.

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8670 Messages

30 août 2016, 14:19

pour les pièces jointes faut cliqué sur "éditeur avancé et prévisualisation" :) (et y a même pas de perte de ce que tu as commencer à saisir c'est cool non ;)) )

pour le reste peut tu :
- fournir ce que tu attends comme XML (un xml que tu as validé fonctionnel avec ton JS histoire de gagner du temps et être certain que ton soit bon :) )
- fournir un jeux de données fonctionnel, même bidon faut juste que je puisse utiliser la chose. (tu peux envoyer en pv si tu veux=.

Il faut impérativement séparer la chose en deux :
- La génération du XML (PHP)
- l'utilisation du XML (JS)
Pour cela il faut que tu te créé un fichier XML de référence qui correspond à ce que tu attends pour tester le JS et le faire fonctionner.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 53 Messages

30 août 2016, 14:31

Quand tu parles de jeux de données, tu parles de la base de données remplie avec des valeurs ?

Le xml et le js concerné sont ci-dessus dans les exemples que je vous ai donné en code, si tu veux le fichier entier je peux te l'envoyer en privé !

Mes fichiers sont déja séparés, et le problème vient du xml pas du js, le js récupère les bonnes données, simplement ce problème de $cle gâche tout car, il ne peut pas récupérer les deux listes en même temps d'où mon problème avec le foreach.

Voici la capture:

Image

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8670 Messages

30 août 2016, 15:45

quand je test ce code (ton code + l'ajout des choses que j'ai besoin qu'il fonctionne)
<?php
// init fonction et données que je n'ai pas
class otp
{
    private $id;
    private $otp;
    public function getId()
    {
        return $this->id;
    }
    public function setId($id)
    {
        $this->id = $id;
    }
    public function getOTP()
    {
        return $this->otp;
    }
    public function setOTP($o)
    {
        $this->otp = $o;
    }
}

class site
{
    private $id;
    private $nom;
    public function getId()
    {
        return $this->id;
    }
    public function setId($id)
    {
        $this->id = $id;
    }
    public function getNom()
    {
        return $this->nom;
    }
    public function setNom($nom)
    {
        $this->nom = $nom;
    }
}
$sites=[];
for ($i=0;$i<rand(0, 50);$i++) {
    $s = new site();
    $s->setId($i);
    $s->setNom("site ".$i);
    $sites[]=$s;
}
class tache
{
    private $id;
    private $nom;
    public function getId()
    {
        return $this->id;
    }
    public function setId($id)
    {
        $this->id = $id;
    }
    public function getNom()
    {
        return $this->nom;
    }
    public function setNom($nom)
    {
        $this->nom = $nom;
    }
}
$taches=[];
for ($i=0;$i<rand(0, 50);$i++) {
    $t = new site();
    $t->setId($i);
    $t->setNom("tache ".$i);
    $taches[]=$t;
}
function getTachesParOtp($id)
{
    return [['tache 1 '],['tache 2 '],['tache 3 '],['tache 4 '],['tache 5 '],['tache 6 ']];
}
function getSitesParOtp($id)
{
    return [['site 1 '],['site 2 '],['site 3 '],['site 4 '],['site 5 '],['site 6 ']];
}
$OTPAll = [];
$statutOTP = [];
for ($i = 0; $i<10;$i++) {
    $o = new otp();
    $o->setId($i);
    $o->setOTP("OTP : ".$i);
    $OTPAll[] = $o;
    $statutOTP[$i]  = rand(0, 426661337)%42==0?true:false;
}
ob_start();
// ---- Début de ton code
echo '<donnees>';
echo '<reponse>';
foreach ($OTPAll as $otpKey => $OTP) {
    echo '<OTP>';

    echo '<id>'.$OTP->getId().'</id>';
    echo '<otp>'.$OTP->getOTP().'</otp>';

    echo '<actif>';

    if ($statutOTP[$OTP->getId()] == true) {
        echo 'true';
    } else {
        echo 'false';
    }

    echo '</actif>';

    echo '<sitesassocies>';
    $idSitesOtp = getSitesParOtp($otpKey);

    foreach ($idSitesOtp as  $idSite) {
        echo '<idSite>'.$idSite[0].'</idSite>';
    }

    echo '</sitesassocies>';

    echo '<tachesassociees>';

    $idTachesOtp = getTachesParOtp($otpKey);

    foreach ($idTachesOtp as $idtache) {
        echo '<idtache>'.$idtache[0].'</idtache>';
    }

    echo '</tachesassociees>';

    echo '</OTP>';
}

foreach ($sites as $key => $site) {
    echo '<site>';

    echo '<id>'.$site->getId().'</id>';
    echo '<nom>'.$site->getNom().'</nom>';

    echo '</site>';
}

foreach ($taches as $cle => $tache) {
    echo '<tache>';

    echo '<id>'.$tache->getId().'</id>';
    echo '<nom>'.$tache->getNom().'</nom>';

    echo '</tache>';
}

// fin de ton code

echo '</reponse>';
echo '</donnees>';

$xml = ob_get_contents();
ob_end_clean();
  header('Content-Type: application/xml');
echo '<?xml version="1.0"?>',($xml);
j'obtiens

Code : Tout sélectionner

This XML file does not appear to have any style information associated with it. The document tree is shown below. <donnees> <reponse> <OTP> <id>0</id> <otp>OTP : 0</otp> <actif>false</actif> <sitesassocies> <idSite>site 1</idSite> <idSite>site 2</idSite> <idSite>site 3</idSite> <idSite>site 4</idSite> <idSite>site 5</idSite> <idSite>site 6</idSite> </sitesassocies> <tachesassociees> <idtache>tache 1</idtache> <idtache>tache 2</idtache> <idtache>tache 3</idtache> <idtache>tache 4</idtache> <idtache>tache 5</idtache> <idtache>tache 6</idtache> </tachesassociees> </OTP> <OTP> <id>1</id> <otp>OTP : 1</otp> <actif>false</actif> <sitesassocies> <idSite>site 1</idSite> <idSite>site 2</idSite> <idSite>site 3</idSite> <idSite>site 4</idSite> <idSite>site 5</idSite> <idSite>site 6</idSite> </sitesassocies> <tachesassociees> <idtache>tache 1</idtache> <idtache>tache 2</idtache> <idtache>tache 3</idtache> <idtache>tache 4</idtache> <idtache>tache 5</idtache> <idtache>tache 6</idtache> </tachesassociees> </OTP> <OTP> <id>2</id> <otp>OTP : 2</otp> <actif>false</actif> <sitesassocies> <idSite>site 1</idSite> <idSite>site 2</idSite> <idSite>site 3</idSite> <idSite>site 4</idSite> <idSite>site 5</idSite> <idSite>site 6</idSite> </sitesassocies> <tachesassociees> <idtache>tache 1</idtache> <idtache>tache 2</idtache> <idtache>tache 3</idtache> <idtache>tache 4</idtache> <idtache>tache 5</idtache> <idtache>tache 6</idtache> </tachesassociees> </OTP> <OTP> <id>3</id> <otp>OTP : 3</otp> <actif>false</actif> <sitesassocies> <idSite>site 1</idSite> <idSite>site 2</idSite> <idSite>site 3</idSite> <idSite>site 4</idSite> <idSite>site 5</idSite> <idSite>site 6</idSite> </sitesassocies> <tachesassociees> <idtache>tache 1</idtache> <idtache>tache 2</idtache> <idtache>tache 3</idtache> <idtache>tache 4</idtache> <idtache>tache 5</idtache> <idtache>tache 6</idtache> </tachesassociees> </OTP> <OTP> <id>4</id> <otp>OTP : 4</otp> <actif>false</actif> <sitesassocies> <idSite>site 1</idSite> <idSite>site 2</idSite> <idSite>site 3</idSite> <idSite>site 4</idSite> <idSite>site 5</idSite> <idSite>site 6</idSite> </sitesassocies> <tachesassociees> <idtache>tache 1</idtache> <idtache>tache 2</idtache> <idtache>tache 3</idtache> <idtache>tache 4</idtache> <idtache>tache 5</idtache> <idtache>tache 6</idtache> </tachesassociees> </OTP> <OTP> <id>5</id> <otp>OTP : 5</otp> <actif>false</actif> <sitesassocies> <idSite>site 1</idSite> <idSite>site 2</idSite> <idSite>site 3</idSite> <idSite>site 4</idSite> <idSite>site 5</idSite> <idSite>site 6</idSite> </sitesassocies> <tachesassociees> <idtache>tache 1</idtache> <idtache>tache 2</idtache> <idtache>tache 3</idtache> <idtache>tache 4</idtache> <idtache>tache 5</idtache> <idtache>tache 6</idtache> </tachesassociees> </OTP> <OTP> <id>6</id> <otp>OTP : 6</otp> <actif>false</actif> <sitesassocies> <idSite>site 1</idSite> <idSite>site 2</idSite> <idSite>site 3</idSite> <idSite>site 4</idSite> <idSite>site 5</idSite> <idSite>site 6</idSite> </sitesassocies> <tachesassociees> <idtache>tache 1</idtache> <idtache>tache 2</idtache> <idtache>tache 3</idtache> <idtache>tache 4</idtache> <idtache>tache 5</idtache> <idtache>tache 6</idtache> </tachesassociees> </OTP> <OTP> <id>7</id> <otp>OTP : 7</otp> <actif>false</actif> <sitesassocies> <idSite>site 1</idSite> <idSite>site 2</idSite> <idSite>site 3</idSite> <idSite>site 4</idSite> <idSite>site 5</idSite> <idSite>site 6</idSite> </sitesassocies> <tachesassociees> <idtache>tache 1</idtache> <idtache>tache 2</idtache> <idtache>tache 3</idtache> <idtache>tache 4</idtache> <idtache>tache 5</idtache> <idtache>tache 6</idtache> </tachesassociees> </OTP> <OTP> <id>8</id> <otp>OTP : 8</otp> <actif>false</actif> <sitesassocies> <idSite>site 1</idSite> <idSite>site 2</idSite> <idSite>site 3</idSite> <idSite>site 4</idSite> <idSite>site 5</idSite> <idSite>site 6</idSite> </sitesassocies> <tachesassociees> <idtache>tache 1</idtache> <idtache>tache 2</idtache> <idtache>tache 3</idtache> <idtache>tache 4</idtache> <idtache>tache 5</idtache> <idtache>tache 6</idtache> </tachesassociees> </OTP> <OTP> <id>9</id> <otp>OTP : 9</otp> <actif>false</actif> <sitesassocies> <idSite>site 1</idSite> <idSite>site 2</idSite> <idSite>site 3</idSite> <idSite>site 4</idSite> <idSite>site 5</idSite> <idSite>site 6</idSite> </sitesassocies> <tachesassociees> <idtache>tache 1</idtache> <idtache>tache 2</idtache> <idtache>tache 3</idtache> <idtache>tache 4</idtache> <idtache>tache 5</idtache> <idtache>tache 6</idtache> </tachesassociees> </OTP> <site> <id>0</id> <nom>site 0</nom> </site> <site> <id>1</id> <nom>site 1</nom> </site> <site> <id>2</id> <nom>site 2</nom> </site> <site> <id>3</id> <nom>site 3</nom> </site> <site> <id>4</id> <nom>site 4</nom> </site> <site> <id>5</id> <nom>site 5</nom> </site> <tache> <id>0</id> <nom>tache 0</nom> </tache> <tache> <id>1</id> <nom>tache 1</nom> </tache> <tache> <id>2</id> <nom>tache 2</nom> </tache> <tache> <id>3</id> <nom>tache 3</nom> </tache> <tache> <id>4</id> <nom>tache 4</nom> </tache> <tache> <id>5</id> <nom>tache 5</nom> </tache> <tache> <id>6</id> <nom>tache 6</nom> </tache> <tache> <id>7</id> <nom>tache 7</nom> </tache> <tache> <id>8</id> <nom>tache 8</nom> </tache> <tache> <id>9</id> <nom>tache 9</nom> </tache> <tache> <id>10</id> <nom>tache 10</nom> </tache> <tache> <id>11</id> <nom>tache 11</nom> </tache> <tache> <id>12</id> <nom>tache 12</nom> </tache> <tache> <id>13</id> <nom>tache 13</nom> </tache> <tache> <id>14</id> <nom>tache 14</nom> </tache> <tache> <id>15</id> <nom>tache 15</nom> </tache> </reponse> </donnees>
c'est bon ce xml ?
Il en faut peu pour être heureux ......

Eléphant du PHP | 53 Messages

30 août 2016, 16:08

T'aurais pas du t'embeter pour les classes, je t'aurai envoyé ça si j'avais su ! :)

Le résultat du xml est bon, mais chaque OTP est associé à toutes les tâches et tous les sites dans ton cas, chacun est lié aux 6 autres, or ce qu'il faut c'est la possibilité qu'un OTP soit lié par exemple aux tâches 2, 3, 5 et aux sites 1, 4. Si cela est possible ton code est ma solution !

Je vais le tester :) !

Je viens de tester, je rentre exactement ton code, je ne récupère plus rien sur ma page, aucun checkbox n'est cochée ...

Tu pensais que je voulais associer chaque OTP avec chaque site et chaque tache c'est ca ?

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8670 Messages

30 août 2016, 17:25

T'aurais pas du t'embeter pour les classes, je t'aurai envoyé ça si j'avais su ! :)
:mrgreen: :mrgreen: :mrgreen:
Tu pensais que je voulais associer chaque OTP avec chaque site et chaque tache c'est ca ?
non du tout mais je suis un gros fainéant et du coup j'ai utilisé la même source de données pour chaque :)

tu veux vraiment pas essayer le JSON, tu as déjà des objets à la base, c'est relativement simple pour avoir des objets et l'utilisation de json pour avoir des objets c'est très simple en JS.

en dehors de cela, si le XML généré par mon script est conforme à tes attentes et que le JS ne le digère pas je doute du JS ;)

c'est en ligne ? y a moyen de voir le truc tourner "en vrai" (par mp si tu veux).
Parce que la c'est flou.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 53 Messages

31 août 2016, 08:39

T'en fais pas mdr ! Désolé j'ai débauché hier et je n'ai pas droit à l'utilisation du site à domicile, donc je n'ai pas pu répondre plus tôt ! Je vais tenter de partir sur du JSON et si je bloque vraiment je te mp pour plus d'infos :) !

Merci pour tous ces conseils et cette aide en tout cas ! =)