Bonjour,

J'aurais besoin de conseil à propos de ce code

Ce que je fais

Voilà je dois dans le cadre d'un projet , avoir la possibilité d'ajouter une ou plusieurs procurations.

foreach($arr['records'] as &$com) 
        {
            if ($com['label'] == $_GET['Nom']) {

                if($com['Procuration']{
                    if($com['Procuration'+$i]){
                        $i++;
                        $com['Procuration'+$i] = $proc;
                    }else {
                        $com['Procuration'+$i] = $proc;
                }else {
                    $com['Procuration'] =  $proc;
                }       
            $merge = array_merge(json_decode($arr, true), $com);
            }
        }
        unset($com);

        $str = json_encode($merge);

Ce que j'obtiens

Cela ne marche bien entendu pas et je vois pas trop comment je pourrais m'y prendre. L'objectif étant d'ajouter au fichier json de nouveaux éléments si la personne décide d'ajouter une nouvelle procuration. Vous auriez pas une piste ?

7 réponses


mrdus
Réponse acceptée

ha d'accord !
alors pour commencer l'erreur(le warning en fait) vient du fait que depuis php 5.6 je crois, les constantes non déclarée sont considérées comme un string.
pour virer ce warning mets ['Procuration'.$i], à la place de [Procuration$i].

j'aime pas trop les imbrications de if else, c'est galère à gérer et on comprend rien quand on relis.
voici ce que je ferais. de tête pas sur que ça fonctionne

foreach($arr['records'] as &$com) 
        {
            if ($com['label'] == $_GET['Nom']) {
                $i=1

                // si ProcurationN existe déjà alors on augmente i
                // tant que i <5.
                while($i<5 && isset($com['Procuration'.$i]){
                $i++
                }
                if($i<5) $com[Procuration.$i] = $proc;
            }
        }
  • des que tu trouve ton label, on fait une boucle qui vérifie si ProcurationN existe, en partant de 1 par exemple.
  • on augmente i tant que la procurationN existe et que i<5
  • on sort de la boucle si i atteint 5 avant d'avoir trouvé un emplacement libre. ou des que ProcurationN est libre.
  • on vérifie que i est bien inferieur à 5 et on ajoute la procuration
  • sinon i est supérieur a 5, ce qui veut dire que Procuration1 ... procuration4 existent dejà

salut,
tu veux simplement ajouter une entrée à la fin d'un tableau json ?
si c'est le cas tu as ça :
[http://php.net/manual/fr/function.json-decode.php]() que tu connais déjà
et
[http://php.net/manual/fr/function.array-push.php]()

gweared
Auteur

Ce que je souhaite c'est ajouter dans procuration les données s'il n'a pas de procuration et s'il en a rajouter un nouveau champs procuration avec les données.
Je sais pas si c'est très clair ou pas?

pour moi il faudrait faire une fonction qui parcours ton tableau ['records'] et renvoie la clé correspondant à la position ['label'] = $_GET['nom'].
de là tu pourras acceder à ['procuration'] et faire ce qu'il te plait :

vérifier s'il y en a une mais je vois pas pourquoi il n'y en aurait pas, même vide (ça vient bien d'une base de données ?)
la récupérer dans une variable,
décoder avec json_decode,
ajouter avec array_push,
réencoder,
réassigner ta procuration avec la valeur de la variable.
tu fourres ce fonctionnement dans une fonction et plouf le tour est joué :)

gweared
Auteur

Alors après avoir chercher un peu :

foreach($arr['records'] as &$com) 
        {
            if ($com['label'] == $_GET['Nom']) {

                if(!empty($com['Procuration'])){

                    if(!empty($com[Procuration.$i]))
                    {
                        $i+=1;
                        $com[Procuration.$i] = $proc;
                        $str = json_encode($arr);

                    }else {

                    $com[Procuration.$i] = $proc;
                    $str = json_encode($arr);
                    }

                }else {
                    $com['Procuration'] =  $proc;
                    $str = json_encode($arr);
                }
            }
        }
        unset($com);

Cela ajoute $proc dans procuration. Si celui-ci n'est pas vide, il crée procuration1 et ainsi de suite.
Le souci c'est qu'il en crée 2 et puis plus rien. J'entend par là que j'ai procuration, procuration2 et procuration3 et pour le reste il modifie procuration3.
Il m'affiche également cela :

Message: Use of undefined constant Procuration - assumed 'Procuration'

ok ,
j'ai vu que tu fais du multi forum :)

Moi j'aurais besoinde plus d'infos :
car tout dépend de ce que tu comptes faire de ces procurations.

1 .Tu as des disques (records) qui ont un nom (label) et 0,1 ou plus procurations. c'est correct ?

  1. Quand tu crées un disque, tu lui donne un label, et une procuration ou non.
    A moins que un disque ait toujours au moins une procuration et dans ce cas tu pourras sauter une étape.
  2. ces procurations sont sous la forme json.

    4 . Tu auras besoin d'acceder à ces données facilement plus tard.

    A ta place je découperais mon code pour bien le comprendre.
    A. Donc : tu as une étape de recherche d'un disque : $record = getRecordsByName(nom)
    B. Ensuite tu dois vérifier si ce disque a déjà une procuration : haveProcuration($record) (pas forcément utile)
    C. Ensuite tu dois inserer ta nouvelle procuration dans ton disque : insertProcuration($record;$newProc)

gweared
Auteur

Oui en effet pour avoir des avis divers.

En fait tu as une liste(records) qui comprend plusieurs personnes (label). Ceux-ci peuvent représenté d'autre personne (procuration) allant jusqu'à 4.
Toutes ses données son compris dans un fichier json.
Ce que je souhaite c'est ajouter 1 ou plusieurs procurations ( pas obligatoire).
Donc quand on ajoute une procuration, cela va dans $com['Procuration'], s'il en ajoute une autre, cela crée un nouveau élément à savoir $com["Procuration1"] et ainsi de suite.
Pour le moment avec le code que j'ai fait, il est possible d'avoir 3 procurations, passé cela il met à jour à chaque fois la dernière procuration. Il m'est donc impossible d'avoir 4 procurations différentes et c'est sur ce point que je bloque un peu car je vois pas pourquoi $i n'irais pas au delà de 3.

Je sais pas si cela est plus clair pour toi.