Bonjour,

Je crée un tableau via Js


sessionIdsArray = [];
                
                    for(var i=0;i<btns_ajouter.length;i++)
                        {
                        sessionIdsArray.push([$("#id" + i).val(),parseFloat($("#quantity" + i).val())]);
                        }  


J'essaie de le récupérer via Ajax pour l'utiliser en PHP


$.ajax({
                url: '/fr/BO/Carts/show',
                type: 'post',
                data: {sessionIdsArray},
                })


J'ai bien le tableau dans ma console mais je n'arrive pas à le récupérer dans mon Controleur


if (isset($_POST['sessionIdsArray']))
            {
            $carts = $_POST['sessionIdsArray'];
            var_dump($_POST['sessionIdsArray']);
            }


Si j'arrive à le récupérer dans PHP, je voudrai arriver à récupérer via une boucle :

$_SESSION['cart'][id]= quantity ;


Comment faire

Merci de votre aide
Modifié par dudu22 (11 Dec 2021 - 12:34)
Modérateur
Salut,

Alors si je ne dis pas de bêtise, pour envoyer en AJAX il faut passer par du JSON. Donc soit tu fait une double transformation array>json / AJAX / json>array soit tu utilises le json tout le long mais là je te spoil un peu la seconde partie de ma réponse...

La structure de ton tableau, si je me plante pas sera du genre (j'ai refait une boucle de 0 a 9 vu que j'avais pas les .val) :

[
    ["id0", "quantity0"],
    ["id1", "quantity1"],
    ["id2", "quantity2"],
    ["id3", "quantity3"],
    ["id4", "quantity4"],
    ["id5", "quantity5"],
    ["id6", "quantity6"],
    ["id7", "quantity7"],
    ["id8", "quantity8"],
    ["id9", "quantity9"]
]

Et donc pour y accéder ca sera plutôt :
sessionIdsArray[0][0] qui donnera "id0"
sessionIdsArray[0][1] qui donnera "quantity0"
sessionIdsArray[1][0] qui donnera "id1"
//etc


Un sessionIdsArray["id0"] ne te donnera rien. Tu ne peux pas donner de clés aux tableaux c'est forcément 0, 1, 2 ,3 etc tu ne peux donner que les valeurs.

Par contre dans le Json tu peux tout a fait faire :
obj = {'id0':'quantity0'};

et ensuite lire la valeur grâce à

obj.id0


Et comme c'est du JSON tu peux direct l'envoyer avec AJAX elle est pas belle la vie ?! Smiley lol
Modérateur
Ah bah grâce a ton autre sujet j'ai regardé un peu plus précisément la fonction ajax de jquery et en fait :
a écrit :
data
Type: PlainObject or String or Array
[...]
If the value is an array, jQuery serializes multiple values with same key based on the value of the traditional setting (described below). For example, { a: [1,2] } becomes the string "a%5B%5D=1&a%5B%5D=2" with the default traditional: false setting.

https://api.jquery.com/Jquery.ajax/

Donc apparemment jquery te permet d'envoyer des array (c'est lui qui transforme ça automatiquement avant l'envoi quoi)
Merci Laurent pour tes efforts

J'y suis arrivé pas forcément de la bonne manière mais cela marche.

J'ai modifié mon ajax


$.ajax({
                url: '/fr/BO/Carts/show',
               //url: '/fr/BO/Carts/recalc_test',

                type: 'post',
               
                data: {tab : sessionIdsArray}
                                })


Que je récupère dans php et fait une boucle



if (isset($_POST['tab']))
            {
            $tab = $_POST['tab'];

            for ($row = 0; $row< count($tab); $row++)
                {
                for ($col = 0; $col < 1; $col++) 
                    {
                    $id =$tab[$row][$col];
                    //$_SESSION['panier'][$tab][$row]=[$carts[$i];
                    }
                for ($col = 1; $col < 2; $col++) 
                    {
                    $quantity =$tab[$row][$col];
                    }

                $_SESSION['cart'][$id]=$quantity;               
                
                    }
                }



Merci encore

Par contre je déclenche l'ajax à chaque mouvement de la quantité

J'aurai aimé le faire quand je passe sur une autre page ou quand je rafraîchis ma page