Comment gérer la soumission de formulaire?

11

Je suis nouveau sur Wordpress et je suis donc confronté à certains problèmes.

Le scénario d'utilisation est le suivant:

  1. Un utilisateur reçoit un formulaire de candidature pour créer un club dans son école.
  2. L'utilisateur remplit le formulaire et clique sur le bouton "Soumettre".
  3. Le formulaire doit être validé.
  4. Si la validation aboutit, les données sont stockées dans la table personnalisée club_details de la base de données et un message apparaît à l'utilisateur (par exemple, Merci d'avoir été envoyé. Votre demande est envoyée à l'administrateur pour approbation.) sinon des messages d'erreur appropriés sont présentés à l'utilisateur.
  5. L'administrateur accède au panneau d'administration Wordpress pour approuver les demandes en attente pour le club. (Les données sont extraites de la base de données et présentées à l'administrateur).

J'ai effectué les opérations suivantes:

  • pour 1) J'ai créé un formulaire / une page de candidature à l'aide de l'éditeur HTML de Wordpress.
  • pour 3) J'ai un fichier javascript ( validation.js ) qui contient le code de validation.
  • pour 4) J'ai un fichier php ( club-functions.php ) qui a une fonction storeInDB() pour stocker les détails de l'application dans un tableau personnalisé en db.
  • pour 5) J'ai créé mon propre dossier de plug-ins et ajouté un fichier php ( club.php ) qui affiche les détails de l'application sur l'administrateur du panneau d'administration de Wordpress.

Je suis coincé à l’endroit suivant: Comment gérer la soumission du formulaire. Où dois-je placer le code qui appelle la fonction de validation du javascript et, plus tard, la fonction storeInDB() .

S'il vous plaît, donnez-moi quelques suggestions sur la façon dont je peux atteindre cet objectif. Cette approche est-elle bonne? Merci beaucoup d'avance.

    
posée Pooja 03.08.2012 - 23:56

2 réponses

12

Vous devez utiliser la fonction wp_ajax ou la fonction wp_ajax_nopriv .

Tout d'abord, vous devez définir l'URL ajax admin comme valeur d'attribut d'action dans le formulaire de soumission.

<form id="" action="<?php echo admin_url('admin-ajax.php'); ?>" method="post" class="form" >

De cette façon, le formulaire sera soumis à admin-ajax.php par défaut (sans JavaScript). Vous pouvez utiliser JavaScript pour que cela fonctionne avec AJAX.

Suivant est la fonction qui utilisera les données soumises. Dans le formulaire, mettez un wp_nonce_field et une entrée cachée avec l'action name. Ma valeur d'action est add_transfer .

<?php wp_nonce_field('add_transfer','security-code-here'); ?>
<input name="action" value="add_transfer" type="hidden">

Vous pouvez mettre la fonction qui gérera ce formulaire dans le fichier functions.php ou dans votre fichier plugin. Vous pouvez utiliser wp_ajax_ + le nom de l'action s'il s'agit d'un formulaire réservé aux utilisateurs connectés. Pour les utilisateurs non connectés, utilisez plutôt wp_ajax_nopriv + le nom 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);
}
    
réponse donnée ifdion 04.08.2012 - 01:39
1

Tout d’abord, laissez-moi vous dire que la validation javascript fonctionne côté client. donc si l'utilisateur désactive js, vous allez avoir des problèmes.

Donc, vous devez également valider les valeurs d'entrée côté serveur.

dans cet esprit:

Le code js peut être appelé directement à partir de la page où se trouve le formulaire. L'attribut onsubmit est le moyen habituel de l'appeler.

exemple

<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

Cela peut aussi être votre page de modèle personnalisée ou single.php. dans ce cas, 99 est l'ID de la page spécifique que vous souhaitez indiquer à l'utilisateur si celle-ci a été approuvée ou si une erreur s'est produite.

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]
    }
  }
}
    
réponse donnée pcarvalho 04.08.2012 - 00:38

Lire d'autres questions sur les étiquettes