नीचे मेरा कोड है। अगर मैं इस लिंक का उपयोग कार्रवाई = "https://www.paypal.com/cgi-bin/webscr" फॉर्म में नहीं करता हूं। डेटा का रूप मेरे डेटाबेस में सफलतापूर्वक डाला गया। लेकिन, जब मैं इस क्रिया लिंक का उपयोग कर रहा हूं। डेटाबेस में, फॉर्म डेटा नहीं भेज रहा है

तो, क्रिया कैसे बना सकते हैं और पोस्ट विधि एक साथ कैसे काम कर सकते हैं?

असल में सबमिट बटन पर क्लिक करने के बाद मैं यही चाहता हूं, मेरे डेटाबेस में डेटा डालने का शीर्षक सफलतापूर्वक होगा। और फिर पेज पेपाल चेकआउट पेज पर रीडायरेक्ट करता है।

<?php
$database_username = 'root';
$database_password = '';
$pdo_conn = new PDO( 'mysql:host=localhost;dbname=shipping_pro', $database_username, $database_password );

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['insert'])) {
  $sql = "INSERT INTO posts (title) VALUES (:title)";
  $pdo_statement = $pdo_conn->prepare( $sql );
  $result = $pdo_statement->execute( array( 
    ':title'=>$_POST['title']
  ) );
  if (!empty($result) ){
    header('location:index.php');
  }
}
?>
<form method="POST" action="https://www.paypal.com/cgi-bin/webscr">
  <input type="text" name="title" placeholder="Title" />
  <input name="insert" type="submit" value="Add">
</form>
0
Md Rumman 26 नवम्बर 2019, 10:13
2
आपका फॉर्म पेपैल वेबसाइट को लक्षित कर रहा है।
 – 
Jeto
26 नवम्बर 2019, 10:15
1
डीबी को डेटा भेजने के लिए अजाक्स का उपयोग करें और पेपैल को फॉर्म जमा करने के लिए AJAX कॉलबैक का उपयोग करें?
 – 
Professor Abronsius
26 नवम्बर 2019, 10:16
जब आपको बनाने के लिए कार्रवाई नहीं दी जाती है तो यह उसी पृष्ठ पर जमा हो जाएगी और जब आप फॉर्म को कार्रवाई प्रदान करेंगे तो यह उस यूआरएल पर एक फॉर्म जमा करेगा
 – 
Sagar Sainkar
26 नवम्बर 2019, 10:32
यह मेरी पेपैल मुख्य स्क्रिप्ट है। डेटाबेस
 – 
Md Rumman
26 नवम्बर 2019, 11:21
हाय, @RamRaider। मैंने कॉलबैक फ़ंक्शन की कोशिश की। लेकिन अगर मैं कॉलबैक फ़ंक्शन का उपयोग करता हूं। पेपैल सदस्यता स्क्रिप्ट कॉल बैक फ़ंक्शन में काम नहीं कर रही है। यह केवल कार्रवाई में काम कर रहा है।
 – 
Md Rumman
26 नवम्बर 2019, 11:25

2 जवाब

मैंने अभी जल्दी से use ajax and let the callback submit the form विचार का परीक्षण किया है जिसका मैंने ऊपर टिप्पणी में उल्लेख किया है - ठीक काम करता प्रतीत होता है, इसलिए यह जानने के लिए उत्सुक होगा कि यह आपके लिए क्यों काम नहीं करता है - आंतरिक रूप से फ़ॉर्म पेपैल के सभी उद्देश्यों और उद्देश्यों के लिए बिल्कुल दिखाई देगा जैसा कि ऐसा होना चाहिए, मैं नहीं देख सकता कि यह क्यों काम नहीं करेगा (लेकिन शायद अभी तक पर्याप्त कॉफी नहीं है?)

सबमिट बटन को क्लिक करने पर उसकी डिफ़ॉल्ट क्रिया करने से रोककर ( e.preventDefault() ) आप फॉर्म के प्रवाह को बाधित करते हैं और जमा करने से पहले अपने तर्क को इंजेक्ट कर सकते हैं। फॉर्म को तुरंत भेजने के बजाय आप PHP स्क्रिप्ट में जो भी डेटा चाहते हैं उसे भेजते हैं, फिर यह डीबी पर लॉग इन करता है और AJAX फ़ंक्शन को "हाय, मैंने समाप्त कर दिया है - आगे बढ़ें" आदि का जवाब भेजता है और फिर कॉलबैक वास्तव में जमा करना जारी रखेगा फार्म।

