PHP não pode ler Array Enviado por AJAX

Possível Duplicado:
enviar matrizes de dados de php para javascript

Estou enviando uma matriz com ajax para um arquivo php. O Array é uma lista de nomes que devem ser armazenados em um database. Para verificar duas vezes isso, tentei ecoar o sql_query criado no arquivo php. Mas a resposta é sempre

Argumento inválido fornecido para foreach () …

Então procurei SO para algumas soluções, e muitas vezes a resposta era algo como “sua ‘Array’ não é uma matriz”. Então eu ecoei a Array submetida ao php, que retorna todos os nomes passados ​​em uma linha (o que eu acho significa que o Array chega no arquivo php).

Então, aqui está o meu 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); } }); 

… e código 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; 

Não entendo exatamente o que há de errado no código. O que poderia estar errado na condição foreach() , se $tNames obviamente é um Array?

Você precisa sugerir a php que deseja obter seus dados como uma matriz. nome tNames como tNames[]

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

Exemplos encontrados aqui: http://api.jquery.com/jQuery.post/

Se você estiver enviando objects mais complexos ou matrizes n-dimensionais, você procurará usar o JSON. você pode usar {object: JSON.stringify(object)} no lado JS e json_parse($_POST['object']) no lado do PHP.

Além do pedido que está sendo malformado, você está enviando uma matriz de javascript que o PHP interpreta como uma string. Solução copiada de outro segmento de SO.

Gareth in Pass Javascript Array -> PHP

Você pode usar JSON.stringify (array) para codificar sua matriz em JavaScript e, em seguida, use $ array = json_decode ($ _ POST [‘jsondata’]); no seu script PHP para recuperá-lo.

Você está faltando o nome da variável POST no seu JavaScript:

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

Agora, tente um var_dump nos dados POST:

 var_dump($_POST['data']); 

Como é que você está tentando evitar uma string, você precisaria convertê-lo em um object usando json_decode para iterar sobre ele.

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

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