Comment gérer la soumission de formulaire?
2 réponses
- votes
-
- 2012-08-03
Vous devez utiliser lafonction
wp_ajax
ouwp_ajax_nopriv
.Tout d'abord,vous devezmettre l'url admin ajax comme valeur d'attribut d'action dans leformulaire de soumission.
<form id="" action="<?php echo admin_url('admin-ajax.php'); ?>" method="post" class="form" >
De cettefaçon,leformulaire sera soumispar défaut à admin-ajax.php (sans JavaScript). Vouspouvez utiliser JavaScriptpour lefairefonctionner avec AJAX.
Lafonction suivante utilisera les données soumises. À l'intérieur duformulaire,mettez un
wp_nonce_field
et uneentréemasquée avec l'action denom. La valeur demon actionestadd_transfer
.<?php wp_nonce_field('add_transfer','security-code-here'); ?> <input name="action" value="add_transfer" type="hidden">
Vouspouvezmettre lafonction quigérera ceformulaire dans lefunctions.php ou dans votrefichierplugin. Vouspouvez utiliser
wp_ajax_
+ lenom de l'action s'il s'agit d'unformulaire réservé aux utilisateurs connectés. Pour les utilisateursnon connectés,utilisezplutôtwp_ajax_nopriv
+ lenom de l'action.add_action('wp_ajax_add_transfer', 'process_add_transfer'); function process_add_transfer() { if ( empty($_POST) || !wp_verify_nonce($_POST['security-code-here'],'add_transfer') ) { echo 'You targeted the right function, but sorry, your nonce did not verify.'; die(); } else { // do your function here wp_redirect($redirect_url_for_non_ajax_request); }
You should use the
wp_ajax
or thewp_ajax_nopriv
function.First of all you should put the the admin ajax url as the action attribute value in the submission form.
<form id="" action="<?php echo admin_url('admin-ajax.php'); ?>" method="post" class="form" >
That way the the form will be submitted to the admin-ajax.php by default (without JavaScript). You can use JavaScript to make it work using AJAX.
Next is the function that will use the submitted data. Inside the form, put a
wp_nonce_field
and a hidden input with the name action. My action value isadd_transfer
.<?php wp_nonce_field('add_transfer','security-code-here'); ?> <input name="action" value="add_transfer" type="hidden">
You can put the function that will handle this form in the functions.php or in your plugin file. You can use
wp_ajax_
+ the action name if this is a form only for logged in users. For non logged in users, usewp_ajax_nopriv
+ the action name instead.add_action('wp_ajax_add_transfer', 'process_add_transfer'); function process_add_transfer() { if ( empty($_POST) || !wp_verify_nonce($_POST['security-code-here'],'add_transfer') ) { echo 'You targeted the right function, but sorry, your nonce did not verify.'; die(); } else { // do your function here wp_redirect($redirect_url_for_non_ajax_request); }
-
Merciifdionpour la réponse.Je crée leformulaire dans «l'éditeur HTML Wordpress».Alors,est-ilbon d'inclure du codephp dans leformulaire carje devraiinstaller leplugin 'Exec-PHP' qui,je pense,estexcessif?Veuillezpartager vospensées.Thanks ifdion for the reply. I'm creating the form in 'Wordpress HTML editor'. So, is it good to include php code in the form as I will have to install 'Exec-PHP' plugin which I believe is a overkill? Please share your thoughts.
- 0
- 2012-08-04
- Pooja
-
Remplacez simplement la valeur de l'actionpar http://your-site-url.com/wp-admin/admin-ajax.php.Just replace the action value with http://your-site-url.com/wp-admin/admin-ajax.php.
- 0
- 2012-08-04
- ifdion
-
Çamarche?Does that work?
- 0
- 2012-08-08
- ifdion
-
y a-t-il unbonmoyen d'yparvenir,mais sans admin-ajax.php?is there a good way to achieve the same but without admin-ajax.php?
- 1
- 2014-02-19
- Tahir Yasin
-
Jeme rends compte que c'est une vieille réponse,mais celane fonctionnerapas car `wp_redirect`ne fera rienici;Les requêtes AJAX s'exécutenten arrière-planet `wp_redirect`estjuste un wrapperintelligentpour un appel` header ('location: ...') `qui doit êtreexécuté avant la sortie.Si vous souhaitez une redirection suite à un appel AJAX,vous devez renvoyer une URLet gérer la redirection via JS.Pour référence: http://wordpress.stackexchange.com/a/133939/17826I realise this is an old answer, but this won't work as `wp_redirect` won't do anything here; AJAX requests run in the background and `wp_redirect` is just a smart wrapper for a `header('location:...')` call that needs to be run prior to output. If you want a redirect following an AJAX call, you need to pass back a URL and handle the redirect via JS. For reference: http://wordpress.stackexchange.com/a/133939/17826
- 0
- 2015-09-09
- indextwo
-
@indextwomercipour le commentaire.Vous avez raison,vous avezbesoin d'une URL appropriéepour être renvoyéepuis redirigée vers via JS,pour une requête AJAX.Le `wp_redirect`ne sera également d'aucune utilité dans une requête AJAX.Maisma réponsen'utilise aucun JS donc cen'estpas une requête AJAX,bien qu'elle utilise lesfonctions `wp_ajax`et` wp_ajax_nopriv`.Le `wp_redirect`est utilisépour éloigner l'utilisateur de lapage vierge` wp-admin/admin-ajax.php`.J'espère que cela clarifie la chose.@indextwo thanks for the comment. You are right, you do need a proper URL to be passed back and then redirected to via JS, for an AJAX request. The `wp_redirect` also will be of no use in an AJAX request. But my answer isn't using any JS therefore it isn't an AJAX request, though it utilize the `wp_ajax` and the `wp_ajax_nopriv` functions. The `wp_redirect` is used to send the user away from the blank `wp-admin/admin-ajax.php` page. Hope this clears thing out.
- 0
- 2015-09-10
- ifdion
-
'admin-ajax.php' → où réside cefichier?Je veux dire dans quel dossier?'admin-ajax.php' → where is this file residing? I mean in which folder?
- 0
- 2019-02-26
- The WP Intermediate
-
@TheWPNovice Je suppose qu'ilesttoujours dans le répertoire ``/wp-admin/``.Notez que vousn'avezpasbesoin demodifier ou d'ajouter quoi que ce soit dans cefichier.@TheWPNovice I guess it is still in the ``/wp-admin/`` directory. Note that you don't need to change or add anything in that file.
- 1
- 2019-02-27
- ifdion
-
Ce systèmepeut-il égalementfonctionner sur unformulaire quitente d'envoyer une-mail?Can this system also work on a form that is trying to send email?
- 0
- 2019-02-27
- The WP Intermediate
-
- 2012-08-03
Tout d'abord,laissez-moi vous dire que la validationjavascriptfonctionne côté client. donc si l'utilisateur désactivejs,vous allez avoir desproblèmes.
donc,vous devez également valider les valeurs d'entrée,côté serveur.
dans cetesprit:
Le codejspeut être appelé directement depuis lapage où setrouve leformulaire. L'attribut onsubmitest lamanière habituelle de l'appeler.
<form onSubmit="validateForms()" method="post" action="domain.com/club-contacts"> <label for="app_email">Application</label> <input type="text" name="app_email" id="app_email" value="" /> <input type="hidden" name="app_application" value="1" /> <input type="submit" name="app_form_send" value="Send" /> </form>
page.php
Celapeut aussi être votrepage demodèlepersonnalisé ou single.php. dans ce cas,99est l'ID de lapage spécifique que vous souhaitezindiquer à l'utilisateur sielle a été approuvée ou sielle contient uneerreur.
if ( get_the_ID() == '99' ) { // lets validate the input if( !empty($_POST['app_application']) && $_POST['app_application'] == "1" ) { if(!empty($_POST['app_email'])) { // check the codex for [Data_Validation][1] } } }
first, let me tell you that javascript validation works on client side. so if the user, disables js, you're going to have problems.
so, you should also validate the input values, server-side.
with that in mind:
The js code can be called directly from the page where the form is. onsubmit attribute is the usual way to call it.
example
<form onSubmit="validateForms()" method="post" action="domain.com/club-contacts"> <label for="app_email">Application</label> <input type="text" name="app_email" id="app_email" value="" /> <input type="hidden" name="app_application" value="1" /> <input type="submit" name="app_form_send" value="Send" /> </form>
page.php
This can be also your custom template page or single.php. in this case, 99 is the ID of the specific page you want to indicate to the user if it was approved or had an error.
if ( get_the_ID() == '99' ) { // lets validate the input if( !empty($_POST['app_application']) && $_POST['app_application'] == "1" ) { if(!empty($_POST['app_email'])) { // check the codex for [Data_Validation][1] } } }
-
Merci Peteroakpour la réponse.Oùpuis-je appeler le code PHPpourtraiter davantage les données duformulaire?Thanks peteroak for the reply. Where can I call PHP code to further process the form data?
- 0
- 2012-08-04
- Pooja
-
l'attribut actionpointera vers unfichier.dans cefichier,vouspouvezfiltreret valider votreformulaire.Jemettrai àjourma réponsepour l'inclure.the action attribute will point to a file. in that file you can filter and validate your form. i will update my response to include that.
- 0
- 2012-08-04
- pcarvalho
Je suisnouveau dans wordpresset je suis donc confronté à desproblèmes.
Le scénario de cas d'utilisationest le suivant:
club_details
dans labase de donnéeset l'utilisateur voit unmessage (parexemple: Mercipour la soumission. Votre demandeestenvoyée à l'administrateurpour approbation. ) sinon desmessages d'erreur appropriés sont affichés à l'utilisateur.J'aifait ce qui suit:
validation.js
) qui a le code de validation.club-functions.php
) qui a unefonctionstoreInDB()
pour stocker les détails de l'application dans untableaupersonnalisé dans db.club.php
) qui affiche les détails de l'application à l'administrateur sur lepanneau d'administration de Wordpress.Je suis coincé à l'endroit suivant: Commentgérer la soumission duformulaire. Où dois-jeplacer le code qui appelle lafonction de validation dujavascriptet appelleplustard lafonction
storeInDB()
.Veuillezme fournir quelques suggestions sur lafaçon d’yparveniret cette approcheest-ellebonne? Mercibeaucoup d'avance.