3 votes

PHP ne peut pas lire le tableau envoyé par AJAX

Duplicata possible :
envoyer des tableaux de données de php à javascript

J'envoie un tableau avec ajax à un fichier php. Le tableau est une liste de noms qui doivent être stockés dans une base de données. Afin de vérifier cela, j'ai essayé d'envoyer l'écho de la fonction sql_query créé dans le fichier php. Mais la réponse est toujours

Argument non valide fourni pour foreach()...

J'ai donc cherché des solutions dans SO, et souvent la réponse était quelque chose comme "votre 'Array' n'est pas un Array". J'ai donc envoyé en écho le tableau soumis au php, qui renvoie tous les noms passés sur une seule ligne (ce qui, je pense, signifie que le tableau arrive dans le fichier php).

Alors voici mon JS...

var tourneyData = {
    tName : tourneyName,
    tNum : number,
    tNames : names, // this is an array
    tInt : international,
    tLig : liga,
    tStars : stars
};

$.ajax({
    type: "POST",
    url: "php/storeTourney.php",
    data: tourneyData,
    datatype: "json",
    success: function(response){
        alert("response " + response);
    }
});

... et le code PHP

$tName = $_POST['tName'];
$tNum = $_POST['tNum'];
$tNames = $_POST['tNames'];
$tInt = $_POST['tInt'];
$tLig = $_POST['tLig'];

$insert = "";
foreach($tNames as $d){ // line pointed in the error message
    $insert += "INSERT INTO NAMES VALUES('test', '".$d."');";
}

echo $insert;

Je ne comprends pas exactement ce qui ne va pas dans le code. Qu'est-ce qui pourrait bien être faux dans le foreach() -déclaration, si $tNames évidemment est un tableau ?

2voto

Levi Points 1822

Vous devez indiquer à php que vous souhaitez obtenir vos données sous forme de tableau. name tNames as tNames[]

var tourneyData = {
    tName : tourneyName,
    tNum : number,
    'tNames[]' : names, // this is an array
    tInt : international,
    tLig : liga,
    tStars : stars
};

Vous trouverez des exemples ici : http://api.jquery.com/jQuery.post/

Si vous envoyez des objets plus complexes ou des tableaux à n dimensions, il est préférable d'utiliser le format JSON. {object: JSON.stringify(object)} du côté de la JS et json_parse($_POST['object']) du côté de PHP.

1voto

En plus de la requête malformée, vous soumettez un tableau javascript que PHP interprète comme une chaîne. Solution copiée d'un autre fil de discussion de SO.

Gareth en Passer le tableau Javascript -> PHP

Vous pouvez utiliser JSON.stringify(array) pour coder votre tableau en JavaScript, puis utiliser $array=json_decode($_POST['jsondata']) ; dans votre script PHP pour le récupérer.

0voto

Jeffrey Points 653

Il manque le nom de la variable POST dans votre JavaScript :

(...)

$.ajax({
    type: "POST",
    url: "php/storeTourney.php",
    data: {"data":tourneyData},
    datatype: "json",
    success: function(response){
        alert("response " + response);
    }
});

Maintenant, essayez un var_dump sur les données POST'ed :

var_dump($_POST['data']);

0voto

Fraser Points 6783

Comme vous essayez d'effectuer un foreach sur une chaîne de caractères, vous devez la convertir en objet en utilisant la méthode suivante json_decode pour l'itérer.

$tNames = json_decode($_POST['tNames']);

voir : http://php.net/manual/en/function.json-decode.php

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X