फॉर्म सबमिशन कैसे संभालें?


13

मैं वर्डप्रेस के लिए नया हूं और इसलिए कुछ मुद्दों का सामना कर रहा हूं।

उपयोग मामला परिदृश्य इस प्रकार है:

  1. एक उपयोगकर्ता को अपने स्कूल में एक क्लब शुरू करने के लिए एक आवेदन पत्र प्रदर्शित किया जाता है।
  2. उपयोगकर्ता फ़ॉर्म भरता है और 'सबमिट' बटन हिट करता है।
  3. फॉर्म को मान्य करने की आवश्यकता है।
  4. यदि सत्यापन सफल होता है, तो डेटा को club_detailsडीबी में कस्टम टेबल में संग्रहीत किया जाता है और उपयोगकर्ता को कुछ संदेश दिखाया जाता है (उदाहरण: प्रस्तुत करने के लिए धन्यवाद। आपका आवेदन अनुमोदन के लिए व्यवस्थापक को भेज दिया जाता है।) और उपयुक्त त्रुटि संदेश उपयोगकर्ता को दिखाए जाते हैं।
  5. क्लब के लिए लंबित अनुरोधों को अनुमोदित करने के लिए व्यवस्थापक वर्डप्रेस व्यवस्थापक पैनल पर जाता है। (डेटा db से प्राप्त किया गया है और व्यवस्थापक को दिखाया गया है)।

मैंने निम्नलिखित कार्य किया है:

  • 1 के लिए) मैंने वर्डप्रेस एचटीएमएल एडिटर का उपयोग करके एक एप्लिकेशन फॉर्म / पेज बनाया है।
  • 3) मेरे पास एक जावास्क्रिप्ट फ़ाइल ( validation.js) है जिसमें सत्यापन कोड है।
  • 4 के लिए) मेरे पास एक php फ़ाइल ( club-functions.php) है जिसमें storeInDB()db में कस्टम टेबल में एप्लिकेशन विवरण संग्रहीत करने के लिए एक फ़ंक्शन है।
  • 5 के लिए) मैंने अपना स्वयं का प्लगइन फ़ोल्डर बनाया है और एक php फ़ाइल ( club.php) जोड़ी है जो कि Wordpress व्यवस्थापक पैनल पर व्यवस्थापक को एप्लिकेशन विवरण प्रदर्शित करता है।

मैं निम्नलिखित स्थान पर अटका हुआ हूं: फॉर्म सबमिशन कैसे संभालना है। मुझे उस कोड को कहां रखना चाहिए जो जावास्क्रिप्ट के वैध फ़ंक्शन को कॉल करता है और बाद में storeInDB()फ़ंक्शन को कॉल करता है।

कृपया मुझे कुछ सुझाव दें कि मैं इसे कैसे प्राप्त करूं और क्या यह दृष्टिकोण अच्छा है? आपका अग्रिम रूप से बोहोत धन्यवाद।

जवाबों:


13

आपको wp_ajaxया wp_ajax_noprivफ़ंक्शन का उपयोग करना चाहिए ।

सबसे पहले आपको एडमिन अजाक्स url को सबमिट करना चाहिए क्योंकि सबमिशन फॉर्म में एक्शन एट्रीब्यूट वैल्यू है।

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

इस तरह फ़ॉर्म को डिफ़ॉल्ट रूप से (जावास्क्रिप्ट के बिना) व्यवस्थापक-ajax.php को सबमिट किया जाएगा। आप AJAX का उपयोग करके इसे काम करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं।

अगला फ़ंक्शन है जो सबमिट किए गए डेटा का उपयोग करेगा। फॉर्म के अंदर, wp_nonce_fieldनाम एक्शन के साथ एक और एक छिपा हुआ इनपुट डालें। मेरा एक्शन वैल्यू है add_transfer

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

आप फ़ंक्शन को इस फ़ंक्शन को फ़ंक्शन.php या अपनी प्लगइन फ़ाइल में संभाल सकते हैं। आप wp_ajax_एक्शन नाम का उपयोग कर सकते हैं यदि यह केवल उपयोगकर्ताओं के लिए लॉग इन है। गैर लॉग इन उपयोगकर्ताओं के लिए, wp_ajax_noprivएक्शन नाम के बजाय + का उपयोग करें ।

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);
}

उत्तर के लिए धन्यवाद ifdion मैं 'वर्डप्रेस HTML एडिटर' में फॉर्म बना रहा हूं। इसलिए, प्रपत्र में php कोड को शामिल करना अच्छा है क्योंकि मुझे 'Exec-PHP' प्लगइन स्थापित करना होगा, जो मुझे लगता है कि एक ओवरकिल है? कृपया अपने विचार साझा करें।
पूजा

बस एक्शन वैल्यू को अपने-site-url.com/wp-admin/admin-ajax.php से बदल दें
ifdion

क्या वह काम करता है?
ifdion

1
वहाँ एक ही तरीका है, लेकिन व्यवस्थापक- ajax.php के बिना प्राप्त करने के लिए एक अच्छा तरीका है?
ताहिर यासीन

1
@TheWPNovice मुझे लगता है कि यह अभी भी /wp-admin/निर्देशिका में है। ध्यान दें कि आपको उस फ़ाइल में कुछ भी बदलने या जोड़ने की आवश्यकता नहीं है।
ifdion

2

सबसे पहले, मैं आपको बता दूं कि जावास्क्रिप्ट सत्यापन क्लाइंट की तरफ काम करता है। इसलिए यदि उपयोगकर्ता, js को निष्क्रिय करता है, तो आपको समस्याएँ होने वाली हैं।

इसलिए, आपको इनपुट मान, सर्वर-साइड को भी मान्य करना चाहिए।

ये ध्यान रखते हुए:

जेएस कोड को सीधे उस पेज से कॉल किया जा सकता है जहां फॉर्म है। ऑनसाइट कॉलिंग विशेषता इसे कॉल करने का सामान्य तरीका है।

उदाहरण

<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

यह आपका कस्टम टेम्प्लेट पेज या single.php भी हो सकता है। इस मामले में, 99 उस विशिष्ट पृष्ठ की आईडी है जिसे आप उपयोगकर्ता को इंगित करना चाहते हैं यदि वह स्वीकृत था या कोई त्रुटि थी।

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]
    }
  }
}

उत्तर के लिए धन्यवाद पेट्रोक। प्रपत्र डेटा को आगे की प्रक्रिया के लिए मैं PHP कोड कहाँ कह सकता हूँ?
पूजा

क्रिया विशेषता एक फ़ाइल को इंगित करेगी। उस फ़ाइल में आप अपने फ़ॉर्म को फ़िल्टर और मान्य कर सकते हैं। मैं इसमें शामिल होने के लिए अपनी प्रतिक्रिया अपडेट करूंगा।
pcarvalho
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.