<?php
    if( $_SERVER['REQUEST_METHOD']=='POST' ){
        ob_clean();

        /* log details to db */

        /*

        $database_username = 'root';
        $database_password = '';
        $pdo_conn = new PDO( 'mysql:host=localhost;dbname=shipping_pro', $database_username, $database_password );

        INSERT INTO posts (title) VALUES (:title) etc etc

        */

        /* send some sort of response to ajax callback */
        exit("banana's tend to be yellow and monkeys love 'em!");
    }
?>
<!DOCTYPE html>
<html lang='en'>
    <head>
        <meta charset='utf-8' />
        <title>Paypal: Record details to db and then submit to Paypal</title>
        <script>
            const ajax=function(url,params,callback){
                let xhr=new XMLHttpRequest();
                xhr.onload=function(){
                    if( this.status==200 && this.readyState==4 )callback.call( this, this.response )
                };
                xhr.onerror=function(e){
                    alert(e)
                };
                xhr.open( 'POST', url, true );
                xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                xhr.setRequestHeader('X-Requested-With','XMLHttpRequest');
                xhr.send( params );
            };

            const clickhandler=function(e){
                e.preventDefault();

                let form=this.parentNode;

                const callback=function(r){
                    alert( 'Response from saving to db: '+r+'\nNow submit the form to PayPal!!!' );
                    form.submit();
                };
                ajax( location.href, 'title='+this.previousElementSibling.value, callback )
            };
            document.addEventListener('DOMContentLoaded', ()=>{
                document.querySelector( 'form > input[type="submit"][name="insert"]' ).addEventListener( 'click', clickhandler )
            });
        </script>
    </head>
    <body>
        <form method="POST" action="https://www.paypal.com/cgi-bin/webscr">
            <input type='hidden' name='cmd' value='_s-xclick' />
            <input type='hidden' name='hosted_button_id' value='S2QXVVPPL7EUE' />
            <input type='hidden' name='on0' value='BANANA' />
            <input type='hidden' name='os0' value='BANANA' />
            <input type='hidden' name='currency_code' value='GBP' />

            <input type="text" name="title" placeholder="Title" />
            <input name="insert" type="submit" value="Add">
        </form>
    </body>
</html>
0
Professor Abronsius 26 नवम्बर 2019, 11:50
कृपया बताएं कि "one more input file" से आपका क्या मतलब है
 – 
Professor Abronsius
26 नवम्बर 2019, 19:31
नमस्ते, @ramraider। आपकी एक महान टिप्पणी के लिए धन्यवाद। यह टिप्पणी अच्छा काम कर रही है। एक और सवाल। क्या आप कृपया मुझे बता सकते हैं। मैं एक और इनपुट फ़ाइल कैसे जोड़ सकता हूं। <इनपुट प्रकार = "पाठ" नाम = "फ़ोन" />। जब मैं एक और फाइल जोड़ता हूं। और डेटाबेस में डालने का प्रयास करें। यह मालिश दिखा रहा है। ibb.co/tXwwz0Y
 – 
Md Rumman
26 नवम्बर 2019, 19:37
हाय, @ramraider। यहाँ पूरा कोड है। docs.google.com/document/d/…
 – 
Md Rumman
26 नवम्बर 2019, 19:42
आप ajax( location.href, 'title='+document.querySelector('input[name="title"]').value+'&phone='+document.querySelector('input[name="phone"]').value, callback ) को आजमा सकते हैं - हालांकि आप FormData ऑब्जेक्ट का उपयोग करना बेहतर समझ सकते हैं। शुभकामनाएं - अगर इससे मदद मिली तो सही के रूप में चिह्नित करना न भूलें
 – 
Professor Abronsius
26 नवम्बर 2019, 20:05
नमस्ते, @ramraider। आपकी तरह की मदद के लिए धन्यवाद। अंत में यह काम किया। धन्यवाद।
 – 
Md Rumman
27 नवम्बर 2019, 20:02

इसे नीचे दिए गए कोड का प्रयास करें

<?php
$database_username = 'root';
$database_password = '';
$pdo_conn = new PDO( 'mysql:host=localhost;dbname=shipping_pro', $database_username, $database_password );

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['insert'])) {
  $sql = "INSERT INTO posts (title) VALUES (:title)";
  $pdo_statement = $pdo_conn->prepare( $sql );
  $result = $pdo_statement->execute( array( 
    ':title'=>$_POST['title']
  ) );
  if (!empty($result) ){
    header('location:https://www.paypal.com/cgi-bin/webscr')
  }
}
?>
<form method="POST" action="index.php">
  <input type="text" name="title" placeholder="Title" />
  <input name="insert" type="submit" value="Add">
</form>
0
Sagar Sainkar 27 नवम्बर 2019, 08:47
कृपया इसे काम के उत्तर के रूप में चिह्नित करें यदि यह आपके लिए काम करता है :)
 – 
Sagar Sainkar
28 नवम्बर 2019, 08:33