Récupérer les données POST de l'appel AJAX
-
-
Et si vousessayez `$ _POST ["newFormRecherche "] ["field1 "]` anf `$ _POST ["newFormRecherche "] ["field2 "]`What if you try `$_POST["newFormRecherche"]["field1"]` anf `$_POST["newFormRecherche"]["field2"]`
- 0
- 2016-04-28
- czerspalace
-
Je reçois un avertissement auniveau des lignes concernées: Attention: décalage de chaîneillégal 'field1' ...I get a warning at the involved lines : Warning: Illegal string offset 'field1'...
- 0
- 2016-04-28
- Fafanellu
-
veuillezfaire leminimum de débogage avant deposer une question.cela signifie regarder chaque variable (comme `$ _POST ["newFormRecherche "]`)pour voir si le contient les valeurs attendueset écrire ces valeurs dans la question.regardez aussi cettepage: http://stackoverflow.com/questions/12769982/reference-what-does-this-error-mean-in-phpplease do the minimum of debugging before to ask a question. that means looking at every variable (like `$_POST["newFormRecherche"]`) to see if the contains the expected values and writing these values in the question. look also this page : http://stackoverflow.com/questions/12769982/reference-what-does-this-error-mean-in-php
- 0
- 2016-04-28
- mmm
-
Vous devezprobablement analyser le `$ _POST ['newFormRecherche']` comme `parse_str ($ _ POST ["newFormRecherche "],$ output);`puisessayer `$ output ["field1 "]`You probably need to parse the `$_POST['newFormRecherche']` like `parse_str($_POST["newFormRecherche"], $output);` and then try `$output["field1"]`
- 1
- 2016-04-28
- czerspalace
-
mercibeaucoup,çamarche!même sije ne comprendspaspourquoije n'aipaspu accéder aux variables "normalement".Dans une versionprécédente de cettefonction,"action" étaiten dehors duparamètre de données,et j'aipu récupérer $ _POST ['field1'].thanks a lot, it works ! though I don't understand why I couldn't access the variables "normally". In a previous version of this function, "action" vas outside the data parameter, and I was able to retrieve $_POST['field1'].
- 0
- 2016-04-28
- Fafanellu
-
Un résumé solide dans ** EDIT # 2 **,@Fafanellu!Sur unenotefinale,j'ai ajouté unepetite fonction `formFieldsToObject ()` à la solution **jQuery ** qui devrait corriger legrossier `$ _POST ['newFormRecherche'] [0] ['nom']`/`$ _POST['newFormRecherche'] [0] ['value'] `problem=]A solid summary in **EDIT #2**, @Fafanellu! On a final note, I did add a little `formFieldsToObject()` function to the **jQuery** solution which should fix the gross `$_POST['newFormRecherche'][0]['name']` / `$_POST['newFormRecherche'][0]['value']` problem =]
- 0
- 2016-04-30
- bosco
-
bienfait,une solutionpropreet simple!pourquoi unetellefonctionn'existepasnativement?!nicely done, a clean and simple solution ! why such a function doesn't exist natively ?!
- 0
- 2016-04-30
- Fafanellu
-
0 réponses
- votes
J'ai le script
JS
suivant:Côté
PHP
:Comme vous l'avez deviné,je peux accéder à
$ _POST ["newFormRecherche"]
alors queje nepeuxpas récupérer$ _POST ["field1"]
ni$ _ POST ["champ2"]
.jQuery
serialize ()
fonctionne correctement:j'aitesténewFormRecherche
var avec une alerteet ilest affiché sous labonneforme:$field1=peuimporte & amp; $field2=n'importe quoi
.Normalement,je ne devraispas avoir à analyser les résultatspour accéder aux variables $ _POST [],d'après ce quej'ai lu here ,mais évidemment celane fonctionnepas. D'où vient ceproblème? Dois-je utiliser autre chose que des
données
pourtransmettremes arguments?EDIT :
$ _POST ["newFormRecherche"]
existe côté PHP,et contient la chaîne attendue$field1=what & amp; $field2=any
.EDIT # 2 : Voici unemise àjour,selon la remarqueintéressante de @czerspalaceet lemessagetrès détaillé de @bosco. J'essaieici de résumer ce qu'ils ont ditet deproposer des solutions.
Leproblèmeici était une double sérialisation,unefaite "à lamain",unefaiteparjQuery lors de l'appel AJAX. Lefait que les variables
$ _POST []
ne puissentpas être correctement récupérées côté serveurprovient dedonnées
,qui doivent correspondre auformalisme de Wordpress,c'est-à-dire: unaction
(quiest unefonction PHP)et les donnéesenvoyées (généralement,depuis unformulaire).Solution de @Bosco - Utilisez laméthodejQuery
serializeArray ()
. Dans ce cas,les donnéesenvoyées sont composées de 2 objets. Afin de récupérer correctement les champs côté serveur,je doisgérer untableau associatif comme celui-ci:$ _POST ['newFormRecherche'] [0] ['name']
et$ _POST [ 'newFormRecherche'] [0] ['valeur']
. Même chosepour les autres champs (en remplaçant [0]par d'autresnombres). Pour résoudre cela,@Boscopropose ci-dessous lafonctionformFieldsToObject
quiest appelée sur les données,lors de l'appel AJAX.Solution de @czerspalace - Utilisez laméthodejQuery
serialize ()
,et faites une désérialisationmanuelle côté serveur,en utilisantparse_str ($ _POST ['newFormRecherche'],$newFormRecherche);
pour être capable de récupérer les champs queje veux: $newFormRecherche ['field1'],...et ainsi de suite.Dans les deux cas,les données côté serveur doivent être correctementnettoyées,comme les donnéesenvoyéespar un utilisateur via desformulaires doiventtoujours l'être. Celaimplique: vérifier lestypes de champs,vérifier (voiretronquer) la longueur des champs ...,autrement dit:ne jamaisfaire confiance à l'utilisateur.
EDIT # 3 : dans le cas où vous utilisez
FormData
,assurez-vous d'ajouter cette ligne dans votre appel AJAX:processData:false,
. Cependant,je n'aipasimplémenté de solution complète avec cettetechnique.