2009-01-29 8 views
0

J'envoie des données via AJAX à un fichier PHP. C'est à propos des options de filtrage. Quoi qu'il en soit, je l'envoie comme ceci:Problème de tableau PHP

filter[0][data][type] string 
filter[0][data][value] automobiles 
filter[0][field] product 

filter[1][data][type] numeric 
filter[1][data][value] 6000 
filter[1][field] price 

Ce qui précède est tiré de la console FireBug. Puis, en PHP:

$filter = $_POST['filter'.$i]; 
if (is_array($filter)) { 
    for ($i=0;$i<count($filter);$i++){ 
     switch($filter[$i]['data']['type']){ 
      case 'string' : 
         // I'm doing my select from database based on that and so on 

Ainsi, la traduction de ce serait: « Retrouve moi tous les enregistrements de base de données qui sont: hmm, nous allons vérifier les filtres ... Je reçois le premier type de filtre sorcière est "chaîne" sorcière doit être appliquée à la colonne mysql nommé "produit" ... Donc je cherche la valeur de "automobiles" là ... Mais je ne suis pas encore fini, le deuxième filtre fait référence à un filtre numérique pour la colonne "price" de la base de données, donc je prends sa valeur et je l'ajoute à la requête, donc je vais finir par sélectionner toutes les automobiles qui ont un prix supérieur à 6000.

Jusqu'ici tout va bien. s que ma façon d'obtenir des données a changé et je ne peux plus envoyer mes données dans ce format. Le nouveau format est une sorcière URL ressemble à ceci:

filter[0][field]=prodct&filter[0][data][type]=string&filter[0][data][value]=automobiles&filter[1][field]=price&filter[1][data][type]=numeric&filter[1][data][value]=6000 

je peux faire une exploser sur celui-ci par le « & » et se retrouver avec un tableau ... Je peux faire beaucoup ... Le problème est que je ne sais pas comment ajuster mon script de construction de requête pour travailler avec ce genre de données reçues .. Alors que je peux faire un "switch ($ filtre [$ i] ['données'] ['type']) {"again ...

Des idées pour modifier le code?

Merci!

+0

Pourquoi envoyez-vous les données à la script ajax dans l'url? Ne pourriez-vous pas publier les données et contourner entièrement l'étape? – willoller

Répondre

2

parse_str ($ queryString); puis faites tout comme d'habitude. Cette méthode traitera la chaîne de requête et d'importer les variables à l'espace de noms global (qui pourrait être dangereux), donc peut-être utiliser la deuxième forme (voir la liste sur la page de manuel):

$result = array(); 
parse_str($queryString, $result) 
$filters = $result['filter']; 

foreach($filters as $filter) { 
// your code 
} 
0

j'envoyer les données sur comme objet JSON, et le transformer en php revenir à un tableau comme celui que vous utilisiez avant.

Sur le php, vous pouvez utiliser json_decode pour obtenir les données JSON retour à un tableau, et vous pouvez continuer à utiliser le reste du code comme avant.